答案 0 :(得分:1)
我想你可能需要这样的东西。我使用iris
创建了一个示例数据,因为您没有提供可重现的最小数据。我们的想法是在geom_dumbbell()
包中使用SciencePo
来创建线条和点。然后,调整x刻度以为标签腾出空间。 geom_text_repel()
可以帮助您很好地添加标签。如果您热衷于此,请查看this link。
library(dplyr)
library(tibble)
library(ggplot2)
library(SciencePo)
library(ggrepel)
### Create a sample data
summarize(group_by(iris, Species),
petal.width = sum(Petal.Width)) %>%
add_row(Species = "whatever", petal.width = 0) -> temp
ggplot(data = temp, aes(x = petal.width, y = Species)) +
geom_dumbbell(xend = 0 , point.size.r = 0, point.size.l = 3) +
scale_x_continuous(limits = c(0, max(temp$petal.width) + 10))) +
geom_text_repel(aes(x = petal.width, y = Species, label = petal.width),
segment.size = 0,
max.iter = 2e3,
nudge_x = 5)
答案 1 :(得分:0)
如果仅限于使用ggplot,那么一种方法是绘制线图并添加geom_segment。我刚刚使用了一些虚拟数据来演示如下。
data <- data.frame(tech=c('R','Java','Python'), articles=c(1000,2000,1500))
ggplot(data=data, aes(x=tech, y=articles)) +
geom_line() +
geom_segment(aes(xend=tech, yend=0), color="black") +
geom_text(aes(label = articles), hjust = -.5) +
geom_point(size=3) +
scale_y_continuous(limits = c(0, 8000)) +
ylab("Number of Scholarly Articles in 2015") +
xlab("Analytics Software") +
ggtitle("2015 Scholarly Articles by Analytics Software") +
coord_flip()