r - 将第二个数据框中的数据标签添加到包含 geom_path() 的 ggplot
问题描述
我试图在几个时间点(几周)内比较一个周期中不同组件的持续时间。理想情况下,情节应如下所示:
根据需要带有数据标签的周期时间
我能够生成下面的图(代码如下),但无法向图表添加数据标签。
使用需要数据标签的 geom_path() 绘图
我从以下内容绘制:
- df1:每周累积平均持续时间(geom_path() 和 geom_point() 阅读此内容)
week variable value
23 Step 1 0.14
24 Step 1 0.21
23 Step 2 0.25
24 Step 2 0.35
23 Step 3 0.53
24 Step 3 0.65
- df2:每周平均持续时间(数据标签来自于此)
week variable value
23 Step 1 0.14
24 Step 1 0.21
23 Step 2 0.11
24 Step 2 0.14
23 Step 3 0.28
24 Step 3 0.30
我的ggplot代码是:
ggplot(df1, aes(x=value, y=week))+
geom_path(mapping=NULL, data=df1,stat="identity", lineend="butt")+
geom_point(aes(colour=variable, size=0.5))+
labs(title="Average cycle time, by components by week",
x="Number of days",
y="Week in the year")+
theme(axis.text=element_text(size=9),
axis.title=element_text(size=12,face="bold"))+
#annotate(geom="text",df2, aes(label=value)),
# hjust=1, vjust=-0.1)
如果我尝试注释行,我会得到一个空白图,并出现以下错误:
Error in is.finite(x) : default method not implemented for type 'list'
我觉得这可能与我如何指定 df1 和 df2 有关?
关于如何添加这些数据标签的任何想法?
解决方案
而不是使用annotate
(没有数据参数,因此错误)我建议使用geom_text
. 但是,我首选的方法不是同时使用两个 dfs,而是加入两个数据集:
library(ggplot2)
library(dplyr)
df1 <- read.table(text = "week variable value
23 Step_1 0.14
24 Step_1 0.21
23 Step_2 0.25
24 Step_2 0.35
23 Step_3 0.53
24 Step_3 0.65", header = TRUE)
df2 <- read.table(text = "week variable value
23 Step_1 0.14
24 Step_1 0.21
23 Step_2 0.11
24 Step_2 0.14
23 Step_3 0.28
24 Step_3 0.30", header = TRUE)
df3 <- df1 %>%
left_join(df2, by = c("week", "variable"), suffix = c("", "_lab"))
ggplot(df3, aes(x=value, y=week))+
geom_path(mapping=NULL, data=df1,stat="identity", lineend="butt")+
geom_point(aes(colour=variable, size=0.5))+
labs(title="Average cycle time, by components by week",
x="Number of days",
y="Week in the year")+
theme(axis.text=element_text(size=9),
axis.title=element_text(size=12,face="bold"))+
geom_text(aes(label=value_lab),
hjust=1, vjust=-0.1)
以防万一。如果您想同时使用两个 dfs:
ggplot(df1, aes(x=value, y=week))+
geom_path(mapping=NULL, data=df1,stat="identity", lineend="butt")+
geom_point(aes(colour=variable, size=0.5))+
labs(title="Average cycle time, by components by week",
x="Number of days",
y="Week in the year")+
theme(axis.text=element_text(size=9),
axis.title=element_text(size=12,face="bold"))+
geom_text(data = df2, aes(label=value),
hjust=1, vjust=-0.1)
推荐阅读
- reactjs - React-native,monorepo:无法解析模块@babel/runtime/helpers/interopRequireDefault
- javascript - 使用按钮将文本插入所选范围
- r - Flextable:如果满足条件和格式,则更改单元格值
- bash - 如何通过使用 cUrl 和 shell 脚本来获取响应 iframe 数据?
- java - 数据传输问题科学记数法
- stored-procedures - FlywayException:不完整的声明
- python - Google 表格 API - 获取表格详细信息
- botframework - botbuilder DialogTestClient 的 sendActivity 只接受字符串而不接受数字
- slurm - 在特定时间或作业 ID 后取消所有批量作业的单线?
- amazon-web-services - 如果 AWS AutoScaling 组中的实例在一小时内重启 5 次,是否可以发送通知?