绘制ggplot中的字段总和

时间:2018-01-18 04:26:32

标签: r ggplot2

我有以下代码用于绘制一系列数字列的总和。这应该返回一个堆积条形图,其中每列的贡献是不同的颜色。

library(readxl)
library(tidyverse)
library(ggthemes)
library(extrafont)
library(RColorBrewer)
library(scales)
library(gridExtra)

ggplot(data, aes(x = `Location Group`, 
                 y = Medical + Wages + `Rehab Cum` + `Invest Cum`,
                 fill = variable)) +
  geom_bar(stat = "identity")

这是错误Error in FUN(X[[i]], ...) : object 'variable' not found

我不确定是什么原因引起的,格式化可以很容易地从这里的其他一百个案例中复制和粘贴。冲突情况下包括图书馆(但我怀疑情况会是这样)

样本数据将是

Medical Wages `Rehab Cum` `Invest Cum`
    <dbl> <dbl>       <dbl>        <dbl>
1    1230 10360        1234          200
2     245  9782        2345          300
3    2234  6542        3456            0
4    5564  1234        4567          400
5      13   357           0            0
6     987   951           0            0

1 个答案:

答案 0 :(得分:1)

问题是ggplot2不理解variable是什么。 ggplot2的关键是记住你的绘图的每个方面都应该用数据中的一列来表示。

因此,在这种情况下,您不需要为y映射提供四个不同的列-ggplot2会自动堆叠变量(如果它们相互重叠)geom_bar具有默认position = "stack" })。相反,您希望数据中的一列显示y值,另一列显示该栏的每个部分应为(fill)。

使用fill = variable是正确的:您希望根据正在绘制的变量对条形进行着色。但是variable实际上需要是数据集中的一列。所以你希望它看起来更像这样:

`Location Group`        variable        value
---------------------------------------------
location1               Medical         20
location1               Wages           30
location1               Rehab Cum       45
location1               Invest Cum      60
location2               Medical          5
location2               Wages           15
location2               Rehab Cum       55
location2               Invest Cum      90

然后x映射到Location Groupy映射到valuefill映射到variable

您可以使用gather

将数据转换为此形状
library(tidyr)
data = data %>% gather(variable, value, Medical, Wages, `Rehab Cum`, `Invest Cum`)

ggplot(data, aes(x = `Location Group`, y = value, fill = variable)) +
  geom_bar(stat = "identity")