Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GNUPLOT-如何在图例中显示最大值_Gnuplot_Histogram_Legend - Fatal编程技术网

GNUPLOT-如何在图例中显示最大值

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

我正在用GNUPlot绘制图表。我可以用图例生成一个堆叠的直方图,但我很难用每个项目的MIX、MAX等值来扩展图例,就像我用RRDTool得到的一样

我的数据看起来像这样

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))
但我有两个问题

  • columnheader未被识别为字符串
  • max(COL)仅显示最后一个值(从sprintf中删除columnheader后测试)
  • 我是gnuplot新手,所以我确信我在这里遗漏了一些重要的东西

    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已修复,请删除结尾处的“]”。