ggplot:将标签添加到行,而不是端点

时间:2020-06-23 01:24:04

标签: r ggplot2

在这里寻找一些gglot帮助,以获取非标准的绘图类型。这是一个示例图的代码,但是最终产品将有数十个这样的代码。

library(ggplot2)
library(data.table)

SOURCE <- c('SOURCE.1','SOURCE.1','SOURCE.2','SOURCE.2')
USAGE <- rep(c('USAGE.1','USAGE.2'),2)
RATIO <- c(0.95,0.05,0.75,0.25)
x <- data.table(SOURCE,USAGE,RATIO)

ggplot(x, aes(x=SOURCE,y=RATIO,group=USAGE)) +
    geom_point() +
    geom_line() +
    geom_label(aes(label=USAGE))

这将根据需要生成包含两条线的图形。但是标签geom将文本添加到端点。我们想要的是标记该行的文本(每行出现一次,中间出现)。端点将始终具有相同的标签,因此只会造成冗余和混乱(每个图将具有不同的标签)。请参阅附件文件,该文件是在绘画程序中模拟的(忽略字体和大小):

mock up

我知道我们可以使用geom_line(aes(linetype=USAGE)),但是由于所需的图表数量巨大,并且每个图表都非常小,因为绝大多数图表将只有两行且最多,因此我们不希望使用图例极端情况下只有四个。

(故意避免使用堆积的条形物。)

1 个答案:

答案 0 :(得分:0)

您可以使用annotate实现此目的,并可以通过更改x和y值来移动标签。

library(ggplot2)
#library(data.table)

SOURCE<-c('SOURCE.1','SOURCE.1','SOURCE.2','SOURCE.2')
USAGE<-rep(c('USAGE.1','USAGE.2'),2)
RATIO<-c(0.95,0.05,0.75,0.25)
#x<-data.table(SOURCE,USAGE,RATIO)

df <- data.frame(SOURCE, USAGE, RATIO)

ggplot(df, aes(x=SOURCE,y=RATIO,group=USAGE)) +
  geom_point() +
  geom_line() +
  #geom_label(aes(label=USAGE))+
  annotate('text', x=1.5, y=1, label = USAGE[1])+
  annotate('text', x=1.5, y=0.25, label = USAGE[2])