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

使用gnuplot绘制堆叠直方图,低于均值部分无法标红求助

问题:gnuplot堆叠直方图红色填充不生效的解决方法

我想用gnuplot绘制直方图,实现将每天学习时间中低于平均值的部分标为红色,高于的部分保持默认灰色。但生成的图表全部为灰色,代码如下:

set term postscript eps
set output "result.eps"

set style data histogram
set style histogram rowstacked
set style fill solid 0.5
set boxwidth 1 relative

set xrange [0:31]
set xtics 1
set yrange [0:15]
set ytics 1

set title 'Studying time in May'
datafile = '../data/hour_formatting/May_formatted.txt'
data_under = '../data/under_ave/May_under.txt'
plot datafile using 2:xtic(1) with boxes title 'Studying time', data_under using 2:xtic(1) with boxes notitle fillcolor 'red''

问题原因分析

  • 堆叠顺序错误:使用rowstacked模式时,先绘制的完整学习时间柱子会完全覆盖后续绘制的红色柱子,导致红色部分无法显示。
  • 数据逻辑不匹配:rowstacked要求两个系列数值叠加为总高度,但当前完整时间+低于平均值时间的组合会让柱子高度异常,不符合需求。
  • 语法错误:plot命令末尾多了一个多余的单引号,属于语法问题。

解决方法

正确的思路是将柱子拆分为「低于平均值的红色部分」和「高于平均值的灰色部分」,调整绘制顺序让红色部分在底层,灰色部分叠在上方:

修改后的代码(直接引用双文件)

set term postscript eps
set output "result.eps"

set style data histogram
set style histogram rowstacked
set style fill solid 0.5
set boxwidth 1 relative

set xrange [0:31]
set xtics 1
set yrange [0:15]
set ytics 1

set title 'Studying time in May'
datafile = '../data/hour_formatting/May_formatted.txt'
data_under = '../data/under_ave/May_under.txt'

# 先绘制低于平均值的红色部分,再绘制高于的灰色部分
plot data_under using 2:xtic(1) with boxes notitle fillcolor 'red', \
     datafile using ($2 - column(data_under,2)):xtic(1) with boxes title 'Studying time'

说明

  • column(data_under,2):读取data_under的第2列数值,与datafile的第2列计算差值,得到高于平均值的学习时间。
  • 绘制顺序优先红色部分,确保红色底层可见,灰色部分仅覆盖高于平均值的区域,符合需求。
  • 修正了末尾多余的单引号语法错误。

兼容旧版本gnuplot的方案

如果你的gnuplot版本不支持跨文件引用列,可以先将两个文件合并为一个(每行包含日期、完整时间、低于平均值时间,示例命名为May_combined.txt),再绘制:

set term postscript eps
set output "result.eps"

set style data histogram
set style histogram rowstacked
set style fill solid 0.5
set boxwidth 1 relative

set xrange [0:31]
set xtics 1
set yrange [0:15]
set ytics 1

set title 'Studying time in May'
data_combined = '../data/May_combined.txt'

plot data_combined using 3:xtic(1) with boxes notitle fillcolor 'red', \
     data_combined using ($2 - $3):xtic(1) with boxes title 'Studying time'

内容的提问来源于stack exchange,提问作者김정석

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:40:04