You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2中基于线型绘制圆形点并调整点间距?

在ggplot2中实现圆形线型与间距调整

针对你提出的两个需求,在ggplot2中可以轻松实现,具体方案如下:

1. 将线型改为圆形

原代码中geom_path搭配linetype='11'和lineend="round"生成的是药丸状虚线,要改成纯圆形组成的线条,我们可以直接用geom_point替代geom_path——通过在路径的关键位置绘制圆形点,让每个节点都成为标准圆形,完美替代原有的药丸线型。

2. 通过数值参数调整圆形间距

我们可以添加一个数值参数(比如point_interval)来控制数据点的取样间隔:每隔指定数量的原始数据点保留一个,参数值越大,圆形之间的间距就越大。这种方式可以精准控制间距大小。


修改后的完整代码

library(tidyverse)

# 定义控制圆形间距的参数,数值越大,间距越宽
point_interval <- 2 

x = factor(1:100)
y = 1
df = data.frame(x, y)
add_lines = purrr::map(.x = 0:10, ~ df |>
                         mutate(y = y+.x+ sqrt(runif(1, min = 0, max = 20)), 
                                gr = paste0('line', .x))) |>
  bind_rows() |>
  mutate(x_nb = as.numeric(x)) |>
  # 按设定间隔筛选点,控制圆形间距
  filter(x_nb %% point_interval == 0)

ggplot(data = add_lines, 
       mapping = aes(x = x, 
                     y = sqrt(x_nb)*sin(y+pi*(x_nb/max(x_nb)))+cos(y)+sqrt(y)*-sin(sqrt(x_nb)), 
                     group = gr,
                     color = gr)) + 
  # 绘制圆形点,size控制圆形大小,shape=19是实心圆形
  geom_point(size = 3, shape = 19) + 
  scale_color_viridis_d() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.title = element_blank(),
        axis.text = element_blank(),
        plot.title = element_blank(),
        panel.background = element_rect(fill = "grey90"),
        plot.background = element_rect(colour = NA),
        axis.line = element_blank(),
        axis.ticks = element_blank(),
        legend.position = "none") +
  labs(x = NULL, y = NULL)

可选:带底层细线的增强版本

如果想要保留路径的连贯性,可以叠加一层极细的透明线条,让圆形点的连接逻辑更清晰:

ggplot(data = add_lines, 
       mapping = aes(x = x, 
                     y = sqrt(x_nb)*sin(y+pi*(x_nb/max(x_nb)))+cos(y)+sqrt(y)*-sin(sqrt(x_nb)), 
                     group = gr,
                     color = gr)) + 
  # 底层细线条,增强路径连贯性
  geom_path(size = 0.5, alpha = 0.3) + 
  geom_point(size = 3, shape = 19) + 
  scale_color_viridis_d() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.title = element_blank(),
        axis.text = element_blank(),
        plot.title = element_blank(),
        panel.background = element_rect(fill = "grey90"),
        plot.background = element_rect(colour = NA),
        axis.line = element_blank(),
        axis.ticks = element_blank(),
        legend.position = "none") +
  labs(x = NULL, y = NULL)

内容的提问来源于stack exchange,提问作者M. Beausoleil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:23:14