平平无奇小提琴图
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))
哈哈!这个问题难度大不,反正我是排查了好一会。