如何在 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))
我明白了,这已经足够好了:
谢谢大家的帮助!
处理类似问题的线程很少,但我真的没能像我期望的那样让这个线程正常工作。
我有这个数据集:
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))
我明白了,这已经足够好了:
谢谢大家的帮助!