r - 在 RStudio 中使用 tidyverse 在 geom_bar 上添加一行
问题描述
溢出物,
我想在 geom_bar 上将我的平均到达时间添加为每小时 geom_line。这是我拥有的一个示例合成数据,一个名为 df_avg_occ 的表。
structure(list(hour = c("0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13", "14", "15", "16",
"17", "18", "19", "20", "21", "22", "23"),
average = c(2.61835748792271, 2.11352657004831,
1.71497584541063, 1.40338164251208,
1.15700483091787, 1.86376811594203,
1.83574879227053, 1.83478260869565,
1.1256038647343, 1.7512077294686,
2.4951690821256, 2.08695652173913,
3.52898550724638,3.85990338164251,
3.96376811594203, 4.00968523002421,
3.9225181598063, 3.96610169491525,
3.89588377723971, 3.95883777239709,
3.81884057971014, 3.71497584541063, 4.5,
3.08454106280193),
avg_arrivals = c(2.71428571428571, 1.91666666666667,
1.30612244897959, 1.38, 1.85106382978723,
1.79583333333333, 1.14285714285714,
2.93877551020408, 3.33333333333333,
4.82456140350877, 6.03448275862069,
6.47368421052632, 6.53448275862069,
6.48275862068965, 5.77586206896552,
6.49122807017544, 6.37931034482759,
5.89655172413793, 5.70689655172414,
6.17241379310345, 5.77586206896552,
4.27586206896552, 4.1551724137931,
2.7719298245614)),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA, -24L))
注意:这不是真实数据。
这就是我到目前为止使用 tidyverse 绘制的内容 - ggplot2
plt_occupancy <- ggplot(tbl_avg_occ, aes(x = hour, average, group = hour))
plt_occupancy + geom_bar(stat = "identity",
alpha=0.7, width = 0.50, fill= "yellow4") +
xlim("0", "1" , "2" , "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22","23") +
scale_y_continuous(expand = c(0, 0), limits = c(0, 5.5)) +
theme_bw()+
labs(title = "Gabriel Burcea Hospital: Hourly ED Occupancy, 3rd of March to
27th of April 2016",
subtitle = "Average Hourly ED Occupancy, n, by Hour of the day.
Note: results are intended for management information only",
y = "Average occupancy, n", x = "Hour of the day",
caption = "Source: Gabriel Burcea ) +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 21, b = 0, l =
0)),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 10))
解决方案
你可以尝试一个闪避的条形图
library(tidyverse)
d %>%
gather(k, v, -hour) %>%
ggplot(aes(hour, v, fill=k)) +
geom_col(position = position_dodge())
或者不转换 data.frame 您可以添加avg_arrivals
为点
d %>%
ggplot(aes(x=as.numeric(hour))) +
scale_x_continuous(breaks = 0:24)+
geom_col(aes(y=average, fill="my bars")) +
geom_point(aes(y=avg_arrivals)) +
geom_line(aes(y=avg_arrivals, group=1, color="my lines")) +
scale_fill_manual("",values="yellow") +
scale_color_manual("",values = 1)
而不是geom_line
你也可以使用geom_path(aes(y=avg_arrivals))
推荐阅读
- spring-boot - Spring boot App 未从 Bitbucket 管道启动(未找到 app.yaml / JAR)
- python - 单击带有硒的按钮会出错
- python - 我正在尝试使用熊猫删除重复的结果元素并保留数据框中的最后一个值
- python - 如何通过forms.py中的选择选项在django中重定向
- mysql - 如何使用 innerJoinAndSelect 将两个表合并为一个?
- gcloud - gcloud 文件传输不显示错误但也不出现
- npm - 打包前端和后端代码 1 一个包?
- python - 将 django-cms 集成到现有项目中 - 错误:TemplateDoesNotExist at /news/cms_wizard/create/
- reactjs - 电子 | 调用远程方法“某些名称”时出错
- pid - 获取“最年轻”进程的 Pid