绘制ggplot2 - 针对月份的季节性动态

时间:2015-03-27 16:04:07

标签: r plot ggplot2

我是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对象..

我真的很感激任何帮助。

1 个答案:

答案 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()

enter image description here

希望这有帮助, 亚历