【发布时间】:2019-11-26 13:44:39
【问题描述】:
我在我的数据上使用了 scale() 函数,以避免在进行混合模型时出现高度相关性。现在我希望原始值出现在我的情节中。所以我用x * attr(x, 'scaled:scale') + attr(x, 'scaled:center') 反转了缩放比例
并将这些值放在我用来绘制的数据框的新列中。例如,我的数据现在看起来像这样,其中 x 是实际值,x.s 是缩放值:
x <- sample(x=1:100, size = 50)
y <- sample(x=1:100, size = 50)
df <- as.data.frame(cbind(x,y))
df$x.s <- scale(df$x)
我现在想用 ggplot 绘制它,但在 x 轴上显示 x 的值而不是 x.s 的缩放值,所以我做了以下操作:
ggplot(df, aes(x = x.s, y = y))+
geom_point()+
scale_x_continuous(labels = df$x, breaks = df$x.s)+
labs(x = "Canopy openness [%]", y = "Rarefied richness") +
theme_bw()
到目前为止,这有效,输出看起来像这样:
我现在的问题是,我希望 x 轴上的刻度均匀分布,我通常会使用 breaks=seq(0,100,10),但是已经定义了中断以避免错误 Error in f(..., self = self) : Breaks and labels are different lengths,现在我不知道如何要做到这一点,任何帮助将不胜感激!
如果我在 x 轴上使用 x,在实际数据集中,我的 CI 预测回归将不再适合。这是我的数据集 1 中的图:带有缩放值 (x.s):
和 2:如果我在 x 轴上使用 x 而不是 x.s
【问题讨论】:
-
您可以为
scale_x_continuous的trans参数定义自己的转换,请参阅?scales::trans以获得帮助。但简单的解决方案是将x = x映射到aes()... 看起来你让它变得比需要的复杂得多。 -
感谢您的信息,我之所以让它变得如此复杂是因为在真实数据集中我还将预测的回归和置信区间绘制到同一个图中,所以如果我刚刚使用 x=x它们不再适合数据。我将如何转换 trans 参数?你能用这个例子解释一下吗?
-
我真的没有时间写关于它的教程,但是你可以在ggplot标签like this one中查看其他带有“custom trans”的问题,或者查看@中的示例987654339@package README
-
嗨@TreePete,更简单的解决方案实际上是使用x 作为x 轴。请记住,即使您回归,为您的响应变量(y 轴)创建的置信区间。只要转换前的 x 值与预测匹配,一切都很好。
-
感谢您的回答,但如果我使用 x 而不是 x.s 回归并且 CI 不适合,我编辑了问题并从我的数据集中包含了数字
标签: r ggplot2 axis-labels