r - ggplot - 具有多个 y 变量的条形图
问题描述
我正在尝试使用 ggplot2 创建一个包含三个 y 变量(、、、)的Total_us_received
条形图Total_us_required
。Total_us_received_from.CERF
所有三个 y 变量均以相同的比例(美元)进行测量。
到目前为止,我已经使用以下代码创建了一个条形图,其中 Total_us_received 作为 y 变量,Disaster_category 作为 x 变量:
ggplot(Template.2006.2017.text,
aes(Disaster_category, y=Total_US_received)) +
geom_bar(stat ="identity", fill="lightblue") +
coord_flip()
但是,我将其他两个 y 变量包含到图中的每一次尝试都失败了。如何将其他两个变量包含在图表中?
一个后续问题:我可以让图表显示没有 NA:s 而不是总和的 x 变量 (Disaster_subtype) 的每个类别的平均值吗?
这是我在 dput 中的数据(压缩版本):
structure(list(Disaster_category = structure(c(1L, 15L, 17L,
15L, 5L, 8L, 13L, 8L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L, 10L, 5L,
7L, 8L, 15L, 2L, 8L, 2L, 15L, 15L, 8L, 15L, 2L, 17L, 2L, 7L,
2L, 8L, 2L, 3L, 2L, 8L, 8L, 2L, 8L, 17L, 2L, 3L, 8L, 8L, 2L,
8L, 8L, 8L, 2L, 8L, 3L, 2L, 3L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L,
15L, 5L, 8L, 13L, 8L, 15L, 2L, 8L, 2L, 3L, 2L, 3L, 15L, 8L, 3L,
2L, 3L, 8L, 2L, 3L, 2L, 8L, 2L, 8L, 15L, 2L, 8L, 8L, 5L, 2L,
8L, 2L, 3L, 2L, 17L, 2L, 17L, 2L, 4L, 5L, 8L, 8L, 2L, 8L, 15L,
2L, 15L, 15L, 7L, 2L, 8L, 2L, 15L, 15L, 7L, 8L, 17L, 2L, 15L,
8L, 2L, 17L, 2L, 3L, 8L, 2L, 5L, 2L, 8L, 2L, 8L, 8L, 15L, 2L,
8L, 2L, 15L, 8L, 2L, 15L, 8L, 7L, 8L, 15L, 2L, 8L, 8L, 7L, 13L,
8L, 2L, 8L, 2L, 8L, 8L, 3L, 2L, 13L, 2L, 3L, 8L, 2L, 15L, 15L,
8L, 15L, 2L, 5L, 3L, 3L, 8L, 3L, 2L, 8L, 8L, 3L, 2L, 8L, 2L,
15L, 2L, 17L, 2L, 5L, 2L, 8L, 2L, 15L, 2L, 3L, 8L, 8L, 2L, 8L,
8L, 2L, 3L), .Label = c("", " ", "Disease", "Disease related disaster",
"Drought", "Drought & storm", "Extreme temperature / fire", "Flood",
"Flood & drought", "Insect infestation", "Insect infestation & drought",
"Landslide & flood", "Landslide / mudslide", "Other", "Storm",
"Storm & flood", "Winter"), class = "factor"), Total_US_received_from.CERF = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 678307.8333,
678307.8333, 678307.8333, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1110469.5, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 1905355, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2493246,
2493246, 2493246, 2493246, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 9365420,
NA, NA, 14321419, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
Total_US_received = c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, 15507224.5, 15507224.5, 15507224.5,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333,
333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA), Total_US_required = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, 20502064.83, 20502064.83, 20502064.83, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 3070192, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 49955895.25, 49955895.25, 49955895.25, 49955895.25,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333,
333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA,
200L), class = "data.frame")
解决方案
您可以将数据转换为长格式,然后绘制它们:
library(tidyr)
library(ggplot2)
my_data %>%
gather(Total_US_category, Total_US, Total_US_received, Total_US_required, Total_US_received_from.CERF) %>%
ggplot(aes(Disaster_category, y = Total_US, fill = Total_US_category)) +
geom_col(position = position_dodge()) +
coord_flip()
如果您想绘制每次灾难的平均值,您可以首先使用以下方式汇总数据dplyr
:
library(dplyr)
my_data_sum <- my_data %>%
gather(Total_US_category, Total_US, Total_US_received, Total_US_required, Total_US_received_from.CERF) %>%
group_by(Disaster_category, Total_US_category) %>%
summarize(Total_US_mean = mean(Total_US, na.rm = T))
my_data_sum
# A tibble: 33 x 3
# Groups: Disaster_category [?]
# Disaster_category Total_US_category Total_US_mean
# <fct> <chr> <dbl>
# 1 "" Total_US_received NaN
# 2 "" Total_US_received_from.CERF NaN
# 3 "" Total_US_required NaN
# 4 " " Total_US_received NaN
# 5 " " Total_US_received_from.CERF NaN
# 6 " " Total_US_required NaN
# 7 Disease Total_US_received NaN
# 8 Disease Total_US_received_from.CERF NaN
# 9 Disease Total_US_required NaN
# 10 Disease related disaster Total_US_received NaN
# ... with 23 more rows
然后绘制数据:
ggplot(my_data_sum, aes(Disaster_category, y = Total_US_mean, fill = Total_US_category)) +
geom_col(position = position_dodge()) +
coord_flip()
推荐阅读
- spring - ReactiveRedisTemplate 删除不删除发布者的所有键
- validation - xsd - 断言条件检查所有后代
- java - 在 JFXTreeTableView 中添加图像
- java - 不同包LogBack的不同日志级别
- javascript - 具有动态行数和列数的表格,垂直排序
- javascript - 根据另一个 div 点击更改 div 中的元素
- google-drive-api - Google 希望将 YouTube 视频和测试帐户凭据作为 G Suite 应用验证流程的一部分
- rest - SoapUI,get方法中的请求正文?
- python - 如何在 Python Mockito 中正确使用 verifyNoUnwantedInteractions()?
- docker - 从容器提供 SPA 内容的优缺点是什么?