2016-01-22 157 views
0

我想翻转ggplot2 boxplot的坐标,我也做坐标转换。ggplot2 boxplot的翻转坐标

library(ggplot2) 

dat = data.frame(group = factor(c(rep(1,3),rep(2,6))), 
       vals = c(c(0.1,2.25,1000), c(0.11,0.21,0.21,4.55,5.06,29.48))) 


    ggplot(dat,aes(group,vals)) + geom_boxplot() 
    ggplot(dat,aes(group,vals)) + geom_boxplot() + coord_trans(y="log10") 

如果我刚才加 “+ coord_flip()”,该轴的对数标度丢失..

ggplot(dat,aes(group,vals)) + geom_boxplot() + coord_trans(y="log10") + coord_flip() 

任何方式来实现COORDS的翻转?

感谢您的任何意见!

最佳, 孙燕姿

+2

你读[这个苏答案(http://stackoverflow.com/a/26185278/1305688)? –

+0

@Eric失败。哎呀。我没有看到这个评论。你首先建议。我应该删除我的答案吗? – boshek

+0

感谢您的评论,我看过这篇文章。但是,它不能解决我的问题。看到我的评论下面的答案。无论如何谢谢! – steffi

回答

1

也许有解决方法。你可以使用viewport()翻转你的地块。编辑:使用包cowplot,你可以切换y轴。

library(ggplot2) 
library(grid) 
library(cowplot) 
p <- ggplot(dat,aes(group,vals)) + geom_boxplot() + coord_trans(y="log10") + theme(axis.text.x = element_text(angle = 90, hjust = 1), axis.title.x = element_text(angle = 90, hjust = 1), axis.text.y = element_text(angle = 90, hjust = 1)) 

pp <- ggdraw(switch_axis_position(p, axis = 'y')) 

grid.newpage() 
print(pp, vp = viewport(angle = -90, width = 0.7, height = 0.8)) 

enter image description here

+0

嗨,谢谢,我已经考虑过这个选项.. 但是,我不知道X轴是在图形的顶部,而不是像往常一样 - 在底部.... – steffi

+0

看到我的编辑。更好? – MLavoie

+0

这很酷,我不知道'switch_axis_position'。谢谢! – steffi

0

只需使用scale_y_log10

ggplot(dat,aes(group,vals)) + 
geom_boxplot() + 
coord_flip() + 
scale_y_log10() 

然后根据需要只要调整。

+0

在这种情况下,我做了一个不同的转换。在计算boxplot的汇总统计信息之前对数据进行转换。看看boxplot是如何变化的: ggplot(dat,aes(group,vals))+ geom_boxplot()+ gomplot(dat,aes(group,vals))+ geom_boxplot()+ coord_trans(y =“log10” + scale_y_log10() 所以,我绝对只是想应用坐标变换,而不是尺度变换。 – steffi

+0

我很确定这些都是一样的。这只是数据或正在转化的规模之间的差异。 – boshek

+0

你有没有检查盒子?在这种情况下,如果您在执行log10转换之前或之后计算中位数,则会有所不同。 – steffi