66-R可视化10-自由的在ggplot上添加文本(柱状图加计数)

2021-12-17 10:57:47 浏览数 (1)

前言

先前提到了60-R可视化-8-用ggsignif做统计分析绘图 (qq.com)这个包。

当时挖了一个坑:

那么问题来了,我的字体该加到哪里呢?

基本的ggplot 就够了

比如你可以将内容以captain 的形式加在图片的侧方。

ggstatsplot 就是个很好的例子:

subtitle, captain 都是很不错的选择。

参考下面就行了:57-R可视化-6-ggplot2基石三部曲最终之进阶为菜鸟 (qq.com)

我非要加在图片里

代码语言:javascript复制
p <- ggplot(iris)   geom_point(aes(Sepal.Length, Sepal.Width))
# Solution 1 
p   geom_text(x=3, y=30, label="Scatter plot") 
# Solution 2 
p   annotate(geom="text", x=3, y=30, label="Scatter plot")

自动给图像添加文本标记

主要设置映射图层:geom_label() 和geom_text()

R语言之可视化(20)之geom_label()和geom_text() - 云 社区 - 腾讯云 (tencent.com)[1]

可以参考下面的效果和上面的链接中的教程,这里我就不再赘述了。

代码语言:javascript复制

p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars)))
p   geom_text(check_overlap = T)
代码语言:javascript复制
> p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars)))
> p   geom_label()

为柱状图添加计数标记

个人感觉,比较常见的场景是:画好了柱状图,希望在柱状图上标记出相应的数字。当然先给你们展示一下效果啦:

在画图前,先提一个技巧。65-R茶话会14-柱状图用col还是bar,你可以省一点空间 (qq.com)

下面简单的对数据框操作一下:

代码语言:javascript复制
iris2 <- iris
iris2$group <- sample(c("a","b","c"), 150, replace = T)
head(iris2)

ggplot(iris2)   geom_bar(aes(Species, fill = group), 
                         position = "dodge")

iris2_count <- iris2 %>% 
  group_by(Species, group) %>%
  summarise(count = n())
iris2_count

对转换后的数据框作图:

代码语言:javascript复制
ggplot(iris2_count, aes(Species, count, fill = group))   
  geom_col(position = "dodge")    
  geom_text(aes(label = count), position = position_dodge(0.9), vjust = -0.8)

这里有个知识点,我们需要在全局指定分组,因为geom_text 图形映射不会受到fill 属性干扰,所以我直接全局指定了分组;你也可以单独对其指定label 映射。并且需要按照col 也使用dodge 的位置。

如果不指定分组或dodge:

代码语言:javascript复制
ggplot(iris2_count, aes(Species, count, fill = group))   
  geom_col(position = "dodge")    
  geom_text(aes(label = count), position = position_dodge(0.9), vjust = -0.8)

耍个酷

你们想不想画出来下面的这张图呢?

或者这张?

买冰淇淋给我,我就考虑一下。挑个时间,教你们一下吧。

参考资料

[1]R语言之可视化(20)之geom_label()和geom_text() - 云 社区 - 腾讯云 (tencent.com): https://cloud.tencent.com/developer/article/1394482

0 人点赞