条形图中的渐变填充

时间:2014-01-14 20:17:31

标签: r ggplot2

我正在查看不同人群的行为(在此数据集中称为Clusters)以及他们对所使用的浏览器类型的偏好。我想创建一个条形图,显示使用每种类型浏览器的每个群集的百分比。

以下是生成类似数据集的一些代码(请忽略每个群集的百分比不等于1):

browserNames <- c("microsoft","mozilla","google")
clusterNames <- c("Cluster 1","Cluster 2","Cluster 3")
percentages <- runif(n=length(browserNames)*length(clusterNames),min=0,max=1)

myData<-as.data.frame(list(browserNames=rep(browserNames,3),
                           clusterNames=rep(clusterNames,each=3),
                           percentages=percentages))

到目前为止,这是我能够提出的代码,以获得我想要的图表:

ggplot(myData, aes(x=browserNames, y=percentages, fill=factor(clusterNames))) +
    geom_bar(stat="identity",position="dodge") +
    scale_y_continuous(name="Percent Weight", labels=percent)

我希望每个聚类的填充都是一个渐变填充,我确定了高值和低值。因此,在这个例子中,我希望能够为每个表示的集群设置3个高值和低值。

我在使用不同的scale_fill命令时遇到了麻烦,而且我对ggplot很新,我很确定我可能只是做错了。有什么想法吗?

编辑:这是我正在寻找的图片:

enter image description here

(原始图片位于https://www.dropbox.com/s/py6hifejqz7k54v/gradientExample.bmp

1 个答案:

答案 0 :(得分:3)

这接近你的想法吗?

# color set depends on browser
library(RColorBrewer)     # for brewer.pal(...)
gg        <- with(myData, myData[order(browserNames,percentages),])
gg$colors <- 1:9
colors    <- c(brewer.pal(3,"Reds"),brewer.pal(3,"Greens"),brewer.pal(3,"Blues"))

ggplot(zz, aes(x=browserNames, y=percentages, 
               fill=factor(colors), group=factor(clusterNames))) +
  geom_bar(stat="identity",position="dodge", color="grey70") + 
  scale_fill_manual("Cluster", values=colors, 
                    breaks=c(3,6,9), labels=c("Google","Microsoft","Mosilla"))

# color set depends on cluster
library(RColorBrewer)     # for brewer.pal(...)
gg        <- with(myData, myData[order(clusterNames,percentages),])
gg$colors <- 1:9
col    <- c(brewer.pal(3,"Reds"),brewer.pal(3,"Greens"),brewer.pal(3,"Blues"))

ggplot(gg, aes(x=browserNames, y=percentages, 
               fill=factor(colors), group=factor(clusterNames))) +
  geom_bar(stat="identity",position="dodge", color="grey70") + 
  scale_fill_manual("Cluster", values=col, 
                    breaks=c(3,6,9), labels=c("Cluster1","Cluster2","Cluster3"))