📜  如何在 R 中使用 ggplot2 重新排序条形图?

📅  最后修改于: 2022-05-13 01:54:25.278000             🧑  作者: Mango

如何在 R 中使用 ggplot2 重新排序条形图?

在本文中,我们将讨论如何使用 R 编程语言中的 ggplot2 包重新排列带有分面的条形图。我们可以使用 geom_col()函数和 ggplot2 包的 facet_wrap()函数来绘制分面条形图。

创建基本条形图

这是使用 facet_wrap()函数进行刻面的基本条形图。

使用的数据集: sample2

R
# Load library tidyverse
library(tidyverse)
  
# create sample data frame
sample_data <- readr::read_csv('sample2.csv')
  
# draw a bar plot using geom_col() function
# divide the plot into facts using facet_wrap() function
ggplot(sample_data, aes(y=state, x=Survey))+
  geom_col()+
  facet_wrap(~Year)


R
# load library tidyverse and tidytext
library(tidyverse)
library(tidytext)
  
# create sample data frame
sample_data <- readr::read_csv('sample2.csv')
  
# create bar plot with reodering of y-axis variable
# use scales parameter to remove empty variable from y-axis
ggplot(sample_data, aes(y=reorder_within(state,Survey, Year), x=Survey))+
  geom_col()+
  facet_wrap(~Year,scales="free_y")


输出:

重新排序条形图

为了重新排序条形图以更好地可视化数据,我们使用 R 语言的 tidytext 包的 reorder_within()函数。 reorder_within()函数在使用刻面绘图之前对列进行重新排序,以便在每个刻面内对值进行排序。但这会产生一个问题,即在对所有在其他方面划分的列进行分面后,也作为所有其他方面的空列共存。为了解决这个问题,我们将 scales 参数添加到 facet_wrap()函数,其值为 free_y 或 free_x,具体取决于需要释放的轴数据。

例子:

这是使用 facet_wrap()函数进行刻面的基本条形图。我们还使用 tidytext 包的 reorder_within()函数对条形图进行了重新排序。

R

# load library tidyverse and tidytext
library(tidyverse)
library(tidytext)
  
# create sample data frame
sample_data <- readr::read_csv('sample2.csv')
  
# create bar plot with reodering of y-axis variable
# use scales parameter to remove empty variable from y-axis
ggplot(sample_data, aes(y=reorder_within(state,Survey, Year), x=Survey))+
  geom_col()+
  facet_wrap(~Year,scales="free_y")

输出: