在同一条形图中按年份绘制多个变量
Plot multiple variables by year in the same bar plot
我无法弄清楚如何在 ggplot 中创建特定样式的绘图。
我的小标题中有这样的数据:
indicator 2015 2019
wdi_lfpr 55.6 58.2
wdi_lfprf 34.9 38.2
wdi_lfprm 77.0 78.4
每年下面的数值都是百分比。我想绘制这些,以便每个指标并排显示,并显示每年(2015 年、2019 年)的值。
我不知道如何在 ggplot 中解决这个问题。感谢您的帮助。
编辑:感谢评论者的建议,我将我的数据重塑为这种格式:
indicator year value
wdi_lfpr 2015 55.6
wdi_lfprm 2015 34.9
wdi_lfprf 2015 77.0
wdi_lfpr 2019 58.2
wdi_lfprm 2019 58.2
wdi_lfprf 2019 58.2
一个解决方案是:
library(ggplot2)
library(tidyverse)
library(dplyr)
df = data.frame(year = c(2015, 2019),
wdi_lfpr = c(55.6, 58.2),
wdi_lfprf = c(34.9, 38.2),
wdi_lfprm = c(77.0, 78.4)) %>%
pivot_longer(cols = 2:4, names_to = "indicator", values_to = "percent")
ggplot(df, aes(x = as.factor(year), y = percent, fill = indicator)) +
geom_bar(stat = "identity", position = "dodge")
或者:
ggplot(df, aes(x = as.factor(indicator), y = percent, fill = as.factor(year))) +
geom_bar(stat = "identity", position = "dodge")
感谢大家的帮助。重塑数据后,我能够根据建议的输入得出这个解决方案:
ggplot(long_df, aes(x = as.factor(indicator), y = value, fill = as.factor(year))) +
geom_bar(stat = "identity", position = "dodge")
这让我产生了这个数字,这是我的目标:
整理数据
正如其他人所提到的,您需要先创建数据 tidy,然后才能充分发挥 ggplot2
的作用:
# Define the dataset
data <- tribble(
~indicator , ~"2015", ~"2019",
"wdi_lfpr" , 55.6 , 58.2,
"wdi_lfprf" , 34.9 , 38.2,
"wdi_lfprm" , 77.0 , 78.4
)
# 'pivot' the data so that every column is a variable
tidy_data <- data %>%
tidyr::pivot_longer(c(`2015`, `2019`), names_to = "year", values_to = "value")
彩色绘图
在您的示例情节中存在一些问题。
- 轴没有正确标记
- 每组中的条形没有区别
- x 轴文本与您数据中的任何列都不匹配
幸运的是,如果您为 fill
审美做出谨慎选择,ggplot2
默认会处理大部分问题:
ggplot(tidy_data, aes(x = indicator, fill = year, y = value)) +
geom_col(position = "dodge")
经典风格的剧情
如果您更喜欢经典的 r-graphics 样式(类似于您的示例)并且您不想使用颜色,您可以使用类似以下内容的 theme_classic()
:
ggplot(tidy_data, aes(x = indicator, group = year, y = value)) +
geom_col(position = "dodge", colour = "white") +
theme_classic()
我无法弄清楚如何在 ggplot 中创建特定样式的绘图。
我的小标题中有这样的数据:
indicator 2015 2019
wdi_lfpr 55.6 58.2
wdi_lfprf 34.9 38.2
wdi_lfprm 77.0 78.4
每年下面的数值都是百分比。我想绘制这些,以便每个指标并排显示,并显示每年(2015 年、2019 年)的值。
我不知道如何在 ggplot 中解决这个问题。感谢您的帮助。
编辑:感谢评论者的建议,我将我的数据重塑为这种格式:
indicator year value
wdi_lfpr 2015 55.6
wdi_lfprm 2015 34.9
wdi_lfprf 2015 77.0
wdi_lfpr 2019 58.2
wdi_lfprm 2019 58.2
wdi_lfprf 2019 58.2
一个解决方案是:
library(ggplot2)
library(tidyverse)
library(dplyr)
df = data.frame(year = c(2015, 2019),
wdi_lfpr = c(55.6, 58.2),
wdi_lfprf = c(34.9, 38.2),
wdi_lfprm = c(77.0, 78.4)) %>%
pivot_longer(cols = 2:4, names_to = "indicator", values_to = "percent")
ggplot(df, aes(x = as.factor(year), y = percent, fill = indicator)) +
geom_bar(stat = "identity", position = "dodge")
或者:
ggplot(df, aes(x = as.factor(indicator), y = percent, fill = as.factor(year))) +
geom_bar(stat = "identity", position = "dodge")
感谢大家的帮助。重塑数据后,我能够根据建议的输入得出这个解决方案:
ggplot(long_df, aes(x = as.factor(indicator), y = value, fill = as.factor(year))) +
geom_bar(stat = "identity", position = "dodge")
这让我产生了这个数字,这是我的目标:
整理数据
正如其他人所提到的,您需要先创建数据 tidy,然后才能充分发挥 ggplot2
的作用:
# Define the dataset
data <- tribble(
~indicator , ~"2015", ~"2019",
"wdi_lfpr" , 55.6 , 58.2,
"wdi_lfprf" , 34.9 , 38.2,
"wdi_lfprm" , 77.0 , 78.4
)
# 'pivot' the data so that every column is a variable
tidy_data <- data %>%
tidyr::pivot_longer(c(`2015`, `2019`), names_to = "year", values_to = "value")
彩色绘图
在您的示例情节中存在一些问题。
- 轴没有正确标记
- 每组中的条形没有区别
- x 轴文本与您数据中的任何列都不匹配
幸运的是,如果您为 fill
审美做出谨慎选择,ggplot2
默认会处理大部分问题:
ggplot(tidy_data, aes(x = indicator, fill = year, y = value)) +
geom_col(position = "dodge")
经典风格的剧情
如果您更喜欢经典的 r-graphics 样式(类似于您的示例)并且您不想使用颜色,您可以使用类似以下内容的 theme_classic()
:
ggplot(tidy_data, aes(x = indicator, group = year, y = value)) +
geom_col(position = "dodge", colour = "white") +
theme_classic()