Home Articles

ggplot2:不同美学的传说

Asked
Viewed 1454 times
6

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

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 Answers

  • 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

  • 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

Related