Barplot - 堆叠 ggplot 百分比 barplot 起始值不是 0%

Barplot - stacked ggplot percentage barplot starting value NOT 0%

提问人:Thend 提问时间:6/17/2022 更新时间:6/17/2022 访问量:241

问:

我有一个这样的情节:

library(ggplot2)
library(reshape2)
library(ggh4x)

data <- data.frame(col1=c("Sample1","Sample2","Sample3","Sample4","Sample5","Sample6"),
                    col2=c(0.5,0.1,0.4,0.05,0.05,0.9),
                    col3=c(0.6,0.1,0.3,0.1,0.1,0.8),
                    col4=c(0.5,0.3,0.2,0.05,0.15,0.8),
                    col5=c("a","a","a","b","b","b"),
                    col6=c("c","c","c","c","c","c"))

data2 <- melt(data)

ggplot(data=data2, aes(x = variable, y = value, fill=col1))+
  geom_bar(position="stack", stat="identity")+
  scale_fill_manual(values=c("#e6194B","#ffe119","#f58231","#911eb4","#42d4f4","#bfef45")) +
  scale_y_continuous(expand = c(0, 0),labels = scales::percent) +
  facet_nested(~col6 + ~col5, scales = "free_x",space = "free_x",switch = "x") +
  ggtitle("Title") +
  theme_classic() +
  theme(strip.text.y = element_text(angle=0),legend.position = "right",
        legend.key.size = unit(0.4, 'cm'),
        axis.line = element_line(colour = "black"),
        axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1),
        strip.placement = "outside",                      
        strip.background = element_rect(color = "white", fill = "white"),
        axis.title = element_blank()) +                  
  guides(fill=guide_legend(title=NULL, ncol = 1)) +
  xlab("X axis") +
  ylab("Y axis")

这将创建这样的条形图:请看一下

我的问题很简单,如何将 y 轴起始值设置为 10% 而不是 0%(不对代码进行太多更改)。非常感谢所有答案!(检查了类似的问题,没有成功......

r ggplot2 条形图 百分比 堆积

评论


答:

2赞 stefan 6/17/2022 #1

虽然通常不建议用于条形图,但“设置”起点的一个选项是通过以下方式设置限制:coord_cartesian

library(ggplot2)
library(ggh4x)

ggplot(data = data2, aes(x = variable, y = value, fill = col1)) +
  geom_bar(position = "stack", stat = "identity") +
  scale_fill_manual(values = c("#e6194B", "#ffe119", "#f58231", "#911eb4", "#42d4f4", "#bfef45")) +
  scale_y_continuous(expand = c(0, 0), labels = scales::percent) +
  facet_nested(~ col6 + ~col5, scales = "free_x", space = "free_x", switch = "x") +
  ggtitle("Title") +
  theme_classic() +
  theme(
    strip.text.y = element_text(angle = 0), legend.position = "right",
    legend.key.size = unit(0.4, "cm"),
    axis.line = element_line(colour = "black"),
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
    strip.placement = "outside",
    strip.background = element_rect(color = "white", fill = "white"),
    axis.title = element_blank()
  ) +
  guides(fill = guide_legend(title = NULL, ncol = 1)) +
  xlab("X axis") +
  ylab("Y axis") +
  coord_cartesian(ylim = c(.1, NA))

评论

0赞 Thend 6/20/2022
以前,我尝试过 ylim(),但这无济于事。这确实有效,并且不会给出错误。感谢!