R语言 如何用ggplot2对条形图进行分面排序
在这篇文章中,我们将讨论如何使用R编程语言中的ggplot2包对条形图进行分面排序。我们可以通过使用geom_col()函数和ggplot2包的facet_wrap()函数来绘制一个分面条形图。
语法: ggplot( dataframe, aes( x, y )+ geom_col() + facet_wrap(~z)
参数
- dataframe: 确定用于绘图的数据框架。
- x: 确定X轴的矢量列。
- y :确定Y轴的向量列。
- z: 决定了必须围绕其绘制的变量。
创建一个基本的柱状图
下面是一个使用facet_wrap()函数进行分面的基本柱状图。
使用的数据集: 样本2
# 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语言的tidytext包的reorder_within()函数。reorder_within()函数在用faceting绘制之前对列进行了重新排序,这样一来,每个facet内的值都是有序的。但这产生了一个问题,即在分面后,所有被分到其他面的列也作为一个空列并存于所有其他面中。为了解决这个问题,我们在facet_wrap()函数中添加了一个尺度参数,根据需要释放的轴数据,其值为free_y或free_x。
语法: ggplot( dataframe, aes( reorder_within(x,y,z) , y )+ geom_col() + facet_wrap(~z, scales= “free_y/free_x”)
参数
- dataframe: 决定用于绘图的数据框架。
- x: 确定x轴的矢量列。
- y :确定y轴的向量列。
- z: 决定了必须围绕其绘制的变量。
例子
这里是一个使用facet_wrap()函数进行分面的基本条形图。我们还使用tidytext包的reorder_within()函数对条形图进行了重新排序。
# 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")
输出