GNUPLOT-如何在图例中显示最大值
我正在用GNUPlot绘制图表。我可以用图例生成一个堆叠的直方图,但我很难用每个项目的MIX、MAX等值来扩展图例,就像我用RRDTool得到的一样 我的数据看起来像这样GNUPLOT-如何在图例中显示最大值,gnuplot,histogram,legend,Gnuplot,Histogram,Legend,我正在用GNUPlot绘制图表。我可以用图例生成一个堆叠的直方图,但我很难用每个项目的MIX、MAX等值来扩展图例,就像我用RRDTool得到的一样 我的数据看起来像这样 DATE 2GRAN 3GRAN 4GRAN 2GTRAN 20170401 1234 1232 5454 98765 20170402 2312 99999 11 1234 20170403 55 654 1123
DATE 2GRAN 3GRAN 4GRAN 2GTRAN
20170401 1234 1232 5454 98765
20170402 2312 99999 11 1234
20170403 55 654 1123 10000
但是有更多的栏目
我使用的代码是:
clear
reset
set key out
set terminal jpeg size 1900,1080 font "Helvetica" 16
set output 'plot_per_mo.jpg'
set xtics rotate out
set style data histogram
set style histogram rowstacked
set boxwidth 0.7 relative
set datafile missing '?'
set datafile separator '\t'
do for [i=2:13]{
stats 'convertedDataMO.dat' using (column(i))
max(i) = STATS_max
print sprintf("Max[%2d] = %d",i,max(i))
}
set palette defined ( 0 "black", 1 "yellow", 2 "green", 3 "blue", 4 "red", 5 "orange" )
plot for [COL=2:13] 'convertedDataMO.dat' using COL:xticlabels(1) lt palette frac COL/13. title columnheader(COL)
我试着用
plot for [COL=2:13] 'convertedDataMO.dat' using COL:xticlabels(1) lt palette frac COL/13. title sprintf("%20s ---> %6d",columnheader(COL),max(COL))
但我有两个问题
max(I)
(带括号)在脚本中不是数组的元素,而是函数。如何定义数组取决于gnuplot的版本。如果是4.x或5.0,则查看答案;如果是5.1或更高版本,则为演示脚本。另外,columnheader
似乎对我很有用,至少对这些数据是这样。max(i)
(带括号)在脚本中不是数组的元素,而是函数。如何定义数组取决于gnuplot的版本。如果是4.x或5.0,则查看答案;如果是5.1或更高版本,则为演示脚本。另外,columnheader
似乎对我有效,至少对这些数据有效。使用中的链接,描述数组解决方法,我将代码重写如下:
headerrow = system('head -1 convertedDataMO.dat')
arrGet(name, i) = value(sprintf("_%s_%i", name, i))
arrSet(name, i, value) = sprintf("_%s_%i = %.16e", name, i, value) #"array" element with number
arrSetStr(name, i, value) = sprintf("_%s_%i = % 30s", name, i, value) #"array" element with string
do for [i=2:9]{
stats 'convertedDataMO.dat' using (column(i))
eval arrSet("MAX",i,STATS_max)
eval arrSet("MIN",i,STATS_min)
columnName = sprintf("%s",word(headerrow,i))
eval arrSetStr("COLUMN",i,"columnName")
}
set palette defined ( 0 "black", 1 "yellow", 2 "green", 3 "blue", 4 "red", 5 "orange" )
plot for [i=2:9] "convertedDataMO.dat" using i:xticlabels(1) lt palette frac i/9. title sprintf("%30s%10s%10d%10s%10d",arrGet("COLUMN",i),"MIN",arrGet("MIN",i),"MAX",arrGet("MAX",i))
数组解决方案工作得很好,但我也必须解决columnheader问题,因为我没有找到在sprintf标题中使用它的方法。列名取自第一行,并插入到“数组”中
在使用此数据结束时:
Date ParamA ParamB ParamC ParamD ParamE ParamF ParamG ParamH
20170406 ? 379 ? 354 ? ? ? 3095
20170407 ? 469 ? 352 ? ? ? 1769
20170408 ? ? ? ? 168 306 ? 1875
20170409 ? ? ? ? 180 309 ? 2659
20170410 ? ? ? ? 168 306 ? 3283
20170411 ? ? ? ? ? 306 395 1388
20170412 ? ? ? ? 105 306 ? 1565
20170413 423 ? ? ? ? ? 762 1688
重写的代码生成以下图例:
所以任务完成了:)
(数据与问题中的不同,但工作原理相同)使用中的链接,描述数组解决方法,我将代码重写如下:
headerrow = system('head -1 convertedDataMO.dat')
arrGet(name, i) = value(sprintf("_%s_%i", name, i))
arrSet(name, i, value) = sprintf("_%s_%i = %.16e", name, i, value) #"array" element with number
arrSetStr(name, i, value) = sprintf("_%s_%i = % 30s", name, i, value) #"array" element with string
do for [i=2:9]{
stats 'convertedDataMO.dat' using (column(i))
eval arrSet("MAX",i,STATS_max)
eval arrSet("MIN",i,STATS_min)
columnName = sprintf("%s",word(headerrow,i))
eval arrSetStr("COLUMN",i,"columnName")
}
set palette defined ( 0 "black", 1 "yellow", 2 "green", 3 "blue", 4 "red", 5 "orange" )
plot for [i=2:9] "convertedDataMO.dat" using i:xticlabels(1) lt palette frac i/9. title sprintf("%30s%10s%10d%10s%10d",arrGet("COLUMN",i),"MIN",arrGet("MIN",i),"MAX",arrGet("MAX",i))
数组解决方案工作得很好,但我也必须解决columnheader问题,因为我没有找到在sprintf标题中使用它的方法。列名取自第一行,并插入到“数组”中
在使用此数据结束时:
Date ParamA ParamB ParamC ParamD ParamE ParamF ParamG ParamH
20170406 ? 379 ? 354 ? ? ? 3095
20170407 ? 469 ? 352 ? ? ? 1769
20170408 ? ? ? ? 168 306 ? 1875
20170409 ? ? ? ? 180 309 ? 2659
20170410 ? ? ? ? 168 306 ? 3283
20170411 ? ? ? ? ? 306 395 1388
20170412 ? ? ? ? 105 306 ? 1565
20170413 423 ? ? ? ? ? 762 1688
重写的代码生成以下图例:
所以任务完成了:)
(数据与问题中的不同,但工作原理相同)columnheader工作正常,但我写的一篇文章表明,它不适用于sprintf。我使用的sprointf,因为我需要将列名与例如MAX for column组合起来。关于阵列解决方案,如您的link@user1133275修复了,删除了结尾处的“]”。columnheader可以正常工作,但我写的一个例子表明它不适用于sprintf。我使用的sprointf,因为我需要将列名与例如MAX for column组合起来。关于阵列解决方案,如您的link@user1133275已修复,请删除结尾处的“]”。