ggplot2 堆叠和分组条形图在一起
ggplot2 stacked and group barchart together
我正在尝试重现这个
到目前为止我有
但我需要相反的年份 - 下面的年份和上面的国家/地区作为标签。
这里有两个 SO 答案
First and
代码
ggplot(ownership, aes(x = Country, y = Percent, fill = Category)) +
geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ Year) +
theme_tufte() +
scale_fill_brewer(palette = "Paired") +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.text = element_text(size = 10)) +
theme(axis.text.x = element_text(size = 12)) +
theme(axis.text.y = element_text(size = 12)) +
theme(plot.margin = margin(0.1, 0.1, 0.1, 0.1, "cm")) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank())
数据
> dput(ownership)
structure(list(Country = c("Cote d'Ivoire", "Cote d'Ivoire",
"Ethiopia", "Ethiopia", "Kenya", "Kenya", "Nigeria", "Nigeria",
"Senegal", "Senegal", "South Africa", "South Africa", "Uganda",
"Uganda", "Cote d'Ivoire", "Cote d'Ivoire", "Ethiopia", "Ethiopia",
"Kenya", "Kenya", "Nigeria", "Nigeria", "Senegal", "Senegal",
"South Africa", "South Africa", "Uganda", "Uganda", "Cote d'Ivoire",
"Cote d'Ivoire", "Ethiopia", "Ethiopia", "Kenya", "Kenya", "Nigeria",
"Nigeria", "Senegal", "Senegal", "South Africa", "South Africa",
"Uganda", "Uganda"), Year = c(2014, 2017, 2014, 2017, 2014, 2017,
2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014,
2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017,
2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014,
2017, 2014, 2017), Percent = c(10, 7, 22, 35, 16, 9, 42, 34,
9, 11, 56, 50, 9, 9, 5, 7, 0, 0, 39, 47, 2, 5, 3, 10, 13, 17,
18, 24, 19, 27, 0, 0, 19, 26, 0, 0, 4, 22, 2, 2, 17, 26), Category =
c("Category A",
"Category A", "Category A", "Category A", "Category A", "Category A",
"Category A", "Category A", "Category A", "Category A", "Category A",
"Category A", "Category A", "Category A", "Category B", "Category B",
"Category B", "Category B", "Category B", "Category B", "Category B",
"Category B", "Category B", "Category B", "Category B", "Category B",
"Category B", "Category B", "Category C", "Category C", "Category C",
"Category C", "Category C", "Category C", "Category C", "Category C",
"Category C", "Category C", "Category C", "Category C", "Category C",
"Category C")), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -42L), spec = structure(list(cols = list(
Country = structure(list(), class = c("collector_character",
"collector")), Year = structure(list(), class = c("collector_double",
"collector")), Percent = structure(list(), class = c("collector_double",
"collector")), Category = structure(list(), class =
c("collector_character",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
如有任何提示,我们将不胜感激!
已更新
更改 X = Year
和 facet_grid(~ Country)
后,我得到了更好的结果,但 x 轴上出现了一些问题。 R 对待年份的方式与我预期的不同。我有 2014 年和 2017 年,它为我提供了 2014 年、2016 年、2017 年。
不要使用 facet_grid(~ Year)
,这将制作两年的两个并排图表(就像您现在所做的那样)。
通过使用国家/地区年份变量,您可以获得与您想要的图表相似的图表,因此:
ownership$CountryYear <- paste(ownership$Country, ownership$Year)
然后:
ggplot(ownership, aes(x = CountryYear, y = Percent, fill = Category)) +
geom_bar(stat = 'identity', position = 'stack') +
...
但您可能需要多次使用标签才能获得与您想要的图表完全相同的图表。
亲自解决。我在 x 轴上添加了 as.character()
。
最终代码
ggplot(ownership, aes(x = as.character(Year), y = Percent, fill = Category)) +
geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ Country) +
theme_tufte() +
scale_fill_brewer(palette = "Paired") +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.text = element_text(size = 10)) +
theme(axis.text.x = element_text(size = 12)) +
theme(axis.text.y = element_text(size = 12)) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank())
完成!谢谢!
这让你接近(使用模拟数据,因为你没有提供任何数据):
library(ggplot2)
#make similar data
df <- expand.grid(country = letters[1:4],
year = c("2014", "2017"),
category = LETTERS[1:3])
df$percent <- runif(nrow(df))
ggplot(df, aes(year, percent, fill = category)) +
geom_bar(stat = "identity") +
facet_wrap(~country, ncol = 4, strip.position = "bottom") +
theme(legend.position = "none")
由 reprex package (v0.2.1)
于 2019-02-09 创建
我正在尝试重现这个
到目前为止我有
但我需要相反的年份 - 下面的年份和上面的国家/地区作为标签。
这里有两个 SO 答案
First and
代码
ggplot(ownership, aes(x = Country, y = Percent, fill = Category)) +
geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ Year) +
theme_tufte() +
scale_fill_brewer(palette = "Paired") +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.text = element_text(size = 10)) +
theme(axis.text.x = element_text(size = 12)) +
theme(axis.text.y = element_text(size = 12)) +
theme(plot.margin = margin(0.1, 0.1, 0.1, 0.1, "cm")) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank())
数据
> dput(ownership)
structure(list(Country = c("Cote d'Ivoire", "Cote d'Ivoire",
"Ethiopia", "Ethiopia", "Kenya", "Kenya", "Nigeria", "Nigeria",
"Senegal", "Senegal", "South Africa", "South Africa", "Uganda",
"Uganda", "Cote d'Ivoire", "Cote d'Ivoire", "Ethiopia", "Ethiopia",
"Kenya", "Kenya", "Nigeria", "Nigeria", "Senegal", "Senegal",
"South Africa", "South Africa", "Uganda", "Uganda", "Cote d'Ivoire",
"Cote d'Ivoire", "Ethiopia", "Ethiopia", "Kenya", "Kenya", "Nigeria",
"Nigeria", "Senegal", "Senegal", "South Africa", "South Africa",
"Uganda", "Uganda"), Year = c(2014, 2017, 2014, 2017, 2014, 2017,
2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014,
2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017,
2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014, 2017, 2014,
2017, 2014, 2017), Percent = c(10, 7, 22, 35, 16, 9, 42, 34,
9, 11, 56, 50, 9, 9, 5, 7, 0, 0, 39, 47, 2, 5, 3, 10, 13, 17,
18, 24, 19, 27, 0, 0, 19, 26, 0, 0, 4, 22, 2, 2, 17, 26), Category =
c("Category A",
"Category A", "Category A", "Category A", "Category A", "Category A",
"Category A", "Category A", "Category A", "Category A", "Category A",
"Category A", "Category A", "Category A", "Category B", "Category B",
"Category B", "Category B", "Category B", "Category B", "Category B",
"Category B", "Category B", "Category B", "Category B", "Category B",
"Category B", "Category B", "Category C", "Category C", "Category C",
"Category C", "Category C", "Category C", "Category C", "Category C",
"Category C", "Category C", "Category C", "Category C", "Category C",
"Category C")), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -42L), spec = structure(list(cols = list(
Country = structure(list(), class = c("collector_character",
"collector")), Year = structure(list(), class = c("collector_double",
"collector")), Percent = structure(list(), class = c("collector_double",
"collector")), Category = structure(list(), class =
c("collector_character",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
如有任何提示,我们将不胜感激!
已更新
更改 X = Year
和 facet_grid(~ Country)
后,我得到了更好的结果,但 x 轴上出现了一些问题。 R 对待年份的方式与我预期的不同。我有 2014 年和 2017 年,它为我提供了 2014 年、2016 年、2017 年。
不要使用 facet_grid(~ Year)
,这将制作两年的两个并排图表(就像您现在所做的那样)。
通过使用国家/地区年份变量,您可以获得与您想要的图表相似的图表,因此:
ownership$CountryYear <- paste(ownership$Country, ownership$Year)
然后:
ggplot(ownership, aes(x = CountryYear, y = Percent, fill = Category)) +
geom_bar(stat = 'identity', position = 'stack') +
...
但您可能需要多次使用标签才能获得与您想要的图表完全相同的图表。
亲自解决。我在 x 轴上添加了 as.character()
。
最终代码
ggplot(ownership, aes(x = as.character(Year), y = Percent, fill = Category)) +
geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ Country) +
theme_tufte() +
scale_fill_brewer(palette = "Paired") +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.text = element_text(size = 10)) +
theme(axis.text.x = element_text(size = 12)) +
theme(axis.text.y = element_text(size = 12)) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank())
完成!谢谢!
这让你接近(使用模拟数据,因为你没有提供任何数据):
library(ggplot2)
#make similar data
df <- expand.grid(country = letters[1:4],
year = c("2014", "2017"),
category = LETTERS[1:3])
df$percent <- runif(nrow(df))
ggplot(df, aes(year, percent, fill = category)) +
geom_bar(stat = "identity") +
facet_wrap(~country, ncol = 4, strip.position = "bottom") +
theme(legend.position = "none")
由 reprex package (v0.2.1)
于 2019-02-09 创建