gnuplot不重叠线 [英] gnuplot do not overlap lines

查看:56
本文介绍了gnuplot不重叠线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下图表是使用gnuplot生成的:

The folowing graph is generated with gnuplot:

它显示5个(但可以更多或更少)的波.但是,我需要的是分别显示每个波形,像这样(我对gimp所做的):

It shows 5 (but it can be more or less) waves. However, what I need is display each wave separately, like this (I did with gimp):

是否可以使用gnuplot做到这一点?我还需要像现在一样,将每个波浪的颜色设置为不同的颜色.

Is there a way to do this with gnuplot? I also need that each wave be a different colour, as I have now.

这里使用了gnuplot脚本: http://pastebin.com/vAD2syTS

Here is gnuplot script used: http://pastebin.com/vAD2syTS

以下是gnuplot脚本用来修复我的数据的python脚本: http://pastebin.com/WEncNjDA

Here is the python script that gnuplot script uses to fix my data: http://pastebin.com/WEncNjDA

以下是数据: http://pastebin.com/ewBpvHWM

以下是python脚本对其进行修复后的数据: http://pastebin.com/cgimMyr9

Here is the data after python script fixes it: http://pastebin.com/cgimMyr9

推荐答案

我对此很有趣.我的策略涉及以稍微不同的设置绘制第一张,最后一张和中间的图,以使边界对齐.我还定义了一些函数,以确保所有绘图颜色的确会有所不同,除非您要绘制多达1600万个数据集.

I had some fun with this one. My strategy involves plotting the first, last and intermediate plots with slightly different settings in order to get the borders to line up. I also define some functions to ensure that all the plot colors will indeed be different unless you have upwards of ~16 million data sets to plot.

### indices: change this parameter to equal the number of data sets to be plotted
indices = 8 
# h: height of output in pixels
h = 150.0*indices
# d: top and bottom margin in pixels
d = 75.0

### define functions to help set top/bottom margins
top(i,n,h,d) = 1.0 - (d+(h-2*d)*(i-1)/n)/h
bot(i,n,h,d) = 1.0 - (d+(h-2*d)*i/n)/h

### define some fun RGB code converter functions

# round: crude rounding function (gnuplot doesn't have this?)
# assumes a float, returns an int
round(x) = x-int(x)>=0.5?ceil(x):floor(x)

# i2h: converts a (decimal) integer between 0 and 15 to hex.
# returns a string, 0-F corresponding to 0-15
i2h(i) = i==10?'A':i==11?'B':i==12?'C':i==13?'D':i==14?'E':i==15?'F':sprintf('%d',i)

# i2r: converts an integer to an RGB code.
# returns a string (RGB code) of length 6, 000000-FFFFFF corresponding to 0-16777215
# changing the last division to 15 instead of 16 prevents colors being too faint
i2r5(i) = i2h(i/(15**5))
i2r4(i) = i2h(i%(16**5)/(15**4))
i2r3(i) = i2h(i%(16**5)%(16**4)/(15**3))
i2r2(i) = i2h(i%(16**5)%(16**4)%(16**3)/(15**2))
i2r1(i) = i2h(i%(16**5)%(16**4)%(16**3)%(16**2)/(15**1))
i2r0(i) = i2h(i%(16**5)%(16**4)%(16**3)%(16**2)%(16**1))
i2r(i) = i2r5(i).i2r4(i).i2r3(i).i2r2(i).i2r1(i).i2r0(i)

# rgb_iter: returns the i-th of n RGB codes, evenly spaced across the spectrum
rgb_iter(i, n) = '#'.i2r(round((i-1)*(16777215.0/(n-1))))

### first set up some basic plot parameters
set term png enhanced size 800,h font 'Courier-Bold,14'
set output 'waves.png'

set title 'Wave propagation by geophones'
set ylabel 'Wave'

set xrange [1400:]
set yrange [-0.15:0.15]
set ytics ('-0.1' -0.1, '0.0' 0.0, '0.1' 0.1)

set key out right

### now make plots
set multiplot layout indices,1

### first plot
set border 14
set tmargin at screen top(1,indices,h,d)
set bmargin at screen bot(1,indices,h,d)
unset xtics
plot 'temp.dat' index 0 w lines lw 3 lc rgb rgb_iter(1,indices) title 'Geophone 1'
unset title

### intermediate plots
set border 10
unset xlabel
do for [i=1:indices-2] {
 set tmargin at screen top(i+1,indices,h,d)
 set bmargin at screen bot(i+1,indices,h,d)
 plot 'temp.dat' index i w lines lw 3 lc rgb rgb_iter(i+1,indices) title sprintf('Geophone %d', i + 1)
}

### last plot
set border 11
set tmargin at screen top(indices,indices,h,d)
set bmargin at screen bot(indices,indices,h,d)
set xtics nomirror
set xlabel 'Iterations'
plot 'temp.dat' index (indices-1) w lines lw 3 lc rgb rgb_iter(indices,indices) title sprintf('Geophone %d', indices)

unset multiplot

样本数据集的输出如下所示:

The output on your sample data set looks like this:

顶部/底部图的大小并不十分理想,而且正如mgilson所说,可能需要在屏幕上使用 set xmargin ... 命令来摆弄一些东西才能使所有图大小相等

The sizes of the top/bottom plots aren't quite perfect, and as mgilson said it would probably take some fiddling with set xmargin at screen ... commands to make all the plot sizes equal.

(如果没有其他功能,那些int-> RGB转换器可以用于特殊应用;我还具有从RGB代码到int的功能.)

(If nothing else those int->RGB converter can be handy for specialized applications; I also have functions going from RGB codes to ints.)

我更新了脚本,因此所有地块的高度都相同.

I updated the script so all the plots will have the same height.

这篇关于gnuplot不重叠线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆