我是ggplot的新手,并坚持下去:(我有一个数据框,其中包含四个场景中的月平均值,看起来像这样
M SC1 SC2 SC3 SC4 SC5
J -18.4 9.3 -43.7 -16.1 -16.0
F -17.9 -8.8 -46.3 -17.2 14.1
M - 是月份,SC *是不同场景的值。
为了将这些用于ggplot,我使用melt()
将其转换为“长”数据农场。结果看起来像这样
M variable value
J SC1 -18.4
F SC1 -17.98
M SC1 -28.23
A SC1 -36.98
M SC1 -23.82
J SC1 -26.86
J SC1 -21.76
A SC1 -19.99
S SC1 -19.91
O SC1 -26.79
N SC1 -35.94
D SC1 -23.76
J SC2 9.31
F SC2 -8.84
现在,我想将每个场景的季节动态绘制为线条(如果仅使用plot()
和“宽”数据框架,这很简单)。
然而,当我在ggplot
写作时:
ggplot(data=x_long, aes(x=M, y=value, group=variable)) + geom_line()
我弄得一团糟。我想这可能是因为没有合适的约会? y上的值也不是有序的 - 不是从-40到+18的序列,而是我在值列中随机的所有值。
我试图逐个提供方案:
ggplot(data=x_long, aes(x=M))+
geom_line(aes(y=value,group=SC1))
它声称没有SC1对象..
我真的很感激任何帮助。
答案 0 :(得分:1)
为了得到你想要的东西,你需要修理几点:
aes
中,您使用的名称与data.frame
中的列名匹配。这就是group=SC1
不起作用的原因y
的值对应x
的值,并且它们不是随机的。如果您在x轴上看到月份的名称按字母顺序排列。因此,ggplot
将所有月份的首字母缩小按顺序排列,并根据variable
对分组后的结果进行绘制。现在您要做的是以下内容:
您希望每个月都有唯一的名称,例如1月,2月等,然后你想自己订购。
x_long$M <- factor(x_long$M, levels = month.abb)
ggplot(data=x_long, aes(x = M, y = value, group = variable, col = variable)) +
geom_line()
希望这有帮助, 亚历