如何在ggplot直方图中定义填充颜色?

9

我有以下简单数据

data <- structure(list(status = c(9, 5, 9, 10, 11, 10, 8, 6, 6, 7, 10, 
10, 7, 11, 11, 7, NA, 9, 11, 9, 10, 8, 9, 10, 7, 11, 9, 10, 9, 
9, 8, 9, 11, 9, 11, 7, 8, 6, 11, 10, 9, 11, 11, 10, 11, 10, 9, 
11, 7, 8, 8, 9, 4, 11, 11, 8, 7, 7, 11, 11, 11, 6, 7, 11, 6, 
10, 10, 9, 10, 10, 8, 8, 10, 4, 8, 5, 8, 7), statusgruppe = c(0, 
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, NA, 0, 1, 0, 1, 
0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 
1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 
1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0)), .Names = c("status", 
"statusgruppe"), class = "data.frame", row.names = c(NA, -78L
))

我想制作一个直方图:

ggplot(data, aes(status))+
geom_histogram(aes(y=..density..),
     binwidth=1, colour = "black",
     fill="white")+
theme_bw()+
scale_x_continuous("Staus", breaks=c(min(data$status,na.rm=T), median(data$status, na.rm=T), max(data$status, na.rm=T)),labels=c("Low", "Middle", "High"))+
scale_y_continuous("Percent", formatter="percent")

现在 - 我希望根据值来为垃圾桶着色 - 例如,值大于9的垃圾桶变成深灰色 - 其他所有垃圾桶都应该是浅灰色。

我已经尝试使用fill=statusgruppescale_fill_grey(breaks=9)等方法 - 但是我无法使其正常工作。有什么想法吗?

3个回答

14

希望这能帮你入门:

ggplot(data, aes(status, fill = ..x..))+
  geom_histogram(binwidth = 1) + 
  scale_fill_gradient(low = "black", high = "white")

ggplot(data, aes(status, fill = ..x.. > 9))+
  geom_histogram(binwidth = 1) + 
  scale_fill_grey()

1
谢谢 - 我已经改变了图例标签,像这样(供后人参考): scale_fill_grey("名称", breaks=c(FALSE,TRUE), labels=c("这个", "那个"))。还有一个问题:是否可以做到像..x.. >7,..x..>9这样的操作(如果我想要三个类别而不仅仅是两个)? - Andreas
2
谢谢!如果有其他人感兴趣,这是我完成它的方法:fill=cut(..x..,c(1,6,10))),binwidth=1,colour="black",)+scale_fill_grey("name",breaks=c("(1,6]","(6,10]",NA), labels=c("低", "中", "高"))+ - Andreas
实际上,对于这种情况,最好在数据中进行转换,而不是在图中进行转换。还要注意cut函数的标签参数。 - hadley

0

y=..density..之后尝试使用fill=..count..fill=I(..count..>9)怎么样?您需要稍微调整一下图例标题和标签,但可以正确地着色。

编辑:
看来我有点误解了您的问题。如果您想根据x坐标定义颜色,可以类似地使用自动变量..x..


谢谢你提供的好主意!然而,我想展示的不是计数,而是希望每个条形图的颜色取决于该条形图所代表的值(而不是计数)。也就是说,不是计数超过9的条形图,而是值超过9的条形图。我觉得我解释得不太清楚 :-/也许是我的坐标轴标签让我感到困惑。我想要的是将标签“middle”右侧的条形图着色。 - Andreas

0

关于scale_manual怎么样?这里是链接到Hadley的网站。我用过这个函数来设置箱线图的适当填充颜色。不确定它是否适用于直方图...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接