首页 > 解决方案 > 将第二个数据框中的数据标签添加到包含 geom_path() 的 ggplot

问题描述

我试图在几个时间点(几周)内比较一个周期中不同组件的持续时间。理想情况下,情节应如下所示:

根据需要带有数据标签的周期时间 根据需要带有数据标签的周期时间

我能够生成下面的图(代码如下),但无法向图表添加数据标签。

使用需要数据标签的 geom_path() 绘图

使用需要数据标签的 geom_path() 绘图

我从以下内容绘制:

  1. 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
  1. 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 有关?

关于如何添加这些数据标签的任何想法?

标签: rggplot2labeling

解决方案


而不是使用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)

推荐阅读