Gnuplot:使用内联数据绘制直方图

5

Gnuplot 4.6.5

我想绘制直方图。

我试了这里的演示:http://gnuplot.sourceforge.net/demo/histograms.2.gnu,使用了单独的数据文件:https://dl.dropboxusercontent.com/u/45318932/immigration.dat。它工作得很好:

enter image description here

然而,当我尝试将单独的数据文件作为内联数据放入脚本文件中时:

# set terminal pngcairo  transparent enhanced font "arial,10" fontscale 1.0 size 500, 350 
# set output 'histograms.2.png'
set boxwidth 0.9 absolute
set style fill   solid 1.00 border lt -1
set key inside right top vertical Right noreverse noenhanced autotitles nobox
set style histogram clustered gap 1 title  offset character 0, 0, 0
set datafile missing '-'
set style data histograms
set xtics border in scale 0,0 nomirror rotate by -45  offset character 0, 0, 0 autojustify
set xtics  norangelimit font ",8"
set xtics   ()
set title "US immigration from Northern Europe\nPlot selected data columns as histogram of clustered boxes" 
set yrange [ 0.00000 : 300000. ] noreverse nowriteback
i = 22
plot '-' using 6:xtic(1) ti col, '' u 12 ti col, '' u 13 ti col, '' u 14 ti col
# IMMIGRATION BY REGION AND SELECTED COUNTRY OF LAST RESIDENCE
#
Region  Austria Hungary Belgium Czechoslovakia  Denmark France  Germany Greece  Ireland Italy   Netherlands Norway  Sweden  Poland  Portugal    Romania Soviet_Union    Spain   Switzerland United_Kingdom  Yugoslavia  Other_Europe    TOTAL   
1891-1900   234081  181288  18167   -   50231   30770   505152  15979   388416  651893  26758   95015   226266  96720   27508   12750   505290  8731    31179   271538  -   282 3378014 
1901-1910   668209  808511  41635   -   65285   73379   341498  167519  339065  2045877 48262   190505  249534  -   69149   53008   1597306 27935   34922   525950  -   39945   7387494 
1911-1920   453649  442693  33746   3426    41983   61897   143945  184201  146181  1109524 43718   66395   95074   4813    89732   13311   921201  68611   23091   341408  1888    31400   4321887 
1921-1930   32868   30680   15846   102194  32430   49610   412202  51084   211234  455315  26948   68531   97249   227734  29994   67646   61742   28958   29676   339570  49064   42619   2463194 
1931-1940   3563    7861    4817    14393   2559    12623   144058  9119    10973   68028   7150    4740    3960    17026   3329    3871    1370    3258    5512    31572   5835    11949   377566  
1941-1950   24860   3469    12189   8347    5393    38809   226578  8973    19789   57661   14860   10100   10665   7571    7423    1076    571 2898    10547   139306  1576    8486    621147  
1951-1960   67106   36637   18575   918 10984   51121   477765  47608   43362   185491  52277   22935   21697   9985    19588   1039    671 7894    17675   202824  8225    16350   1325727 
1961-1970   20621   5401    9192    3273    9201    45237   190796  85969   32966   214111  30606   15484   17116   53539   76065   3531    2465    44659   18453   213822  20381   11604   1124492 
e

这是修改后的脚本:https://dl.dropboxusercontent.com/u/45318932/histograms.plt 现在它可以正常工作,只显示了丹麦的结果: enter image description here Gnuplot终端会有三行相同的警告信息:
 "C:\Documents and Settings\leoking\My Documents\temp\histograms.plt", line 27: warning: Skipping data file with no valid points

对我来说,能够使用内联数据真的非常重要。如果您能提供帮助,将不胜感激。

2个回答

5
问题在于当您使用plot '-'时,直到e之前的数据被消耗掉,无法再次使用。当您在同一行中后续绘图使用''时,它只是上一个文件描述符的名称的简写。它并不意味着重新使用已读取的内容,而是要再次读取。
一个非常糟糕的使其工作的方法(证明了我上面所说的观点)是在脚本中只是简单地将四份相同的数据复制一遍。
稍微好些的方式至少是将数据裁剪到您感兴趣的部分。请注意列中的更改;现在每个列都是using 2:
plot '-' using 2:xtic(1) ti col, '' u 2 ti col, '' u 2 ti col, '' u 2 ti col
# IMMIGRATION BY REGION AND SELECTED COUNTRY OF LAST RESIDENCE
#
Region Denmark
1891-1900 50231
1901-1910 65285
1911-1920 41983
1921-1930 32430
1931-1940 2559
1941-1950 5393
1951-1960 10984
1961-1970 9201
e
Region Netherlands
1891-1900 26758
1901-1910 48262
1911-1920 43718
1921-1930 26948
1931-1940 7150
1941-1950 14860
1951-1960 52277
1961-1970 30606
e 
Region Norway
1891-1900 95015
1901-1910 190505
1911-1920 66395
1921-1930 68531
1931-1940 4740
1941-1950 10100
1951-1960 22935
1961-1970 15484
e  
Region Sweden
1891-1900 226266
1901-1910 249534
1911-1920 95074
1921-1930 97249
1931-1940 3960
1941-1950 10665
1951-1960 21697
1961-1970 17116
e

1
还没有尝试过。但这个解决方案看起来真的很聪明! - Changwang Zhang

4

为了让您对即将推出的5.0版本有更深入的了解:您可以按照以下方式定义可重复使用的内部数据块:

$data <<EOF
1 2 3
2 3 4
3 4 5
EOF
plot $data using 1:2, '' using 1:3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接