ggplot2如何将y比例相等的图形对齐为百分比

时间:2018-11-16 12:24:58

标签: r ggplot2 bar-chart percentage

我正在尝试获取2个对齐的条形图,并标出2个不同因子的百分比比例。以百分比计算的y比例不同。我希望两个图的y比例相同,例如,两个图的0到40%。我尝试了ylim(),它在百分比刻度上不起作用。下面的例子

library(ggplot2)
library(scales)
data("diamonds")

第一个剪切条形图

  p<- ggplot(diamonds, aes(x = cut)) +  
    geom_bar(aes(y = (..count..)/sum(..count..), fill=cut)) + 
    scale_y_continuous(labels = percent) +
    geom_text(aes(y = ((..count..)/sum(..count..)), label = 
    scales::percent((..count..)/sum(..count..))), 
            stat = "count", vjust = -0.25) +
    ggtitle("Cut") + theme(plot.title = element_text(hjust = 0.5, size=14, 
    face="bold")) + 
    xlab("Cut") +
    ylab("Percent") +
    theme(legend.position="bottom")

为清晰起见,第二个条形图

p1<- ggplot(diamonds, aes(x = clarity)) +  
geom_bar(aes(y = (..count..)/sum(..count..), fill=clarity)) + 
scale_y_continuous(labels = percent) +
geom_text(aes(y = ((..count..)/sum(..count..)), label = 
scales::percent((..count..)/sum(..count..))), 
        stat = "count", vjust = -0.25) +
ggtitle("Clarity") + theme(plot.title = element_text(hjust = 0.5, size=14, 
face="bold")) + 
xlab("Clarity") +
ylab("Percent") +
theme(legend.position="bottom")

排列不同比例的条形图

  grid.arrange(p,p1, ncol = 2)  

不同的比例,但我想例如两者都达到最高40%

enter image description here

如果比例不是百分比,我会这样做:

p<- ggplot(diamonds, aes(x = cut)) +  
  geom_bar(aes(y = (..count..)/sum(..count..), fill=cut)) + 
  scale_y_continuous(labels = percent) +
  geom_text(aes(y = ((..count..)/sum(..count..)), label = scales::percent((..count..)/sum(..count..))), 
            stat = "count", vjust = -0.25) +
  ggtitle("Cut") + theme(plot.title = element_text(hjust = 0.5, size=14, face="bold")) + 
  xlab("Cut") +
  ylab("Percent") +
  ylim(0, 40)
  theme(legend.position="bottom")

但是,在这里,它当然不起作用,并返回以下内容:

enter image description here

1 个答案:

答案 0 :(得分:2)

好的,我找到了一种方法,在这里,将比例缩放比例限制为60%的剪切代码

p<- ggplot(diamonds, aes(x = cut)) +  
  geom_bar(aes(y = (..count..)/sum(..count..), fill=cut)) + 
  geom_text(aes(y = ((..count..)/sum(..count..)), label = scales::percent((..count..)/sum(..count..))), 
            stat = "count", vjust = -0.25) +
  ggtitle("Diamonds Cut") + theme(plot.title = element_text(hjust = 0.5, size=14, face="bold")) + 
  scale_y_continuous(labels = scales::percent, limits=c(0,0.6)) + labs(y="Percent")
xlab("Cut") +
  theme(legend.position="bottom")
p

enter image description here