我想在Y上绘制带有断轴的直方图。已经解释了一个很好的教程here和here但它们并不符合我的需要。数据点是
"Method" "Year1" "Year2"
M1 12 -40
M2 5 40
此数据点的代码段
set ylabel "The Profit (%)"
set style data histogram
set style histogram cluster gap 1
# Draw a horizontal line at Y=0
set arrow 1 from -1,0 to 2,0 nohead
plot 'test_data.txt' using 2:xtic(1) ti col lc rgb "black", '' u 3 ti col lc rgb "grey"
输出看起来像
正如您所看到的,灰色条纹处于极值。我想要的是将yrange从 - 限制为+20并在第二个条上放置一个~~
符号(将其旋转90度)并放置标签-40和+40。像这个图这样的东西
怎么可能?
答案 0 :(得分:1)
你可以做到,但这很乏味:
using
语句中的y值labels
绘图样式绘制标签。以下脚本有效:
set ylabel "The Profit (%)"
set style histogram cluster gap 1
set boxwidth 0.9 relative
# Draw a horizontal line at Y=0
set xzeroaxis lt -1
ulim = 15
llim = -15
set yrange[-20:20]
sc = 0.333
set style fill solid noborder
plot 'test_data.txt' using ($2 > ulim ? ulim : ($2 < llim ? llim : $2)):xtic(1) ti col lc rgb "black" with histogram, \
'' u ($3 > ulim ? ulim : ($3 < llim ? llim : $3)) ti col lc rgb "grey" with histogram,\
for [c=2:3] '' u ($0-1+(c-2.5)*sc):(column(c) > ulim ? ulim : 1/0):(sprintf('+%d', ulim)) with labels offset 0, char 1.5 notitle,\
for [c=2:3] '' u ($0-1+(c-2.5)*sc):(column(c) < llim ? llim : 1/0):(sprintf('%d', llim)) with labels offset 0, char -1.5 notitle,\
for [c=2:3] for [ofs=0:1] '' u ($0-1+(c-2.5)*sc - 0.03 + ofs*0.02):\
(column(c) > ulim ? ulim - 1 : (column(c) < llim ? llim - 1 : 1/0)):(0.04):(2) with vectors lc rgb 'black' nohead notitle
并在4.6.3中给出以下结果:
解释所有事情涉及太多,所以这里有一些重要的评论:
直方图框从0开始放置,并给出自定义标签。这对于在using语句中放置标签和向量($0-1
)非常重要。
系数sc = 0.333
来自xtick(year1,year2和gap 1
)的三列。
该方法适用于第2列和第3列
该脚本提供了一些警告,因为某些图是空的(第2列的值没有超出限制,因此相应的标签和矢量图不包含任何点)。
我认为用曲线表示破碎的盒子是不切实际的。
如果你的盒子有边框,它们也会出现在破碎的盒子顶部,这可能违反直觉。
使用set xzeroaxis
在y=0
绘制一条线,或使用graph
坐标(set arrow from graph 0,first 0 to graph 1, first 0 nohead
)绘制一条线。