好些天没更了!如今小编的狗熊会人才计划结束,终于腾出手来自己玩了!看到标题你可能会有疑问,ggplot2的水平版本又是什么鬼,其实没那么玄乎,就是把正常的ggplot2图形翻转一下,横着放。类似于柱状图和条形图那样的区别。
或许你还有疑问,不就是把 ggplot2 图形水平放置吗有必要单独拎出来讲?硬要说其实也没那个必要,但为了介绍 ggstance 这款延伸包,小编觉得还是有必要拿出来讲一讲的。ggplot2 本身自带的 coord_flip( )函数并不能很好的实现转换,后者大多时候都是将图形整体翻转,一涉及到更加细致的图形,其简单的整体翻转并不能达到效果,这时候我们可能就需要 ggstance 包来实现了。
ggstance
我们需要从GitHub上获得ggstance包的安装。
devtools::install_github("lionel-/ggstance")
ggstance 的水平图形属性和统计函数可以方便的绘制水平 ggplot2 图形,具体如下:
水平几何图形:
geom_barh( )
geom_histogramh( )
geom_linerangeh( )
geom_errorbarh( )
geom_crossbarh( )
geom_boxploth( )
geom_violinh( )
水平统计函数:
stat_binh( )
stat_boxploth( )
stat_counth( )
stat_xdensity( )
stat_summaryh( )
垂直位置函数:
position_dodgev( )
position_nudgev( )
position_fillv( )
position_stackv( )
position_jitterdodgev( )
大家发现了吧,只是在正常的 ggplot2 函数后面加上了一个 h 表示水平展示就 okay了!
ggstance例子
一些情况下我们使用 ggplot2 里面的 coord_flip( ) 函数即可实现坐标系的翻转,把图形水平展示。
# 图形垂直陈列 ggplot(mpg, aes(class, hwy, fill = factor(cyl))) + geom_boxplot()
# coord_flip()函数水平陈列 ggplot(mpg, aes(class, hwy, fill = factor(cyl))) + geom_boxplot() + coord_flip()
可见coord_flip( )函数也可以实现将坐标系翻转过来的功能。这时候 ggstance 貌似是多余的。且看 ggstance 的效果。
library(ggstance) # ggstance包图形水平陈列 ggplot(mpg, aes(hwy, class, fill = factor(cyl))) + geom_boxploth()
和 coord_flip( )效果一模一样!那还要 ggstance 做什么!还没说完,且看下面的例子。
df <- data.frame( Group = factor(rep(1:3, each = 4), labels = c("Drug A", "Drug B", "Control")), Subject = factor(rep(1:6, each = 2), labels = c("A", "B", "C", "D", "E", "F")), Result = rnorm(12) ) vertical <- ggplot(df, aes(Subject, Result))+ geom_boxplot(aes(fill = Group))+ facet_grid(. ~ Group, scales = "free_x") vertical
再用coord_flip( )翻转一下看看:
vertical + coord_flip()
箱子是翻过来了,但是分面标度却保留了原来的样子。翻转失败
继续调整:
vertical + facet_grid(Group ~ ., scales = "free_x") + coord_flip()
箱子水平了,分面也调正确了,但是发现哪里好像不大对劲
subject映射给每组都添加了CDEF ! 翻转不成功!
最后看看 ggstance 的处理效果:
horizontal <- ggplot(df, aes(Result, Subject))+ geom_boxploth(aes(fill = Group))+ facet_grid(Group ~ ., scales = "free_y") horizontal
嘿!翻转成功!ggstance表现完美!
现在我说 ggstance 是最好的 ggplot2 图形水平转换工具应该没什么疑义了吧?
参考资料:
https://github.com/lionel-/ggstance
往期精彩:
一个数据科学爱好者的学习日记