ggplot2:不同美学的传说

时间:2014-06-01 00:38:59

标签: r ggplot2

我首先绘制一组模拟数据的直方图,然后用一种颜色填充条形图。然后我添加了模拟数据的密度函数的线,并使用不同的颜色生成线。现在我想使用图例来显示一种颜色(直方图的填充颜色)用于样本,而另一种颜色(线的颜色)用于理论密度。我怎样才能做到这一点?

enter image description here

代码如下

require(ggplot2)
df <- data.frame(x=rnorm(10^4))
p <- ggplot(df, aes(x=x)) + geom_histogram(aes(y=..density..), fill='steelblue', colour='black', alpha=0.8, width=0.2)
x <- seq(-4, 4, 0.01)
df <- data.frame(x=x, y=dnorm(x))
p <- p + geom_line(data=df, aes(x=x, y=y), colour='red', size=1.5)
p

2 个答案:

答案 0 :(得分:7)

您可以通过在每个数据框中添加新列来创建fillcolour美学以进入图例。在每种情况下,只有一个类别,但将它们放在aes()中可以为您提供所需的图例:

require(ggplot2)

df <- data.frame(x=rnorm(10^4), fill=rep("Sample", 10^4))
p <- ggplot(df, aes(x=x)) + geom_histogram(aes(y=..density.., fill=fill), 
     colour='black', alpha=0.8, width=0.2) +
     scale_fill_manual(values="steelblue") + labs(fill="")

x <- seq(-4, 4, 0.01)
df <- data.frame(x=x, y=dnorm(x), colour=rep("Theoretical Density",length(x)))
p <- p + geom_line(data=df, aes(x=x, y=y, colour=line), size=1.5) +
         scale_colour_manual(values="red") + labs(colour="")

enter image description here

答案 1 :(得分:6)

根本不更改您的数据,您可以指定以后可以通过手动缩放定义的文字aes()值。

df <- data.frame(x=rnorm(10^4))
p <- ggplot(df, aes(x=x)) + geom_histogram(aes(y=..density.., fill="samples"), 
    alpha=0.8, colour="black", width=0.2)
p <- p+scale_fill_manual("",breaks="samples", values="steelblue")

x <- seq(-4, 4, 0.01)
df <- data.frame(x=x, y=dnorm(x))
p <- p + geom_line(data=df, aes(x=x, y=y, colour="theory"), size=1.5)
p <- p+scale_color_manual("",breaks="theory", values="red")

enter image description here