【发布时间】:2020-10-10 03:20:45
【问题描述】:
我想知道我的请求在 ggplot2 中是否可行。
我希望增强条形图,其中我按小时 (1:24) 对两个条形图进行分组,对应于模型 1 和模型 2 在 MAPE 中测量的误差(平均绝对百分比误差),其中小时是 x 轴,MAPE 绘制在y 轴。
我解释的图表简单且信息丰富,但我希望做的改进是按日期用 MAPE 填充每个条形图。日期是我数据框中的第四列。我希望填充对应于给定日期产生的 MAPE 值 model1 或 model2。
到目前为止,我所能绘制的只是构成给定模型栏中总 MAPE 计算的每个日期。从某种意义上说,它提供了信息,它显示了在错误计算中使用了哪些日期,但它并没有告诉查看者哪些日期对最小/最大模型错误负责。
我将我的数据粘贴在帖子底部以避免混乱。以下是我目前的结果:
我第一次尝试使用 facet_grid,结果如下:
ggplot(Hourly_compare, aes(x = Hour, y = MAPE, fill = as.factor(Date)))+
geom_bar(position= "stack", stat = "identity") + facet_grid(~ Model)
如您所见,每个日期的填充在每个条中的长度相同。我希望日期的填充与给定日期的 MAPE 值相对应。
我的第二次尝试产生了这个粗糙的图表:
ggplot(Hourly_compare, aes(x = Hour, y = MAPE, fill = as.factor(Date), color = Model))+
geom_bar(position= "stack", stat = "identity") +
scale_color_manual(values=c("Model1"="red", "Model2"="black"))+
scale_x_continuous(breaks = c(1:24))
这对我来说更理想,因为我希望将每个模型的结果按小时分组为单独的条形图,但我希望将条形图与每个日期的模型错误堆叠在一起,这些错误对应于它们的 MAPE 值。
这是我的数据:
Hourly_compare <- dput(Hourly_compare)
structure(list(Date = structure(c(18405, 18405, 18405, 18405,
18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405,
18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405,
18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405,
18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405,
18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405, 18412,
18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412,
18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412,
18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412,
18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412,
18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412,
18412, 18412, 18419, 18419, 18419, 18419, 18419, 18419, 18419,
18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419,
18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419,
18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419,
18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419,
18419, 18419, 18419, 18419, 18419), class = "Date"), Hour = c(1,
1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11,
11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19,
19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 1, 1, 2, 2, 3, 3,
4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13,
13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21,
21, 22, 22, 23, 23, 24, 24, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,
6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
23, 23, 24, 24), Model = c("Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2",
"Model1", "Model2", "Model1", "Model2", "Model1", "Model2", "Model1",
"Model2", "Model1", "Model2", "Model1", "Model2", "Model1", "Model2"
), MAPE = c(0.45, 1.33, 0.41, 1.17, 0.4, 1.23, 0.45, 1.32, 0.45,
1.48, 0.62, 1.82, 0.7, 1.69, 0.69, 1.16, 1.37, 1.56, 1.56, 1.48,
1.64, 1.42, 1.48, 1.45, 1.23, 1.42, 1.18, 1.66, 1.22, 1.8, 1.36,
2.21, 1.61, 2.5, 1.99, 2.87, 1.93, 2.55, 2.01, 2.61, 1.82, 2.75,
1.92, 2.53, 1.71, 2.31, 1.5, 2.04, 0.45, 1.33, 0.41, 1.17, 0.4,
1.23, 0.45, 1.32, 0.45, 1.48, 0.62, 1.82, 0.7, 1.69, 0.69, 1.16,
1.37, 1.56, 1.56, 1.48, 1.64, 1.42, 1.48, 1.45, 1.23, 1.42, 1.18,
1.66, 1.22, 1.8, 1.36, 2.21, 1.61, 2.5, 1.99, 2.87, 1.93, 2.55,
2.01, 2.61, 1.82, 2.75, 1.92, 2.53, 1.71, 2.31, 1.5, 2.04, 0.45,
1.33, 0.41, 1.17, 0.4, 1.23, 0.45, 1.32, 0.45, 1.48, 0.62, 1.82,
0.7, 1.69, 0.69, 1.16, 1.37, 1.56, 1.56, 1.48, 1.64, 1.42, 1.48,
1.45, 1.23, 1.42, 1.18, 1.66, 1.22, 1.8, 1.36, 2.21, 1.61, 2.5,
1.99, 2.87, 1.93, 2.55, 2.01, 2.61, 1.82, 2.75, 1.92, 2.53, 1.71,
2.31, 1.5, 2.04)), row.names = c(NA, -144L), groups = structure(list(
Date = structure(c(18405, 18405, 18405, 18405, 18405, 18405,
18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405,
18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405, 18405,
18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412,
18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412, 18412,
18412, 18412, 18412, 18412, 18412, 18412, 18419, 18419, 18419,
18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419,
18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419, 18419,
18419, 18419, 18419), class = "Date"), Hour = c(1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24), .rows = list(1:2, 3:4, 5:6, 7:8, 9:10,
11:12, 13:14, 15:16, 17:18, 19:20, 21:22, 23:24, 25:26,
27:28, 29:30, 31:32, 33:34, 35:36, 37:38, 39:40, 41:42,
43:44, 45:46, 47:48, 49:50, 51:52, 53:54, 55:56, 57:58,
59:60, 61:62, 63:64, 65:66, 67:68, 69:70, 71:72, 73:74,
75:76, 77:78, 79:80, 81:82, 83:84, 85:86, 87:88, 89:90,
91:92, 93:94, 95:96, 97:98, 99:100, 101:102, 103:104,
105:106, 107:108, 109:110, 111:112, 113:114, 115:116,
117:118, 119:120, 121:122, 123:124, 125:126, 127:128,
129:130, 131:132, 133:134, 135:136, 137:138, 139:140,
141:142, 143:144)), row.names = c(NA, -72L), class = c("tbl_df",
"tbl", "data.frame")), class = c("grouped_df", "tbl_df", "tbl",
"data.frame"))
非常感谢任何帮助!谢谢你。
【问题讨论】: