如何在ggplot2中对堆积的条形图中的条形重新排序

662 阅读1分钟

你可以使用下面的基本语法来重新排列ggplot2中堆叠条形图的条形位置:

#specify order of bars (from top to bottom)
df$fill_var <- factor(df$fill_var, levels=c('value1', 'value2', 'value3', ...))

#create stacked bar chart
ggplot(df, aes(x=x_var, y=y_var, fill=fill_var)) + 
    geom_bar(position='stack', stat='identity')

下面的例子展示了如何在实践中使用这种语法。

例子:在ggplot2中对堆积条形图中的条形进行重新排序

假设我们在R中拥有以下数据框,显示了不同篮球运动员的得分情况:

#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'),
                 position=c('G', 'F', 'C', 'G', 'F', 'C', 'G', 'F', 'C'),
                 points=c(22, 12, 10, 30, 12, 17, 28, 23, 20))

#view data frame
df

  team position points
1    A        G     22
2    A        F     12
3    A        C     10
4    B        G     30
5    B        F     12
6    B        C     17
7    C        G     28
8    C        F     23
9    C        C     20

如果我们创建一个堆叠条形图来显示各队球员的得分,ggplot2会自动按字母顺序堆叠条形图:

library(ggplot2)

#create stacked bar chart
ggplot(df, aes(x=team, y=points, fill=position)) + 
    geom_bar(position='stack', stat='identity')

请注意,每个堆叠的条形图都是按字母顺序显示位置(从上到下)的。

为了以特定的方式重新排列条形图,我们可以将位置变量转换为因子,并使用level参数来指定条形图中的顺序(从上到下)。

library(ggplot2)

#convert 'position' to factor and specify level order
df$position <- factor(df$position, levels=c('F', 'G', 'C'))

#create stacked bar chart
ggplot(df, aes(x=team, y=points, fill=position)) + 
    geom_bar(position='stack', stat='identity')

条形图现在是按照我们在level参数中指定的确切顺序堆叠的(从上到下)。