如何修改stat_valleys/stat_peaks的箭头线宽?复现方案遇困惑
给ggplot折线图的标注箭头加粗的两种方法
方法1:直接修改ggplot箭头参数(推荐)
不用换arrows函数,原方案里的annotate("segment")或者layer自带的arrow()支持通过linewidth参数(旧版ggplot用lwd)调整线宽。
举个实际例子:
library(ggplot2) df <- data.frame(x = 1:10, y = rnorm(10)) max_point <- df[which.max(df$y), ] ggplot(df, aes(x, y)) + geom_line() + # 加粗箭头只需在arrow()里加linewidth参数 annotate("segment", x = max_point$x, xend = max_point$x, y = max_point$y, yend = max_point$y + 0.5, arrow = arrow(type = "closed", linewidth = 2)) # 数值越大箭头越粗
如果是用layer函数调用geom_segment,同样把带linewidth的arrow()传进去就行,逻辑完全一致。
方法2:用base的arrows函数实现
要是一定要用arrows,得先把ggplot的坐标转换成base绘图的用户坐标,步骤如下:
library(ggplot2) df <- data.frame(x = 1:10, y = rnorm(10)) max_point <- df[which.max(df$y), ] # 先绘制并打印ggplot图 p <- ggplot(df, aes(x, y)) + geom_line() print(p) # 提取ggplot的坐标范围 gb <- ggplot_build(p) x_range <- gb$layout$panel_params[[1]]$x.range y_range <- gb$layout$panel_params[[1]]$y.range # 定义箭头的起点和终点坐标 x_max <- max_point$x y_max <- max_point$y y_end <- y_max + 0.5 # 箭头向上偏移的距离 # 调用arrows,用lwd设置线宽 arrows(x0 = x_max, x1 = x_max, y0 = y_max, y1 = y_end, lwd = 2, code = 2) # code=2表示箭头指向终点
注意:必须先打印ggplot图,再调用arrows,不然base绘图函数找不到对应的绘图设备。
内容的提问来源于stack exchange,提问作者Dalton Linkus
相关产品推荐
相关产品推荐

