如何在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
相关产品推荐
相关产品推荐

