前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言ggplot2分组的小提琴图加箱线图简单小例子

R语言ggplot2分组的小提琴图加箱线图简单小例子

作者头像
用户7010445
发布2021-03-15 09:45:28
4.6K0
发布2021-03-15 09:45:28
举报
文章被收录于专栏:小明的数据分析笔记本
首先是构造数据
代码语言:javascript
复制
set.seed(1234)
x <- rnorm(80, 5, 1)
df <- data.frame(groups = c(rep("group1",20),
                            rep("group2",20),
                            rep("group3",20),
                            rep("group4",20)),
                 value = x,
                 type = c(rep("A", 10),
                          rep("B", 10),
                          rep("A", 10),
                          rep("B", 10),
                          rep("A", 10),
                          rep("B", 10),
                          rep("A", 10),
                          rep("B", 10)))

set.seed()这个函数大家可能经常会看到这个函数,他的作用是保证自己模拟的数据和示例代码完全一致

作图是用groups做x轴,type填充颜色,每个group分为A,B两组

作图的时候和普通的箱线图小提琴图是一样的

代码

代码语言:javascript
复制
ggplot(data = df, aes(x = groups, y = value, fill = type)) +
  geom_violin()+
  geom_boxplot()

image.png

箱线图的宽度有点大,盖住了背后的小提琴图,把宽度设置的小一点,需要加width参数

代码语言:javascript
复制
ggplot(data = df, aes(x = groups, y = value, fill = type)) +
  geom_violin()+
  geom_boxplot(width=0.3)

image.png

这样的话两个箱子靠到了一起,没有和小提琴图的位置完全对上,这个时候需要设置position参数

代码语言:javascript
复制
ggplot(data = df, aes(x = groups, y = value, fill = type)) +
  geom_violin()+
  geom_boxplot(width=0.1,
               position = position_dodge(0.9))

image.png

这样就好了,上图每组的小提琴图之间的距离好像有点大,这个也可以用position这个参数调节

代码语言:javascript
复制
ggplot(data = df, aes(x = groups, y = value, fill = type)) +
  geom_violin(position = position_dodge(0.5))+
  geom_boxplot(width=0.1,
               position = position_dodge(0.5))

image.png

最后就是简单美化了
  • 更改配色
  • 设置主题

完整代码

代码语言:javascript
复制
set.seed(1234)
x <- rnorm(80, 5, 1)
df <- data.frame(groups = c(rep("group1",20),
                            rep("group2",20),
                            rep("group3",20),
                            rep("group4",20)),
                 value = x,
                 type = c(rep("A", 10),
                          rep("B", 10),
                          rep("A", 10),
                          rep("B", 10),
                          rep("A", 10),
                          rep("B", 10),
                          rep("A", 10),
                          rep("B", 10)))
df
library(ggplot2)
library(ggprism)
ggplot(data = df, aes(x = groups, y = value, fill = type)) +
  geom_violin(position = position_dodge(0.5))+
  geom_boxplot(width=0.1,
               position = position_dodge(0.5))+
  theme_prism()+
  scale_fill_manual(values = c("#1c9e77","#d95f02"))

image.png

推文的主要内容参考链接 https://stackoverflow.com/questions/27012500/align-violin-plots-with-dodged-box-plots

欢迎大家关注我的公众号小明的数据分析笔记本

另外还遇到一个问题是

R语言ggplot2作图如果文字标签包含罗马数字,如何输出pdf呢?

简单的代码

代码语言:javascript
复制
library(ggplot2)
ggplot()+
  #geom_point(aes(x=1,y=1))+
  geom_text(aes(x=1,y=1),label="\u0251",size=10)+
  geom_text(aes(x=1.5,y=1.5),label="α",size=10)+
  geom_text(aes(x=1.2,y=1.2),label="Ⅰ",size=10)

image.png

Rstudio里显示是正常的,导出为pdf格式的时候

image.png

罗马数字就是显示不出来

windows 10 下的字符映射表

win+R快捷键 输入 charmap

image.png

写代码有时候还挺无聊的,找一些有意思的代码自娱自乐一下,上面的视频是一个 玫瑰花的代码,大家感兴趣可以自己试一下呀!大家记得关注我的视频号呀!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先是构造数据
  • 最后就是简单美化了
  • 另外还遇到一个问题是
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档