2011-08-25 65 views
30

我想製作一個條形圖,其中一個值比其他值大得多。有沒有一種不連續的Y軸?我的數據如下:使用ggplot2,我可以在軸上插入一箇中斷嗎?

df <- data.frame(a = c(1,2,3,500), b = c('a1', 'a2','a3', 'a4')) 

p <- ggplot(data = df, aes(x = b, y = a)) + geom_bar() 
p <- p + opts(axis.text.x=theme_text(angle= 90, hjust=1)) + coord_flip() 
p 

enter image description here

有沒有一種方法,我可以讓我的軸運行,從1- 10,然後490 - 500?我想不出任何其他繪製數據的方式(除了轉換它,我不想這麼做)

+3

我不認爲你可以在GGPLOT2介紹中斷。另一種方法是使用'log'的比例尺,這將使圖形更易於閱讀。 – Ramnath

+0

我意識到這樣可以更容易地在日誌範圍內閱讀,但我不想以這種方式顯示信息,因爲在轉換時隱藏的小值之間存在顯着差異。 – djq

+3

如何結合'facet_wrap()'與'scales =「free_x」' – Chase

回答

30

正如其他地方所指出的那樣,這不是ggplot2可以很好處理的問題,因爲破損的軸通常被認爲是有問題的。

其他策略通常被認爲是解決此問題的更好方法。布賴恩提到了一些(面向,兩個關注不同的價值觀)。另一種選擇,人們往往忽視,特別是對barcharts,是使

enter image description here

望着實際值,500並沒有掩蓋了其他值的差異!由於某些原因,表格沒有得到足夠的尊重,因爲數據是可視化技術。你可能反對說你的數據有很多很多的類別,這些類別在表格中變得很笨重。如果是這樣,那麼很可能你的條形圖將會有太多的條形圖,以至於不太明智。

而我不是爭辯表所有的時間。但是,如果您製作的酒吧相對較少,那麼他們肯定是要考慮的事情。如果你正在製作帶有大量酒吧的barcharts,無論如何你可能需要重新思考。

最後,在plotrix包中還有axis.break函數,該函數實現了破損的軸。但是,從我收集的信息中,您必須親自指定軸標籤和位置。

+0

Joran,我對使用這種類型的情節有着複雜的感受。你是對的 - 一張桌子可能是展示這一點的最好方式。 – djq

+0

@celenius - 我不是故意聽起來像是在說我,或者我在罵你。我只是覺得桌子並沒有太多的愛,有時候我會對此加以強化。 ;) – joran

+0

我不覺得責罵!它只是沒有想到使用一個...... – djq

1

我懷疑R中有什麼貨架,但是您可以將數據顯示爲一系列3D局部立方體。 500只有5 * 10 * 10,所以它可以很好地擴展。確切的價值可能是一個標籤。

這可能應該只用於如果你必須有由於某種原因具有圖形表示。

19

不與ggplot,但plotrix您可以輕鬆地做到這一點:

library(plotrix) 
gap.barplot(df$a, gap=c(5,495),horiz=T) 
5

不,不幸的是沒有

令人擔憂的是,允許不連續的軸會導致觀衆的欺騙。然而,有些情況下不具有不連續軸會導致失真。例如,如果軸被截斷,但通常位於某個區間內(例如[0,1]),則觀衆可能不會注意到截斷並對數據做出扭曲的結論。在這種情況下,顯式的不連續軸將更爲合適和透明。

比較:

Example of good use of continuous vs discontinuous axis

相關問題