有点歧义

平平无奇小提琴图

library(ggplot2)
p1 = ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_violin(aes(fill = Species))+
  theme_bw()
p2 = ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_violin(aes(fill = Species),scale = "width")+
  theme_bw()
p3 = ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_violin(aes(fill = Species),scale = "width",trim = F)+
  theme_bw()
library(patchwork)
p1+p2+p3+plot_layout(guides = "collect")

其中涉及到的两个参数:

scale 默认count,点的数量决定小提琴图的胖瘦,scale = “width”是让多个小提琴显示同样的最大宽度。

trim 默认T 会修剪小提琴的上下尖尖,画出来的图范围就是数据分布范围。trim = F 画出来的图上下两端是尖的,颜值变高了。

这两个参数很有意思,我最近画图时发现,之前写的代码套示例数据是没看出问题的,但是换了数据瓦特了啊

换了数据再画

load("plot_dat.Rdata")
ggplot(dat,aes(Cell_type,Proportion,fill = Group)) + 
  geom_violin(trim = F) + 
  theme_bw() 

哈,这个图存在好几个问题。。。

1.小提琴为什么是一条线,琴呢?

就是因为横坐标数量太多,所以小提琴被挤扁了,调图的宽度没用。scale参数你值得拥有

2.我画的是cibersort免疫浸润的结果,怎么可能会有负数?

神奇的trim = F 的极端场景就是这个,很有歧义。因为翻了之前的示例代码,带有trim = F,一开始没注意它,现在看到,会让人误解数据分布范围,用的时候得比较一下和正确的数据分布范围查的多不多,不能为了美观丧失正确性啊!

ggplot(dat,aes(Cell_type,Proportion,fill = Group)) + 
  geom_violin(trim = F,scale = "width") +
  theme_bw() +
  theme(axis.text.x = element_text(angle=80,hjust = 1))+
  ggtitle("离离原上谱")

3.横坐标有覆盖。

这个倒是简单哦。斜一下就行了。

所以正确的代码应该是

ggplot(dat,aes(Cell_type,Proportion,fill = Group)) + 
  geom_violin(scale = "width") + #trim 默认T,不写也是一样的
  theme_bw() +
  theme(axis.text.x = element_text(angle=80,hjust = 1))

哈哈!这个问题难度大不,反正我是排查了好一会。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • kdeplot(核密度估计图) 核密度估计(kernel density estimation)是在概率论中用来估...
    dingtom阅读 854评论 0 0
  • 一、直方图与核密度曲线 直方图一般用来观察数据的分布形态,横坐标代表数值的均匀分段,纵坐标代表每个段内的观测数量(...
    apricoter阅读 1,136评论 0 4
  • 作者:严涛浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源 ggplot2学习笔记之图...
    Dylan的迪阅读 2,693评论 0 6
  • 最近考种数据回来了,今年测得单株,本想用箱线图表示,后来一并把小提琴图也做了,顺便做个笔记吧。 利用SUMIF对相...
    ShawnMagic阅读 13,096评论 2 74
  • Python 数据可视化分析 数据集 最后一个数据列 Churn 离网率 是我们的目标特征,它是布尔变量,其中 T...
    Jachin111阅读 625评论 0 0