任何人都有办法在gnuplot中绘制豆图?

时间:2013-10-08 23:51:51

标签: plot gnuplot data-visualization

标题非常自我解释,但这是我想要做的事情的图片。我很难搞清楚它是否可能。

example bean plot

借鉴的地图: 评估硫化物矿山周围的地球化学背景水平 - 一个新的豆类统计程序。 Gusstavason等。 2012。

1 个答案:

答案 0 :(得分:3)

如果可能的话,以这个方向完成绘图可能非常麻烦。

我的建议是用通常的方向绘制所有东西(即'沉积物'轴为x - 轴,或者更确切地说是x2 - 轴),旋转所有标签并最终旋转90度的完整输出(pdf文件,例如pdftk等)。

有了这个,你可以照常使用任何情节风格。在下面的脚本中,我只是向您展示如何为两个不同的数据集绘制紫色和黄色填充曲线(使用伪数据)。添加其他峰值应该是直接的(使用例如boxesvector绘图样式绘制条形图。)

为了使不同的地图具有不同的ytics,我将某个y - 值与某个地图相关联,1=Water,...,4=Gyttja

全力以赴提供以下脚本:

reset
set terminal pdfcairo linewidth 2
outfile='bean'
set output outfile.'.pdf'
set encoding utf8

set x2range [0.5:9000]
set logscale x2
set x2tics (1, 5, 10, 50, '' 100, 500, '' 1000, 5000) out
set x2label 'mg/kg (sediments), µg/L (water)'
unset xtics

set yrange[0.5:4.5]
set ytics ('Water' 1, 'Minerogenic' 2, 'Peat' 3, 'Gyttja' 4) center rotate by -90 out

set label at graph 0.95, graph 0.05 right rotate by -90 'Nickel' font ',20' front
# cover possible data overlapping with the label
set object rectangle from graph 0.9, graph 0 to graph 1,graph 0.2 fillcolor rgb 'white' fillstyle solid noborder front

unset key

set macros
fs1="fillcolor rgb '#fc9e00' linewidth 2 fillstyle solid border lt -1"
fs2="fillcolor rgb '#9119f7' linewidth 2 fillstyle solid border lt -1"
# use pseudo data
set samples 500
plot '+' using 1:(4-0.3*exp(-(($1-10)/5.0)**4)) axes x2y1 with filledcurves y1=4 @fs1,\
     '' using 1:(4+0.2*exp(-(($1-70)/50.0)**4)) axes x2y1 with filledcurves y1=4 @fs2,\
     '' using 1:(1-0.4*exp(-(($1-5)/2.0)**2)) axes x2y1 with filledcurves y1=1 @fs1,\
     '' using 1:(1+0.1*exp(-(($1-30)/20.0)**2)) axes x2y1 with filledcurves y1=1 @fs2

set output
system(sprintf('pdftk %s.pdf cat 1W output %s-rot.pdf', outfile, outfile))
system(sprintf('pdftocairo -r 150 -png %s-rot.pdf', outfile))

这给出了(传统和旋转输出并排)4.6.3:

enter image description here

伪数据需要一些东西。对于真实数据文件,绘图线看起来有点不同。不同的图表在1方向上的y分隔,因此您必须相应地扩展数据(在此处使用比例因子sc手动完成):

sc = 5.1
plot 'datafile.txt' using 1:(4 + $2/sc) axes x2y1 with filledcurves y1=4 @fs1

您当然也可以通过使用stats命令提取一些最小/最大值来自动进行缩放。