用ggplot绘制分组的geom_bar图表 - 将因子类别的标签添加到x轴标签中

4
我有这个R代码来制作一个垂直分组条形图:
library(ggplot2)
exampledf <- data.frame(
  subchar = c("facebook", "twitter", "snapchat", "male", "female"),
  superchar = c("social media", "social media", "social media", "gender", "gender"),
  cweight = c(.2, .4, .4, .7, .3)
)

ggplot(exampledf, aes(x = superchar, y = cweight, fill = subchar)) +
  geom_bar(stat='identity', position = position_dodge()) +
  #scale_fill_manual(values = c(col.tint(color_in, .7), col.tint(color_in, .8), col.tint(color_in, .9), col.tint(color_in, 1))) +
  scale_fill_discrete()+
  coord_flip() +
  theme_minimal() +
  geom_text(aes(label = signif(cweight, digits=3)), position=position_dodge(width=0.9), hjust=.5, size=2.5)+
  theme(
    legend.position="none",
    axis.title.x=element_blank(),
    axis.title.y=element_blank(),
    axis.text.x=element_blank(),
    axis.ticks.y=element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  )

然而,我想在图中添加'subchar'标签(位于'superchar'标签的右侧,但在条形图的左侧): Image of graph with location 有一种方法可以做到这一点吗?
2个回答

4

使用分面技术(faceting),为superchar创建可视化图表,并将subchar作为x轴美学要素:

ggplot(exampledf, aes(x=subchar, y = cweight, fill = subchar)) +
  geom_col() +
  geom_text(aes(label = signif(cweight, digits=3)), 
            position=position_stack(vjust=0.5), 
            size=3, colour="white")+
  theme_void() +
  theme(
    axis.text.y=element_text(size=10),
    strip.placement="outside",
    strip.text.y=element_text(angle=180, hjust=1, face="bold", size=11,
                              margin=margin(r=10))
  ) +
  coord_flip() +
  facet_grid(superchar ~ ., scales="free_y", space="free_y", switch="y") +
  scale_y_continuous(expand=c(0,0)) +
  guides(fill=FALSE)

enter image description here


2

如果您已经需要在其他变量上进行划分,那么可以使用geom_text来实现旋转标签以查看整个内容的hacky方法。

library(ggplot2)
exampledf <- data.frame(
  subchar = c("facebook", "twitter", "snapchat", "male", "female"),
  superchar = c("social media", "social media", "social media", "gender", "gender"),
  cweight = c(.2, .4, .4, .7, .3)
)

ggplot(exampledf, aes(x = superchar, y = cweight, fill = subchar)) +
  geom_bar(stat = "identity", position = position_dodge()) +
  coord_flip() +
  theme_minimal() +
  geom_text(
    aes(label = signif(cweight, digits = 3)),
    position = position_dodge(width = 0.9),
    hjust = .5, size = 2.5
  ) +
  geom_text(
    aes(label = subchar, y = 0),
    position = position_dodge(width = 0.9),
    vjust = 1.5, size = 2.5, angle = -90
  ) +
  theme(
    legend.position = "none",
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.text.x = element_blank(),
    axis.ticks.y = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  )

此代码示例由 reprex包 (版本号v0.3.0) 于2019年09月19日创建。


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