R:ggplot 中的 X 轴不接受负值作为数字
Negative values not accepted as numeric for X-axis in R:ggplot
这可能很简单,但我无法解决。
我正在加载一个看起来像这样的数据集,但它从 -50 到 1500:
Name ExpA ExpB -50 -49 -48 -47 -46 -45 -44
sampleA Light Low 12.326 12.326 12.328 36.979 36.979 24.566 24.652
SampleB Light High 0.0 9.333 9.3233 37.302 46.628 18.651 18.651
SampleC Dark Low 0.0 0.0 0.0 13.575 40.725 27.150 0.0
我对数据进行了融化:
x.melt <-melt(x, id=c("Name","ExpA", "ExpB"))
x.melt
Name ExpA ExpB variable value
1 SampleA Light Low -50 12.326402
2 SampleB Light High -50 0.000000
3 SampleC Dark Low -50 14.242440
4 SampleD Dark High -50 0.000000
9 SampleA Light Low -49 12.326402
10 SampleB Light High -49 9.325700
11 SampleC Dark Low -49 0.000000
12 SampleD Dark High -49 8.792096
...etc...
我想绘制数据。这在 x 轴以外的各个方面都很好用。如果我不在 x 轴调用中包含 'as.numeric()',那么它确定我的轴是一个离散变量。我的基本代码是:
p <- ggplot(data=x.melt, aes(x=as.numeric(variable), y=value, colour=ExpA))
p +
stat_smooth(method="loess", span=0.05, se=TRUE)
正如您所看到的,x 轴从零开始而不是 -50。
有没有办法正确解释轴调用的变量列?
我假设名为 variable 的列是一个因素。当您将一个因子转换为数字时,您是在告诉 R 您想要将该值替换为该值在该因子水平中的索引。例如,让
a <- c(3, -1, 1)
b <- factor(a)
b
# [1] 3 -1 1
# Levels: -1 1 3
注意它是如何对级别进行排序的。所以当你调用as.numeric
时,它会将-1
的任何值替换为1
,因为-1
是第一级,以此类推。看到这个
as.numeric(b)
# [1] 3 1 2
有多种方法可以将因子转换为数值向量并保留值。一个有效的方法是这样做
as.numeric(levels(b))[b]
# [1] 3 -1 1
要解决您的具体问题,请尝试
p <- ggplot(data=x.melt, aes(x=as.numeric(levels(variable))[variable], y=value, colour=ExpA))
p + stat_smooth(method="loess", span=0.05, se=TRUE)
这可能很简单,但我无法解决。
我正在加载一个看起来像这样的数据集,但它从 -50 到 1500:
Name ExpA ExpB -50 -49 -48 -47 -46 -45 -44
sampleA Light Low 12.326 12.326 12.328 36.979 36.979 24.566 24.652
SampleB Light High 0.0 9.333 9.3233 37.302 46.628 18.651 18.651
SampleC Dark Low 0.0 0.0 0.0 13.575 40.725 27.150 0.0
我对数据进行了融化:
x.melt <-melt(x, id=c("Name","ExpA", "ExpB"))
x.melt
Name ExpA ExpB variable value
1 SampleA Light Low -50 12.326402
2 SampleB Light High -50 0.000000
3 SampleC Dark Low -50 14.242440
4 SampleD Dark High -50 0.000000
9 SampleA Light Low -49 12.326402
10 SampleB Light High -49 9.325700
11 SampleC Dark Low -49 0.000000
12 SampleD Dark High -49 8.792096
...etc...
我想绘制数据。这在 x 轴以外的各个方面都很好用。如果我不在 x 轴调用中包含 'as.numeric()',那么它确定我的轴是一个离散变量。我的基本代码是:
p <- ggplot(data=x.melt, aes(x=as.numeric(variable), y=value, colour=ExpA))
p +
stat_smooth(method="loess", span=0.05, se=TRUE)
正如您所看到的,x 轴从零开始而不是 -50。
有没有办法正确解释轴调用的变量列?
我假设名为 variable 的列是一个因素。当您将一个因子转换为数字时,您是在告诉 R 您想要将该值替换为该值在该因子水平中的索引。例如,让
a <- c(3, -1, 1)
b <- factor(a)
b
# [1] 3 -1 1
# Levels: -1 1 3
注意它是如何对级别进行排序的。所以当你调用as.numeric
时,它会将-1
的任何值替换为1
,因为-1
是第一级,以此类推。看到这个
as.numeric(b)
# [1] 3 1 2
有多种方法可以将因子转换为数值向量并保留值。一个有效的方法是这样做
as.numeric(levels(b))[b]
# [1] 3 -1 1
要解决您的具体问题,请尝试
p <- ggplot(data=x.melt, aes(x=as.numeric(levels(variable))[variable], y=value, colour=ExpA))
p + stat_smooth(method="loess", span=0.05, se=TRUE)