R 按值对ggplot堆叠条形图中的条形图进行排序
我承认有许多类似的问题,我检查了它们,但仍然无法解决我的问题 试图在ggplot中创建堆叠条形图,但无法正确排列条形图 我的数据是这样的R 按值对ggplot堆叠条形图中的条形图进行排序,r,ggplot2,stacked-chart,R,Ggplot2,Stacked Chart,我承认有许多类似的问题,我检查了它们,但仍然无法解决我的问题 试图在ggplot中创建堆叠条形图,但无法正确排列条形图 我的数据是这样的 structure(list(`Aimag/Capital` = c("Arkhangai", "Arkhangai", "Bayan-Ulgii", "Bayankhongor", "Bayankhongor", "Bulgan", "Darkhan-Uul", "Darkhan-Uul", "Dornod", "Dornod", "Dornogobi
structure(list(`Aimag/Capital` = c("Arkhangai", "Arkhangai",
"Bayan-Ulgii", "Bayankhongor", "Bayankhongor", "Bulgan", "Darkhan-Uul",
"Darkhan-Uul", "Dornod", "Dornod", "Dornogobi", "Dornogobi",
"Dundgobi", "Gobi-Altai", "Gobi-Altai", "Gobisumber", "Khentii",
"Khentii", "Khovd", "Khovd", "Khuvsgul", "Orkhon", "Selenge",
"Selenge", "Sukhbaatar", "Tuv", "Tuv", "Ulaanbaatar", "Ulaanbaatar",
"Umnugobi", "Umnugobi", "Uvs", "Uvs", "Uvurkhangai", "Uvurkhangai",
"Zavkhan"), Type = c("Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Ground
water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Ground
water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/"), sumAmount = c(101278.1,
272246.7, 7528, 50421.54, 12550.4, 882605, 669312.5, 137418.5,
3587701.32, 244252.09, 266421.5, 1856, 116723, 1453, 277, 3515190,
744539.2, 9749.4, 59142, 9520, 1000, 21324857, 167905, 1077338.19,
772753.76, 572085.5, 5035012.18, 5645963.45, 68067, 22230322,
68351, 2564, 2238, 15950, 180928, 299912)), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -36L), spec =
structure(list(
cols = list(`Company's registration number` = structure(list(), class =
c("collector_double",
"collector")), `Company name` = structure(list(), class =
c("collector_character",
"collector")), `Aimag/Capital` = structure(list(), class =
c("collector_character",
"collector")), `Soum/ District` = structure(list(), class =
c("collector_character",
"collector")), Type = structure(list(), class = c("collector_character",
"collector")), Amount = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"), groups = structure(list(
`Aimag/Capital` = c("Arkhangai", "Bayan-Ulgii", "Bayankhongor",
"Bulgan", "Darkhan-Uul", "Dornod", "Dornogobi", "Dundgobi",
"Gobi-Altai", "Gobisumber", "Khentii", "Khovd", "Khuvsgul",
"Orkhon", "Selenge", "Sukhbaatar", "Tuv", "Ulaanbaatar",
"Umnugobi", "Uvs", "Uvurkhangai", "Zavkhan"), .rows = list(
1:2, 3L, 4:5, 6L, 7:8, 9:10, 11:12, 13L, 14:15, 16L,
17:18, 19:20, 21L, 22L, 23:24, 25L, 26:27, 28:29, 30:31,
32:33, 34:35, 36L)), row.names = c(NA, -22L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE))
ggplot(eiti_water_stacked_aimag, aes(reorder(`Aimag/Capital`, sumAmount),
sumAmount, fill = Type)) +
geom_bar(stat = "identity") +
coord_flip() +
ylim(0, 30000000) +
theme_tufte() +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank()) +
scale_fill_manual(values = c("#A6CEE3","#1F78B4"),
labels = c("Ground water ",
"Surface water"))
我的代码如下所示
structure(list(`Aimag/Capital` = c("Arkhangai", "Arkhangai",
"Bayan-Ulgii", "Bayankhongor", "Bayankhongor", "Bulgan", "Darkhan-Uul",
"Darkhan-Uul", "Dornod", "Dornod", "Dornogobi", "Dornogobi",
"Dundgobi", "Gobi-Altai", "Gobi-Altai", "Gobisumber", "Khentii",
"Khentii", "Khovd", "Khovd", "Khuvsgul", "Orkhon", "Selenge",
"Selenge", "Sukhbaatar", "Tuv", "Tuv", "Ulaanbaatar", "Ulaanbaatar",
"Umnugobi", "Umnugobi", "Uvs", "Uvs", "Uvurkhangai", "Uvurkhangai",
"Zavkhan"), Type = c("Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Ground
water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Ground
water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3
/Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3
/Surface water/",
"Actual usage of water m3 /Ground water/"), sumAmount = c(101278.1,
272246.7, 7528, 50421.54, 12550.4, 882605, 669312.5, 137418.5,
3587701.32, 244252.09, 266421.5, 1856, 116723, 1453, 277, 3515190,
744539.2, 9749.4, 59142, 9520, 1000, 21324857, 167905, 1077338.19,
772753.76, 572085.5, 5035012.18, 5645963.45, 68067, 22230322,
68351, 2564, 2238, 15950, 180928, 299912)), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -36L), spec =
structure(list(
cols = list(`Company's registration number` = structure(list(), class =
c("collector_double",
"collector")), `Company name` = structure(list(), class =
c("collector_character",
"collector")), `Aimag/Capital` = structure(list(), class =
c("collector_character",
"collector")), `Soum/ District` = structure(list(), class =
c("collector_character",
"collector")), Type = structure(list(), class = c("collector_character",
"collector")), Amount = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"), groups = structure(list(
`Aimag/Capital` = c("Arkhangai", "Bayan-Ulgii", "Bayankhongor",
"Bulgan", "Darkhan-Uul", "Dornod", "Dornogobi", "Dundgobi",
"Gobi-Altai", "Gobisumber", "Khentii", "Khovd", "Khuvsgul",
"Orkhon", "Selenge", "Sukhbaatar", "Tuv", "Ulaanbaatar",
"Umnugobi", "Uvs", "Uvurkhangai", "Zavkhan"), .rows = list(
1:2, 3L, 4:5, 6L, 7:8, 9:10, 11:12, 13L, 14:15, 16L,
17:18, 19:20, 21L, 22L, 23:24, 25L, 26:27, 28:29, 30:31,
32:33, 34:35, 36L)), row.names = c(NA, -22L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE))
ggplot(eiti_water_stacked_aimag, aes(reorder(`Aimag/Capital`, sumAmount),
sumAmount, fill = Type)) +
geom_bar(stat = "identity") +
coord_flip() +
ylim(0, 30000000) +
theme_tufte() +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank()) +
scale_fill_manual(values = c("#A6CEE3","#1F78B4"),
labels = c("Ground water ",
"Surface water"))
我通常使用
reorder
函数,但现在这个顺序非常奇怪。有没有办法解决这个问题?我试过养猫,但也没用 我认为您之所以没有从reorder('Aimag/Capital',summant)
获得您所期望的订单,是因为每个'Aimag/Capital'(一个用于地面,另一个用于地面)的实例都有一个以上的summant
。所以我认为,reorder
函数一定是丢失了。我想您想按总用水量(地面+地面)订购。我这样做的方法是计算每个位置的总用水量,并根据排名创建一个有序因子。然后我可以将“Aimag/Capital”列的数据格式更改为有序因子,并将其输入ggplot
library(ggplot2)
library(dplyr)
eiti_water_stacked_aimag <- structure(list(`Aimag/Capital` = c("Arkhangai", "Arkhangai",
"Bayan-Ulgii", "Bayankhongor", "Bayankhongor", "Bulgan", "Darkhan-Uul",
"Darkhan-Uul", "Dornod", "Dornod", "Dornogobi", "Dornogobi",
"Dundgobi", "Gobi-Altai", "Gobi-Altai", "Gobisumber", "Khentii",
"Khentii", "Khovd", "Khovd", "Khuvsgul", "Orkhon", "Selenge",
"Selenge", "Sukhbaatar", "Tuv", "Tuv", "Ulaanbaatar", "Ulaanbaatar",
"Umnugobi", "Umnugobi", "Uvs", "Uvs", "Uvurkhangai", "Uvurkhangai",
"Zavkhan"),
Type = c("Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/"),
sumAmount = c(101278.1, 272246.7, 7528, 50421.54, 12550.4, 882605, 669312.5, 137418.5, 3587701.32,
244252.09, 266421.5, 1856, 116723, 1453, 277, 3515190, 744539.2, 9749.4, 59142, 9520,
1000, 21324857, 167905, 1077338.19, 772753.76, 572085.5, 5035012.18, 5645963.45, 68067,
22230322, 68351, 2564, 2238, 15950, 180928, 299912)),
class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -36L),
spec = structure(list(cols = list(`Company's registration number` = structure(list(), class = c("collector_double", "collector")),
`Company name` = structure(list(), class = c("collector_character", "collector")),
`Aimag/Capital` = structure(list(), class = c("collector_character", "collector")),
`Soum/ District` = structure(list(), class = c("collector_character", "collector")),
Type = structure(list(), class = c("collector_character", "collector")),
Amount = structure(list(), class = c("collector_double", "collector"))),
default = structure(list(), class = c("collector_guess", "collector")), skip = 1), class = "col_spec"),
groups = structure(list(`Aimag/Capital` = c("Arkhangai", "Bayan-Ulgii", "Bayankhongor", "Bulgan", "Darkhan-Uul", "Dornod", "Dornogobi", "Dundgobi",
"Gobi-Altai", "Gobisumber", "Khentii", "Khovd", "Khuvsgul",
"Orkhon", "Selenge", "Sukhbaatar", "Tuv", "Ulaanbaatar",
"Umnugobi", "Uvs", "Uvurkhangai", "Zavkhan"),
.rows = list(1:2, 3L, 4:5, 6L, 7:8, 9:10, 11:12, 13L, 14:15, 16L,
17:18, 19:20, 21L, 22L, 23:24, 25L, 26:27, 28:29, 30:31,
32:33, 34:35, 36L)), row.names = c(NA, -22L),
class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))
# get order of places according to total water usage (ground + surface)
order.places <- eiti_water_stacked_aimag %>% group_by(`Aimag/Capital`) %>%
mutate(Total=sum(sumAmount)) %>% select(`Aimag/Capital`, Total) %>%
distinct() %>% arrange(Total) %>% select(`Aimag/Capital`) %>% unlist()
#change first column to ordered factors
x <- eiti_water_stacked_aimag %>% ungroup() %>% mutate(`Aimag/Capital`=factor(x=`Aimag/Capital`, levels = order.places))
#create plot
ggplot(x, aes(x=`Aimag/Capital`, y=sumAmount, fill = Type)) +
geom_bar(stat = "identity") +
coord_flip() +
ylim(0, 30000000) +
#theme_tufte() +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank()) +
scale_fill_manual(values = c("#A6CEE3","#1F78B4"),
labels = c("Ground water ",
"Surface water"))
图书馆(GG2)
图书馆(dplyr)
我想你之所以没有得到你所期望的重新排序('aimag/Capital',sumAmount)
的订单,是因为“aimag/Capital”(一个用于地面,另一个用于地面)的每个实例都有一个以上的sumAmount
。所以我认为,reorder
函数一定是丢失了。我想您想按总用水量(地面+地面)订购。我这样做的方法是计算每个位置的总用水量,并根据排名创建一个有序因子。然后我可以将“Aimag/Capital”列的数据格式更改为有序因子,并将其输入ggplot
library(ggplot2)
library(dplyr)
eiti_water_stacked_aimag <- structure(list(`Aimag/Capital` = c("Arkhangai", "Arkhangai",
"Bayan-Ulgii", "Bayankhongor", "Bayankhongor", "Bulgan", "Darkhan-Uul",
"Darkhan-Uul", "Dornod", "Dornod", "Dornogobi", "Dornogobi",
"Dundgobi", "Gobi-Altai", "Gobi-Altai", "Gobisumber", "Khentii",
"Khentii", "Khovd", "Khovd", "Khuvsgul", "Orkhon", "Selenge",
"Selenge", "Sukhbaatar", "Tuv", "Tuv", "Ulaanbaatar", "Ulaanbaatar",
"Umnugobi", "Umnugobi", "Uvs", "Uvs", "Uvurkhangai", "Uvurkhangai",
"Zavkhan"),
Type = c("Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Surface water/", "Actual usage of water m3 /Ground water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/", "Actual usage of water m3 /Surface water/",
"Actual usage of water m3 /Ground water/"),
sumAmount = c(101278.1, 272246.7, 7528, 50421.54, 12550.4, 882605, 669312.5, 137418.5, 3587701.32,
244252.09, 266421.5, 1856, 116723, 1453, 277, 3515190, 744539.2, 9749.4, 59142, 9520,
1000, 21324857, 167905, 1077338.19, 772753.76, 572085.5, 5035012.18, 5645963.45, 68067,
22230322, 68351, 2564, 2238, 15950, 180928, 299912)),
class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -36L),
spec = structure(list(cols = list(`Company's registration number` = structure(list(), class = c("collector_double", "collector")),
`Company name` = structure(list(), class = c("collector_character", "collector")),
`Aimag/Capital` = structure(list(), class = c("collector_character", "collector")),
`Soum/ District` = structure(list(), class = c("collector_character", "collector")),
Type = structure(list(), class = c("collector_character", "collector")),
Amount = structure(list(), class = c("collector_double", "collector"))),
default = structure(list(), class = c("collector_guess", "collector")), skip = 1), class = "col_spec"),
groups = structure(list(`Aimag/Capital` = c("Arkhangai", "Bayan-Ulgii", "Bayankhongor", "Bulgan", "Darkhan-Uul", "Dornod", "Dornogobi", "Dundgobi",
"Gobi-Altai", "Gobisumber", "Khentii", "Khovd", "Khuvsgul",
"Orkhon", "Selenge", "Sukhbaatar", "Tuv", "Ulaanbaatar",
"Umnugobi", "Uvs", "Uvurkhangai", "Zavkhan"),
.rows = list(1:2, 3L, 4:5, 6L, 7:8, 9:10, 11:12, 13L, 14:15, 16L,
17:18, 19:20, 21L, 22L, 23:24, 25L, 26:27, 28:29, 30:31,
32:33, 34:35, 36L)), row.names = c(NA, -22L),
class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))
# get order of places according to total water usage (ground + surface)
order.places <- eiti_water_stacked_aimag %>% group_by(`Aimag/Capital`) %>%
mutate(Total=sum(sumAmount)) %>% select(`Aimag/Capital`, Total) %>%
distinct() %>% arrange(Total) %>% select(`Aimag/Capital`) %>% unlist()
#change first column to ordered factors
x <- eiti_water_stacked_aimag %>% ungroup() %>% mutate(`Aimag/Capital`=factor(x=`Aimag/Capital`, levels = order.places))
#create plot
ggplot(x, aes(x=`Aimag/Capital`, y=sumAmount, fill = Type)) +
geom_bar(stat = "identity") +
coord_flip() +
ylim(0, 30000000) +
#theme_tufte() +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank()) +
scale_fill_manual(values = c("#A6CEE3","#1F78B4"),
labels = c("Ground water ",
"Surface water"))
图书馆(GG2)
图书馆(dplyr)
eiti_water_stacked_aimag为猫尝试了如何?@camille,是的,fct_informeq()
对我不起作用当你在这里发布的示例代码包含不起作用的代码时,这是最容易帮助的,所以我们不仅仅是建议你尝试过的东西。但是,您也看过fct\u inforeq
的文档了吗?它根据因子出现的次数对因子级别进行排序。通过使用stat=“identity”
进行猜测,您已经有了一个您想要订购的号码,您可能实际上想要fct\u reorder
@camille,上面的代码不起作用,它给了我一个图表,我在上面发布了。我遇到的问题是,发布的数据是聚合/总结的结果。由于Aimag/Capital
是一个分组变量,因此不能更改。在分组之前尝试更改因子级别。尝试了forcats
how?@camille,是的,fct_informeq()
对meIt不起作用。当您在此处发布的示例代码包含无效代码时,这是最容易帮助的,因此我们不仅仅建议您尝试过的内容。但是,您也看过fct\u inforeq
的文档了吗?它根据因子出现的次数对因子级别进行排序。通过使用stat=“identity”
进行猜测,您已经有了一个您想要订购的号码,您可能实际上想要fct\u reorder
@camille,上面的代码不起作用,它给了我一个图表,我在上面发布了。我遇到的问题是,发布的数据是聚合/总结的结果。由于Aimag/Capital
是一个分组变量,因此不能更改。在分组前尝试更改因子级别。