在ggplot2中饰演传奇

时间:2015-06-29 20:05:35

标签: r ggplot2 reshape2

我在与ggplot2中的标签交互时遇到了问题。

我有两个实验的两个数据集(温度与时间),但是在不同的时间步长记录。我已经设法合并了数据框并将它们放在一起,使用reshape2库中的melt函数将它们绘制在同一个图形中。 因此,初始数据框看起来像这样:

> d1
    step   Temp
1  512.5 301.16
2  525.0 299.89
3  537.5 299.39
4  550.0 300.58
5  562.5 300.20
6  575.0 300.17
7  587.5 300.62
8  600.0 300.51
9  612.5 300.96
10 625.0 300.21
> d2
   step   Temp
1   520 299.19
2   540 300.39
3   560 299.67
4   580 299.43
5   600 299.78
6   620 300.74
7   640 301.03
8   660 300.39
9   680 300.54
10  700 300.25

我像这样结合:

> mrgd <- merge(d1, d2, by = "step", all = T)
step Temp.x Temp.y
1  512.5 301.16     NA
2  520.0     NA 299.19
...

用ggplot2把它换成长格式:

> melt1 <- melt(mrgd3, id = "step")
> melt1
    step variable  value
1  512.5   Temp.x 301.16
2  520.0   Temp.x     NA
...

现在,我想做一个值分布的直方图。我是这样做的:

p <- ggplot(data = melt1, aes(x = value, color = variable, fill = variable)) + geom_histogram(alpha = 0.4)

I get this plot

我的问题是,当我尝试修改此图表的图例时,我不知道该怎么做!我已经按照R Graphics Cookbook一书中的建议,但我没有运气。

我试图这样做,例如(更改图例的标签):

> p + scale_fill_discrete(labels = c("d1", "d2"))

但我只是创造了一个新的&#34;传奇盒子,就像这样

enter image description here

甚至完全删除传奇

> p + scale_fill_discrete(guide = F)

我刚拿到这个

enter image description here

最后,这样做也没有帮助

> p + scale_fill_discrete("")

同样,它只是添加了一个新的传奇框

enter image description here

有谁知道这里发生了什么?看起来好像我正在制作另一个Label对象,如果这有任何意义的话。我已经查看了本网站中的其他相关问题,但我还没有发现有人遇到与我相同的问题。

2 个答案:

答案 0 :(得分:4)

删除aes(color = variable...)以删除属于aes(color = ...)的缩放。

ggplot(data = melt1, aes(x = value, fill = variable)) + 
  geom_histogram(alpha = 0.4) + 
  scale_fill_discrete(labels = c("d1", "d1")) # Change the labels for `fill` scale

enter image description here

第二个图包含aes(color = variable...)。在这种情况下,颜色将在直方图箱周围绘制彩色轮廓。您可以关闭比例,以便只有一个图例,即fill

创建的图例
ggplot(data = melt1, aes(x = value, color = variable, fill = variable)) +
  geom_histogram(alpha = 0.4) +
  scale_fill_discrete(labels = c("d1", "d1")) +
  scale_color_discrete(guide = F) # Turn off the color (outline) scale

enter image description here

答案 1 :(得分:1)

最直接的做法是根本不使用reshape2merge,而是使用rbind数据框:

dfNew <- rbind(data.frame(d1, Group = "d1"),
  data.frame(d2, Group = "d2"))
ggplot(dfNew, aes(x = Temp, color = Group, fill = Group)) +
  geom_histogram(alpha = 0.4) +
  labs(fill = "", color = "")

如果您想按组改变alpha:

ggplot(dfNew, aes(x = Temp, color = Group, fill = Group, alpha = Group)) +
  geom_histogram() +
  labs(fill = "", color = "") +
  scale_alpha_manual("", values = c(d1 = 0.4, d2 = 0.8))

另请注意,position的默认geom_histogram"stacked"。除非您使用geom_histogram(position = identity),否则条形图不会重叠。

Histogram