我有以下代码用于绘制一系列数字列的总和。这应该返回一个堆积条形图,其中每列的贡献是不同的颜色。
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
答案 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 Group
,y
映射到value
,fill
映射到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")