I want to create a lollipop graph something like given below: enter image description here

So for I got the following: enter image description here

使用以下代码

# Library
library(tidyverse)
 
# Create data
df1 <- 
  data.frame(
    x = c(2014, 2014, 2017, 2017, 2021, 2021)
  , y = c(1, -1, 1, -1, 1, -1)
  )


df1

# plot
ggplot(data = df1, aes(x = x, y = y)) +
  geom_segment(aes(x = x, xend = x, y = 0, yend = y)) +
  geom_segment(aes(x = 2014, xend = 2021, y = 0, yend = 0)) +
  geom_point(
      size   = 5
    , color  = "red"
    , fill   = alpha("orange", 0.3)
    , alpha  = 0.7
    , shape  = 21
    , stroke = 2
    ) +
  theme_void()

推荐答案

这里有一种可能的方法,可以根据特定的要求进行调整.

您可能需要调整参数以适应您的数据和图形设备.

在调用ggplot和数据框内完成的工作平衡是相当随意的;可以在数据框中设置图表各种元素的y和x坐标的设置.

library(ggplot2)
library(dplyr)
library(ggforce)
library(ggtext)

# Assumed data
df2 <- 
  data.frame(
    start = c(2014, 2017, 2018, 2021),
    qual = c("BSc", "MRes", "Phd", "DS" ),
    loc = paste("Uni", LETTERS[1:4])) |> 
  mutate(qual = factor(qual, levels = qual, ordered = TRUE),
         lab = paste0("**", qual, "**<br>", loc),
         dur = paste0(start, "\n-\n", lead(start)),
         dur = stringr::str_replace(dur, "NA", "now"))


ggplot(data = df2) +
  geom_segment(aes(x = -Inf, xend = Inf, y = 0, yend = 0)) +
  geom_segment(aes(x = qual, xend = qual, y = 0, yend = rep(c(0.75, -0.75), 2))) +
  geom_point(aes(x = qual, y = 0), size = 3)+
  geom_circle(aes(x0 = 1:4, y0 = rep(c(1, -1), 2), r = 0.35),
              fill = "aquamarine4",
              colour = NA)+
  geom_richtext(aes(x = qual, y = rep(c(-0.5, 0.5), 2), label = lab),
            size = 6,
            family = "serif",
            colour = "aquamarine4",
            label.colour = NA)+
  geom_text(aes(x = qual, y = rep(c(1, -1), 2), label = dur),
            colour = "white",
            size = 6,
            family = "serif") +
  ylim(-1.5, 1.5) +
  theme_void() +
  coord_fixed()

创建于2023-06-24年第reprex v2.0.2

R相关问答推荐

如何创建具有总计列和ggplot 2所有条线的百分比标签的堆叠条形图?

按崩溃类别分类的指数

使用Shiny组合和显示复制和粘贴的数据

基于R中的GPS点用方向箭头替换点

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

基于不同组的列的相关性

格点中指数、双曲和反双曲模型曲线的正确绘制

根据模式将一列拆分为多列,并在R中进行拆分

如何利用模型函数在格图中添加双曲/指数曲线

如何通过判断数据框的一列来压缩另一列?

SHINY:使用JS函数应用的CSS样式显示HTML表格

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

如何根据数据帧中的值从该数据帧中提取值?

QY数据的处理:如何定义QY因素的水平

在数据帧列表上绘制GGPUP

使用geom_sf跨越日期线时的闭合边界

当由base::限定时,`[.factor`引发NextMethod错误

如何调整一个facet_work()面板内的框图和移动标签之间的水平宽度?

为什么将负值向量提升到分数次方会得到NaN

将美学添加到ggploy中的文本标签