2016-09-19 86 views
3

有幾個線程處理類似的問題,但我真的沒有設法得到這個工作,因爲我希望它。R ggplot2 facet_grid規模和空間

我有這樣的數據集:

 Item AssetClass variable value 
89 F/EER Hybrids 2016-09-15 5.0014 
103 F/SOLG   MA 2016-09-15 1.5829 
104 F/SOP   MA 2016-09-15 -5.4365 
105 F/SRV   MA 2016-09-15 6.1000 
49 F/EER Hybrids 2016-06-15 0.7179 
63 F/SOLG   MA 2016-06-15 0.0000 
64 F/SOP   MA 2016-06-15 4.7124 
65 F/SRV   MA 2016-06-15 13.5132 
9 F/EER Hybrids 2016-03-15 0.9599 
23 F/SOLG   MA 2016-03-15 0.0000 
24 F/SOP   MA 2016-03-15 6.6873 
25 F/SRV   MA 2016-03-15 9.9191 

結構如下:

'data.frame': 12 obs. of 4 variables: 
$ Item  : Factor w/ 40 levels "BRITISH POUND",..: 32 22 2 35 32 22 2 35 32 22 ... 
$ AssetClass: chr "Hybrids" "MA" "MA" "MA" ... 
$ variable : Date, format: "2016-09-15" "2016-09-15" ... 
$ value  : num 5.001 1.583 -5.436 6.1 0.718 ... 

我想用繪製這些數據:

ggplot(chartSet, aes(x = Item, 
        y = value, 
        alpha = factor(variable))) + 
    geom_bar(stat = "identity", position = "dodge", fill = "red") + 
    scale_alpha_manual(values = c(0.1, 0.4, 1)) + 
    labs(alpha = "") + 
    theme_bw() + xlab("") + ylab("% Contribution to VaR") + 
    facet_grid(AssetClass ~ ., scales = "free_x", space = "free_x") + 
    coord_flip() + 
    theme(strip.text.y = element_text(angle = 0)) + 
    theme(legend.position = "bottom", 
     axis.text = element_text(size = 5)) 

這是我用做其他類型的geoms和數據集,但我真的不明白爲什麼這次我有這樣的輸出:

Current output

我想吃些什麼,而不是僅僅是F /在雜種面和EER在MA一個其他三個。鑑於我使用「free_x」比例尺這就是我所期待的。

使用的全套數據這是「成功」的例子:

Good output

有一個公平的機會,我在一杯水迷路;如果是這樣的話:對不起!

+1

我在這個情節中沒有得到方面,使用Hybrids/MA作爲顏色​​陰影不是更好,如紅色/藍色和下降方面,那麼將只有一個Yaxis。 – zx8754

+0

如果我沒有弄錯,我不認爲你可以用ggplot做到這一點。即使scale = free,它也會調整該facet的scale的限制,但不會「排除」facet中的任何數據。對於類似於這裏的分類數據,這變得更加明顯(例如與連續數字相反)。 –

+1

@LloydChristmas我認爲你可以。我正在更新OP,添加一個成功的「刻面」的例子。 –

回答

3

這裏的問題,正如通常與刻面一樣,是coord_flip與其他最基本的方面的結合。和往常一樣,可以使用github上的ggstance包解決問題。該軟件包具有常見幾何的水平版本,如geom_barh,這使coord_flip不必要。

library(ggstance) 
ggplot(chartSet, aes(y = Item, 
        x = value, 
        alpha = factor(variable))) + 
     geom_barh(stat = "identity", position = "dodgev", fill = "red") + 
     scale_alpha_manual(values = c(0.1, 0.4, 1)) + 
     labs(alpha = "") + 
     theme_bw() + ylab("") + xlab("% Contribution to VaR") + 
     facet_grid(AssetClass ~ ., scales = "free_y", space = "free_y") + 
     theme(strip.text.y = element_text(angle = 0)) + 
     theme(legend.position = "bottom", 
       axis.text = element_text(size = 5)) 

enter image description here

+0

我相信這是解決方案。不幸的是,我沒有機會從工作PC訪問Github。這意味着我將無法運行_devtools :: install_github(「lionel-/ggstance」)_。 刪除_coord_flip()_語句並相應地更改分面,找出問題。我將隨之離開:非常感謝! –

+0

對不起@Axeman是否有任何理由爲什麼,使用與ggstance包相同的代碼(我不得不從zip文件中構建它),我得到一個警告_position_dodge需要不重疊的x intervals_,並且生成的條是堆疊的而不是並排? –

+1

只需稍作調整即可獲得您發佈的內容:而不是_position =「閃避」_使用_position =「dodgev」_(可能與包的新版本有關?)。 –

0

鑑於問題凸顯,我略微改變了報告,並通過使用

ggplot(chartSet, aes(x = Item, 
        y = value, 
        alpha = factor(variable))) + 
    geom_bar(stat = "identity", position = "dodge", fill = "red") + 
    scale_alpha_manual(values = c(0.1, 0.4, 1)) + 
    labs(alpha = "") + 
    theme_bw() + xlab("") + ylab("% Contribution to VaR") + 
    facet_grid(. ~ AssetClass, scales = "free_x", space = "free_x") + 
    #coord_flip() + 
    theme(strip.text.x = element_text(angle = 90)) + 
    theme(legend.position = "bottom", 
     axis.text = element_text(size = 5, angle = 90)) 

我得到了這一點,這是不夠好:

solution

感謝大家的幫助!