如何在 R 中使用 ggplot2 重新排序条形图?
在本文中,我们将讨论如何使用 R 编程语言中的 ggplot2 包重新排列带有分面的条形图。我们可以使用 geom_col()函数和 ggplot2 包的 facet_wrap()函数来绘制分面条形图。
Syntax: ggplot( dataframe, aes( x, y ) ) + geom_col() + facet_wrap(~z)
Parameters:
- dataframe: Determines the dataframe to be used for plotting.
- x: Determines the x-axis vector column.
- y: Determines the y-axis vector column.
- z: Determines the variable around which plots have to be divided.
创建基本条形图
这是使用 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,具体取决于需要释放的轴数据。
Syntax: ggplot( dataframe, aes( reorder_within(x,y,z) , y ) ) + geom_col() + facet_wrap(~z, scales= “free_y/free_x”)
Parameters:
- dataframe: Determines the dataframe to be used for plotting
- x: Determines the x-axis vector column.
- y: Determines the y-axis vector column.
- z: Determines the variable around which plots have to be divided.
例子:
这是使用 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")
输出: