如何使用gnuplot绘制分组箱线图并设置特殊对数纵轴刻度
Gnuplot分组箱线图实现方案
1. 纵轴特殊刻度设置
要实现形如10^1、10^2的指数格式纵轴刻度,分两种场景处理:
- 如果你需要的是对数刻度(数值跨度大、按10的幂次均匀分布):
开启对数轴+自定义刻度格式即可,对应代码:set logscale y # 开启y轴对数刻度 set format y "10^{%L}" # %L自动提取对数后的指数,渲染为上标格式 set ytics 10 # 可选:指定刻度按10的倍数间隔显示 - 如果你不需要对数轴,只是要把普通线性刻度的值显示为10的幂次格式:
直接设置刻度格式即可,对应代码:set format y "10^{%T}" # %T自动计算数值对应的10的指数
2. 分组箱线图绘制方法
你的数据按「水果类型」为大组,每组内包含A、B、C三家公司的价格分布,我们通过同组箱线位置偏移的方式实现分组,避免箱线重叠。
第一步:整理测试数据
将你给出的测试数据整理为gnuplot可读取的文本文件,命名为fruit_price.dat,内容如下:
# 列1:苹果价格 列2:香蕉价格 列3:橙子价格 # A公司数据 1.2 2.2 3.1 1.3 2.1 3.3 1.4 2.4 3.4 1.1 2.5 3.5 # B公司数据 1.2 2.2 3.1 1.3 2.1 3.3 1.4 2.4 3.4 1.1 2.5 3.5 # C公司数据 2.2 3.2 2.1 1.3 3.1 3.3 1.4 3.4 1.4 2.1 2.5 2.5
第二步:完整绘图代码
# 输出设置,可根据需要替换为qt、wxt等交互式终端 set terminal pngcairo size 800,600 font "Arial,10" set output "group_boxplot.png" # 纵轴设置(按你需要的指数刻度调整,不需要对数可以删掉set logscale y) set logscale y set format y "10^{%L}" set ylabel "价格" set yrange [0.5:10] # 可选:自定义纵轴范围 # 横轴设置,三个大组对应横轴位置1、2、3 set xtics ("苹果" 1, "香蕉" 2, "橙子" 3) set xrange [0.5:3.5] set xlabel "水果类型" # 箱线样式设置 set style fill solid 0.6 border -1 set style boxplot outliers pointtype 7 pointsize 0.5 # 异常点样式 boxwidth = 0.18 # 单个箱线的宽度 offset = 0.2 # 同组内箱线的偏移距离 # 绘图:同个水果的三个公司箱线分别偏移-0.2、0、+0.2,避免重叠 plot 'fruit_price.dat' using (1-offset):1 with boxplot lw 1.5 title 'A公司', \ '' using (1):1 with boxplot lw 1.5 title 'B公司', \ '' using (1+offset):1 with boxplot lw 1.5 title 'C公司', \ '' using (2-offset):2 with boxplot lw 1.5 notitle, \ '' using (2):2 with boxplot lw 1.5 notitle, \ '' using (2+offset):2 with boxplot lw 1.5 notitle, \ '' using (3-offset):3 with boxplot lw 1.5 notitle, \ '' using (3):3 with boxplot lw 1.5 notitle, \ '' using (3+offset):3 with boxplot lw 1.5 notitle
运行代码后即可得到按水果分组、每家公司对应一个箱线的分组箱线图,不需要对数刻度的话删除set logscale y相关的行即可。
内容的提问来源于stack exchange,提问作者changye
相关产品推荐
相关产品推荐

