我正在尝试使用csv文件构建图表。 它应该在内部有不确定数量的数据块。
我的CSV看起来像这样:
year;amount;NAME1
year;amount;NAME1
year;amount;NAME1
year;amount;NAME2
year;amount;NAME2
year;amount;NAME2
所以我希望我的图形有两条曲线(如果有更多的块,则更多),一条名为NAME1,另一条名为NAME2。 我想要检索名称的唯一方法是使用:
title columnhead(3)
但是通过使用它,我的csv的第一行丢失了,我无法理解为什么......
这是我的脚本生成图像
gnuplot <<EOF
set terminal png
set title "Stages par professeur par années"
set output "stages_entr_ann.png"
set auto x
set key on outside left bmargin
set datafile separator ";"
set xtics 1
set ytics 1
stats 'fichier3_t.stat'
plot for [IDX=0:STATS_blocks-1] 'fichier3_t.stat' index IDX u 1:2 title columnhead(3) with linespoints ls IDX
EOF
(有未知数量的块,所以我使用的是STATS_blocks)
答案 0 :(得分:0)
关键是columnhead
需要这样的事情:
Year Amount Name
2013 5000 John
2014 8000 Max
2015 12000 Susanne
即。每个列的第一行被视为标签,而不是数据。当gnuplot提取名称时,它会忽略该行的其余部分。
没有简单直接的解决方案,但您可以解决方法:
plot for [IDX=0:STATS_blocks-1] 'fichier3_t.stat' index IDX u 1:(1/0) title columnhead(3) with linespoints ls IDX, for [IDX=0:STATS_blocks-1] 'fichier3_t.stat' index IDX u 1:(1/0) notitle with linespoints ls IDX
更清楚地说明:
plot 'fichier3_t.stat' ... u 1:(1/0) title columnhead(3) with linespoints ..., \
'fichier3_t.stat' ... u 1:2 notitle with linespoints ...
第一个命令与您的类似,它只是不绘制任何数据(因为1/0始终无效)。它只在那里生成图例(键)中的条目。 第二个命令绘制数据,但不在图例中生成任何条目。只需确保为两个图分配相同的线条样式。
如果表格很大且速度有问题,您也可以使用every
作为标题生成命令,以减少它试图绘制的点数。
最后,您可能还会收到消息“xrange中没有有效数据”或类似信息。这是打算在这里,但不应该是一个问题。