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

Gnuplot v5.4.2箱线图异常点同X轴位置绘制方法问询

在Gnuplot v5.4.2中统一箱线图异常点的X位置

Gnuplot默认箱线图的异常点会随机分散在箱线的X宽度范围内,没有直接提供"X宽度为0"的点类型,但可以通过两步绘图法实现异常点对齐到箱线正上方/下方的需求,同时完全保留箱线的统计属性:

核心实现思路

  1. 先绘制箱线图,用nooutliers隐藏默认分散的异常点(注意:该选项仅隐藏显示,不会影响箱线的四分位数、均值等统计计算,因为统计逻辑在绘图前已完成)
  2. 利用Gnuplot内置的stats命令提取每组数据的异常点,将这些点的X坐标统一设置为对应箱线的中心位置,再单独叠加绘制

完整脚本示例

假设你的数据文件为data.txt,每列对应一组数据,以下是可直接运行的代码:

set terminal pngcairo enhanced font 'Arial,10'
set output 'aligned_outliers_boxplot.png'

# 基础样式设置
set style boxplot nooutliers  # 隐藏默认分散的异常点,不影响统计
set style data boxplot
set boxwidth 0.8
set xtics 1,1,3  # 根据你的数据组数调整范围
set ylabel 'Measurement Value'
set xlabel 'Group'

# 第一步:绘制箱线图主体
plot 'data.txt' using 1:2:3 with boxplot title 'Boxplot'

# 第二步:提取并绘制对齐的异常点
stats 'data.txt' using 1:2:3  # 统计所有组的异常点信息
do for [i=1:3] {  # 循环处理每组数据,3为总组数
    # 将异常点的X坐标固定为组序号i,用红色实心点绘制
    plot 'data.txt' using (i):i every ::STATS_boxplot_outliers_start[i]::STATS_boxplot_outliers_end[i] \
         with points pt 7 lc rgb 'red' notitle
}

其中STATS_boxplot_outliers_start[i]和STATS_boxplot_outliers_end[i]是Gnuplot统计后自动生成的变量,对应第i组异常点在数据文件中的行范围。

替代简化方案:预处理数据

如果觉得循环统计的方式繁琐,可以用awk等工具提前预处理数据,提取每组异常点并统一X坐标后保存到新文件,再用Gnuplot叠加绘制:

# preprocess_outliers.awk
BEGIN {
    FS=" "
}
{
    for (col=1; col<=NF; col++) {
        # 直接输出组序号(X值)和对应数据点,后续用Gnuplot结合stats筛选异常点
        print col, $col >> "aligned_outliers.txt"
    }
}

执行awk -f preprocess_outliers.awk data.txt生成对齐后的异常点文件,再在Gnuplot中先绘制箱线图,再绘制该文件的异常点(需结合stats结果筛选)。

GNU R替代方案

如果Gnuplot的实现仍显复杂,R的ggplot2可以一键实现异常点对齐:

library(ggplot2)
library(tidyr)

# 读取并转换数据格式
data <- read.table("data.txt", header = FALSE)
data_long <- pivot_longer(data, cols = everything(), names_to = "Group", values_to = "Value")

# 绘制对齐异常点的箱线图
ggplot(data_long, aes(x = Group, y = Value)) +
  geom_boxplot(outlier.alpha = 1, outlier.shape = 19)  # outlier自动对齐箱线中心

内容的提问来源于stack exchange,提问作者emacs drives me nuts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:41:09