ggplot折线图中的变量标签位置

4

我使用 dplyr 创建了以下数据框摘要:

structure(list(maxrep = c(7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 
11L, 12L, 12L, 13L, 13L, 14L, 14L, 15L, 15L, 16L, 16L, 17L, 17L, 
18L, 18L, 19L, 19L, 20L, 20L, 21L, 21L, 22L, 22L, 23L, 23L, 24L, 
24L, 26L, 26L), div = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Premier Division", 
"Second Division"), class = "factor"), freq = c(1L, 10L, 4L, 
39L, 26L, 89L, 73L, 146L, 107L, 162L, 117L, 133L, 121L, 125L, 
116L, 91L, 110L, 65L, 95L, 43L, 75L, 38L, 43L, 24L, 38L, 16L, 
36L, 5L, 15L, 2L, 9L, 7L, 9L, 1L, 3L, 3L, 2L, 1L)), .Names = c("maxrep", 
"div", "freq"), class = c("grouped_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -38L))

我打算使用ggplot2绘制带有不同颜色线条和每个值的文本标签的折线图。

我的做法是

ggplot(df, aes(x=maxrep, y=freq, colour=div)) +
geom_line() +
geom_text(aes(label=freq), vjust=-.5)

结果是

enter image description here

现在我的问题是:图表中所有标签都在各自线条上方。我希望不同颜色的标签处于不同的相对位置,例如青色标签位于线条上方,红色标签位于线条下方(即变量vjust)。有办法做到这一点吗?
另外,有没有办法在右侧的颜色图例中去掉字母a

你有没有考虑为每条线绘制不同的hjust和vjust? - daniel
1
不是真的;无法弄清如何将“geom_text”分成两个,一个用于每行? - Ricky
嗯,我觉得@RStudent刚刚实现了我的建议。 - daniel
2个回答

5

如果使用不同的vjust值分别绘制线条,该怎么办?您可以在图例设置show_guide = FALSE中摆脱a

ggplot(df, aes(x=maxrep, y=freq, colour=div, label = freq)) +
    geom_line() +
    geom_text(data = df[df$div == "Second Division",], vjust=2, show_guide = FALSE) + geom_text(data = df[df$div == "Premier Division",], vjust=-2, show_guide = FALSE)

这将返回:

输入图像描述


4
在数据框中创建一个新的变量,用于保存 vjust 调整参数:
df$pos <- c(2, -2)[(df$div == "Premier Division")+1] 

你可以在新的 pos 向量中使用 aes 调用 vjust

ggplot(df, aes(x=maxrep, y=freq, colour=div)) +
    geom_line() +
    geom_text(aes(label=freq, vjust=pos))

pic


谢谢,这太棒了,我成功地将其应用到更多的条件中。实际上,在我提问之前我就尝试过这个方法,但我没有意识到vjust部分需要放在aes里面。 - Ricky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接