ggplot geom_histogram颜色因子无法正常工作

时间:2016-12-06 06:32:38

标签: r plot ggplot2 colors

尝试根据因子列为叠加的直方图着色;所有酒吧都有“绿色”屋顶?我希望酒吧顶部与酒吧本身颜色相同。下图清楚地显示了什么是错误的。所有的酒吧顶部都有一条“绿色”水平线?

enter image description here

这是一个虚拟数据集:

BodyLength <- rnorm(100, mean = 50, sd = 3)

vector <- c("80","10","5","5")

colors <- c("black","blue","red","green")

color <- rep(colors,vector)

data <- data.frame(BodyLength,color)

我用来生成下图的程序:

plot <- ggplot(data = data, aes(x=data$BodyLength, color = factor(data$color), fill=I("transparent")))

plot <- plot + geom_histogram()

plot <- plot + scale_colour_manual(values = c("Black","blue","red","green"))

此外,由于数据列本身包含颜色名称,所以我不必在scale_color_manual中再次指定它们? ggplot可以从数据本身识别它们吗?但我现在非常想帮助解决第一个问题......谢谢。

1 个答案:

答案 0 :(得分:1)

这是一种快速获取颜色scale_colour_manual而无需写出矢量的方法:

data <- data.frame(BodyLength,color)
data$color<- factor(data$color)

然后,

scale_colour_manual(values = levels(data$color))

现在,关于你的第一个问题,我不知道为什么你的酒吧有绿色屋顶。但是,您可能希望在geom_histogram中查看位置参数的一些不同选项,例如

plot + geom_histogram(position="identity")

..或position="dodge"identity选项更接近你想要的但是由于绿色是绘制的最后一行,它会覆盖以前的颜色。

我自己更喜欢这些问题的密度图。

ggplot(data=data, aes(x=BodyLength, color=color)) + geom_density()
ggplot(data=data, aes(x=BodyLength, fill=color)) + geom_density(alpha=.3)