我想绘制每个城市的每月计数和观察总和。我的日期变量是ym
(我已将其转换为几个月,因此某些观察结果可能具有相同的ym和城市值),city
列中有2个城市,每个观察点都有一个数字。
我希望每个月都有2个酒吧。在一个图中将有一个观察计数,在另一个图中,每个月和每个城市将有number
列的总和。
我在计数图中使用了以下代码:
library(ggplot2)
ggplot(data = df,
aes(x = ym, group = city, fill = city)) +
geom_bar(position = "dodge")
但收到了以下警告:
position_dodge需要不重叠的x间隔
我的示例数据框如下:
df <- data.frame(city = c("JLM", "JLM", "JLM", "JLM", "JLM", "TLV", "JLM", "JLM", "JLM",
"JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "TLV", "JLM",
"JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "TLV", "JLM",
"JLM", "JLM", "JLM", "JLM", "TLV", "JLM", "JLM", "JLM", "JLM",
"JLM", "TLV", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM",
"JLM", "TLV", "JLM", "JLM"),
ym = structure(c(16679, 16709, 16709, 16709, 16709, 16709, 16709,
16709, 16709, 16709, 16709, 16709, 16709, 16709, 16709, 16740,
16740, 16740, 16740, 16740, 16770, 16770, 16770, 16770, 16770,
16801, 16801, 16801, 16832, 17136, 16861, 16861, 16861, 16861,
16892, 16922, 16922, 16953, 17014, 17045, 17075, 17136, 17167,
17226, 17257, 17257, 17257, 17287, 17318), class = "Date"),
number = c(1, 4, 1, 1, 1, 5, 1, 2, 3, 1, 2, 1, 18, 1, 2, 1, 3, 4, 1, 1,
1, 2, 14, 4, 1, 10, 1, 1, 3, 2, 2, 12, 1, 1, 20, 2, 2, 20, 1,
2, 7, 3, 21, 2, 3, 3, 4, 2, 5))
答案 0 :(得分:1)
为解决这个问题,有一些问题在复杂化。
使用原始格式,图表不会绘制number
列:它所做的只是显示ym
列的计数。所以我认为错误信息源于此。例如,您在2015-10-01上进行了14次观察。
要修复图表,您需要指定y
轴值并为条形图提供stat="identity"
参数:
ggplot(data = df, aes(x = ym, y = number, fill = city)) +
geom_bar(stat="identity", position="dodge")
但仍有一些问题:
要纠正这些问题,您需要在原始数据框中包含0个值并聚合数据,这样每个类别每天只能观察一次:
library(tidyverse)
df_fill <- dcast(df, ym ~ city, fun.aggregate = sum) %>% melt(. , id = "ym")
如果我们这样做:
ggplot(data = df_fill, aes(x = ym, y = value, fill = variable)) +
geom_bar(stat="identity", position="dodge")