我有一个数据矩阵,这是自动音乐转录程序的输出。我想用gnuplot绘制它,分配适当的标签。 Here's my dropbox with some data,其中Intensity.dat是实际数据,example.stn是一列字符串值,其中一些将显示在y轴上,而example.all只是一个结果paste example.stn Intensity.dat > example.all
脚本:
reset
set title "Intensity detection"
set palette negative grayscale
set cbrange [0.01:1]
set xlabel "Time [s]"
set ylabel "Musical note"
set terminal qt font "Verdana,16"
set logscale cb
xincr=0.04644
yincr=1
plot 'example.all' u (($1+0.5)*xincr):($2*yincr):3 matrix with image
产生 plot produced by script 1。一切都还好,现在只是标签......
在我将最后一行更改为plot 'example.all' u (($1+0.5)*xincr):($2*yincr):3 matrix rowheaders with image
之后,y轴变得太密集了(它是我的Dropbox中的plot2.jpg,链接在顶部。抱歉,伙计们,我是新的,它不允许我发布超过2个链接)。
我想要的是一种只呈现我想要的标签(或隐藏其他标签,无论如何)的方法,而不是一次只显示(因为它看起来不可读)。我还希望能够在需要时迅速将其更改为其他人。假设我想显示每个第12个标签,但仍保留整个矩阵,并绘制所有行。或者每隔12日从第2个标签开始,每隔12个从第6个开始。我已经尝试了很多方法但是我被卡住了。像ytics()或:yticlabels()这样的函数无法实现,至少对我而言。是的,我需要这个Verdana 16,完全删除标签是不可能的。
如果该方法也适用于x轴,我将非常感激,因为我在其他情节中有x轴的类比问题,但我非常感谢任何帮助。
答案 0 :(得分:0)
您可以将图像与绘制ytics的图像分开,如下所示:
condition(n) = (ceil(n)%12-2 == 0) || (ceil(n)%12-6 == 0)
plot 'Intensity.dat' u (($1+0.5)*xincr):($2*yincr):3 matrix with image ,\
'example.stn' u (NaN):0:ytic(condition($0) ? strcol(1) : "") notitle
函数condition
检查是否应绘制标签。我使用ceil
将实数转换为模运算符(%)所需的整数。使用亚麻condition
调用$0
函数。 NaN
同时绘制' example.stn'避免在保留设置标签的机会的同时绘制数据点。如果满足条件(第12个标签从第6个开始,从第6个开始,则从第6个开始),我们使用实际标签,否则使用空字符串。