如何在 ggplot2 中制作带有自由刻度和 space 的水平多面条形图?

How to make a a horizontal, faceted bar chart with free scales and space in ggplot2?

处理类似问题的线程很少,但我真的没能像我期望的那样让这个线程正常工作。

我有这个数据集:

      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 和数据集做的事情,但我真的不明白为什么这次我有这个输出:

我想要的只是 F/EER 在 Hybrids 方面,另外三个在 MA 方面。鉴于我使用 "free_x" 作为 尺度 这就是我所期待的。

使用完整的数据集,这是 "success" 的示例:

我很有可能迷失在一杯水中;如果是这样的话:抱歉!

这里的问题与分面一样,是 coord_flip 与最基本的分面以外的任何东西的组合。和往常一样,可以使用 github 上的 ggstance 包解决问题。这个包有普通 geom 的水平版本,例如 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))

鉴于突出显示的问题,我稍微更改了报告并使用

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))

我明白了,这已经足够好了:

谢谢大家的帮助!