英文:
How to avoid 2 x with the same values adding up in a stacked panel graph
问题
谢谢
我有一个后续问题。
这是信息
df1<-data.frame(
PPE=c("手套", "手套", "口罩", "口罩", "靴子", "靴子", "全套", "全套", "镜片",
"镜片", "其他", "其他", "手套", "手套", "口罩", "口罩", "靴子", "靴子", "全套",
"全套", "镜片", "镜片", "其他", "其他", "手套", "手套", "口罩", "口罩", "靴子",
"靴子", "全套", "全套", "镜片", "镜片", "其他", "其他", "手套", "手套", "口罩",
"口罩", "靴子", "靴子", "全套", "全套", "镜片", "镜片", "其他", "其他", "手套",
"手套", "口罩", "口罩", "靴子", "靴子", "全套", "全套", "镜片", "镜片", "其他",
"其他", "手套", "手套", "口罩", "口罩", "靴子", "靴子", "全套",
"全套", "镜片", "镜片", "其他", "其他", "手套", "手套", "口罩", "口罩", "靴子",
"靴子", "全套", "全套", "镜片", "镜片", "其他", "其他", "手套", "手套", "口罩",
"口罩", "靴子", "靴子", "全套", "全套", "镜片", "镜片", "其他",
"其他")
,Choice =c("否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是",
"否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是",
"否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否",
"是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是", "否", "是")
,Farmtype =c("谷物", "谷物", "谷物", "谷物", "谷物", "谷物", "谷物", "谷物", "谷物", "谷物", "谷物", "谷物",
"牧草", "牧草", "牧草", "牧草", "牧草", "牧草", "牧草", "牧草", "牧草", "牧草", "牧草", "牧草",
"水果", "水果", "水果", "水果", "水果", "水果", "水果", "水果", "水果", "
<details>
<summary>英文:</summary>
Thank you
I have a follow up question.
This is the information
df1<-data.frame(
PPE=c("Gloves", "Gloves", "Mask", "Mask", "Boots", "Boots", "Overall", "Overall", "Lense",
"Lense", "Others", "Others", "Gloves", "Gloves", "Mask", "Mask", "Boots", "Boots", "Overall",
"Overall", "Lense", "Lense", "Others", "Others", "Gloves", "Gloves", "Mask", "Mask", "Boots",
"Boots", "Overall", "Overall", "Lense", "Lense", "Others", "Others", "Gloves", "Gloves", "Mask",
"Mask", "Boots", "Boots", "Overall", "Overall", "Lense", "Lense", "Others", "Others", "Gloves",
"Gloves", "Mask", "Mask", "Boots", "Boots", "Overall", "Overall", "Lense", "Lense", "Others",
"Others", "Gloves", "Gloves", "Mask", "Mask", "Boots", "Boots", "Overall", "Overall", "Lense",
"Lense", "Others", "Others", "Gloves", "Gloves", "Mask", "Mask", "Boots", "Boots", "Overall",
"Overall", "Lense", "Lense", "Others", "Others", "Gloves", "Gloves", "Mask", "Mask", "Boots",
"Boots", "Overall", "Overall", "Lense", "Lense", "Others", "Others")
,Choice =c("No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes",
"No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes",
"No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No",
"Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes",
"No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No", "Yes")
,Farmtype =c("Cereal", "Cereal", "Cereal", "Cereal", "Cereal", "Cereal", "Cereal", "Cereal", "Cereal", "Cereal", "Cereal", "Cereal",
"Forage", "Forage", "Forage", "Forage", "Forage", "Forage", "Forage", "Forage", "Forage", "Forage", "Forage", "Forage",
"Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Fruit", "Horticulture",
"Horticulture", "Horticulture", "Horticulture", "Horticulture", "Horticulture", "Horticulture", "Horticulture", "Horticulture",
"Horticulture", "Horticulture", "Horticulture", "Industrial", "Industrial", "Industrial", "Industrial", "Industrial", "Industrial",
"Industrial", "Industrial", "Industrial", "Industrial", "Industrial", "Industrial", "legumes", "legumes", "legumes", "legumes",
"legumes", "legumes", "legumes", "legumes", "legumes", "legumes", "legumes", "legumes", "Root.farms", "Root.farms", "Root.farms",
"Root.farms", "Root.farms", "Root.farms", "Root.farms", "Root.farms", "Root.farms", "Root.farms", "Root.farms", "Root.farms",
"Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed")
,value=c(80.26,19.74,64.87,35.13,69.32,30.68,94.05,5.95,92.83,7.17,83.43,16.57,73.98,26.02,50.81,49.19,56.91,43.09,94.31,5.69,86.99,13.01,81.3,18.7,72.33,27.67,49.4,50.6,66.86,33.14,91.27,8.73,86.33,13.67,89.78,10.22,76.58,23.42,57.64,42.36,56.72,43.28,91.45,8.55,88.9,11.1,84.93,15.07,74.29,25.71,55.67,44.33,52.38,47.62,90.48,9.52,89.7,10.3,86.93,13.07,77.66,22.34,63.83,36.17,67.55,32.45,96.28,3.72,91.49,8.51,90.43,9.57,78.32,21.68,72.51,27.49,59.04,40.96,93.66,6.34,95.51,4.49,82.57,17.43,81.88,18.13,55.63,44.38,41.25,58.75,96.88,3.13,83.75,16.25,83.75,16.25)
)
summary(df1)
head(df1)
view(df1)
df2 <-
df1 |>
arrange(PPE, Farmtype, desc(Choice)) |>
mutate(order_val = ifelse(Choice == "Yes", value, NA_real_)) |>
fill(order_val)
#data frame for labels
labs <-
df2 |>
group_by(order_val) |>
filter(row_number() == 1)
Create the grouped stacked graph
I've simplified your version using geom_col
rather than geom_bar
ggplot(df2, aes(x = fct_reorder(factor(order_val), order_val),
y = value,
fill = Choice)) +
geom_col() +
facet_grid(Farmtype ~ ., switch = "x", scales = "free_y") +
scale_x_discrete(breaks = labs$order_val,
labels = labs$PPE)+
labs(x = "PPE",
y = "Value",
fill = "Choice") +
ggtitle("Grouped and Stacked Graph") +
theme_minimal()
theme_classic()+
ggplot2::coord_flip()
The graph is [![enter image description here](https://i.stack.imgur.com/7yhEL.png)](https://i.stack.imgur.com/7yhEL.png)
I realized that the "Others" and "Lense" of df1$PPE have the same value for the Mixed farm as shown below.
[![enter image description here](https://i.stack.imgur.com/t5t6M.png)](https://i.stack.imgur.com/t5t6M.png)
This I think makes the graph that way. How do I make sure Lense and Others appear with their separate stacked bar in the graph?
Also, How do I make the values on the y axis appear in percentages like 0%, 50% and 100%?
I tried to get all variables to appear on the graph
</details>
# 答案1
**得分**: 0
以下是翻译好的部分:
"Instead of mapping values on a discrete scale and afterwards assigning labels you could create a helper order column as the interaction of `Farmtype` and `PPE` after arranging your data in the desired order. Then use e.g. `gsub` to remove the `Farmtype` part from the axis label:
```R
library(tidyverse)
df1 <- df1 %>%
group_by(Farmtype, PPE) %>%
mutate(order_value = value[Choice == "No"]) %>%
ungroup() %>%
arrange(Farmtype, desc(order_value)) %>%
mutate(order = fct_inorder(paste(Farmtype, PPE, sep = ".")))
ggplot(df1, aes(
y = order,
x = value,
fill = Choice
)) +
geom_col() +
facet_grid(Farmtype ~ ., switch = "x", scales = "free_y") +
scale_y_discrete(
labels = ~ gsub("^.*\\.", "", .x)
) +
labs(
x = "PPE",
y = "Value",
fill = "Choice"
) +
ggtitle("Grouped and Stacked Graph") +
theme_classic()
英文:
Instead of mapping values on a discrete scale and afterwards assigning labels you could create a helper order column as the interaction of Farmtype
and PPE
after arranging your data in the desired order. Then use e.g. gsub
to remove the Farmtype
part from the axis label:
library(tidyverse)
df1 <- df1 |>
group_by(Farmtype, PPE) |>
mutate(order_value = value[Choice == "No"]) |>
ungroup() |>
arrange(Farmtype, desc(order_value)) |>
mutate(order = fct_inorder(paste(Farmtype, PPE, sep = ".")))
ggplot(df1, aes(
y = order,
x = value,
fill = Choice
)) +
geom_col() +
facet_grid(Farmtype ~ ., switch = "x", scales = "free_y") +
scale_y_discrete(
labels = ~ gsub("^.*\\.", "", .x)
) +
labs(
x = "PPE",
y = "Value",
fill = "Choice"
) +
ggtitle("Grouped and Stacked Graph") +
theme_classic()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论