2016-01-22 117 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