ggplot中的fill和scale_color

时间:2017-09-26 22:11:23

标签: r ggplot2

我正在尝试在ggplot中使用彩条但有问题。有人可以解释如何正确使用fill参数和scale_colour参数吗?

library(ggplot2)

df<-data.frame(c(80,33,30),c("Too militarized","Just doing their job","Unfairly tarnished by a few"),c("57%","23%","21%"))
colnames(df)<-c("values","names","percentages")

ggplot(df,aes(names,values))+
  geom_bar(stat = "identity",position = "dodge",fill=names)+
  geom_text(aes(label=percentages), vjust=0)+
  ylab("percentage")+
  xlab("thought")+
  scale_colour_manual(values = rainbow(nrow(df)))

工作条形图示例

barplot(c(df$values),names=c("Too militarized","Just doing their job","Unfairly tarnished by a few"),col = rainbow(nrow(df)))

1 个答案:

答案 0 :(得分:1)

主要问题是fill内的aes来电中没有geom_bar()。从数据映射到颜色等视觉效果时,它必须位于aes()内。您可以通过使用fill=names打包aes()或直接指定填充颜色,而不是使用names来解决此问题:

选项1(无图例):

ggplot(df, aes(names, values)) + 
  geom_bar(stat="identity", fill=rainbow(nrow(df))) + 
  ylab("percentage") + 
  xlab("thought") 

选项2(图例,因为从数据到颜色的映射):

ggplot(df, aes(names, values)) + 
  geom_bar(stat="identity", aes(fill=names)) + 
  ylab("percentage") + 
  xlab("thought") + 
  scale_fill_manual(values=rainbow(nrow(df)))

请注意,在这两种情况下,您可能希望在调用df$names之前明确考虑ggplot,以便按照您想要的顺序获取条形码。