“绘图”;“之前和之后”;gnuplot中的图?

“绘图”;“之前和之后”;gnuplot中的图?,plot,gnuplot,Plot,Gnuplot,我已经成功地使用gnuplot绘制了箱线图。但是现在我想坚持使用gnuplot来满足我所有的绘图需求,并希望做一些Prism可以做的事情: 我只有两列数据(之前和之后),希望所有对都用一条线连接起来。如果有人有任何想法,那就太好了 这是不可能开箱即用的,因此需要一些修改 XTIC是手动设置的,0是'Before'的x-值,1是'After'的值。这些数值以后必须在绘图中明确使用 这些线绘制为无头的箭头。使用lc变量(即linecolor变量),我们可以使用Using语句的最后一列从相应的线型

我已经成功地使用gnuplot绘制了箱线图。但是现在我想坚持使用gnuplot来满足我所有的绘图需求,并希望做一些Prism可以做的事情:


我只有两列数据(之前和之后),希望所有对都用一条线连接起来。如果有人有任何想法,那就太好了

这是不可能开箱即用的,因此需要一些修改

  • XTIC是手动设置的,
    0
    是'Before'的
    x
    -值,
    1
    是'After'的值。这些数值以后必须在绘图中明确使用

  • 这些线绘制为无头的
    箭头。使用
    lc变量
    (即
    linecolor变量
    ),我们可以使用
    Using
    语句的最后一列从相应的线型中选择颜色

  • 首先绘制“之前”点。不幸的是,没有选项
    pointtype变量
    ,因此我使用
    绘图进行
    迭代,为每个点分配不同的
    点类型(
    pt

  • 我使用
    stats
    命令来确定要打印的点数。为了获得总计数,我必须将
    记录
    (内部点)和
    范围外
    点相加,因为分类是基于第一列的值进行的,这与“Before”和“After”标签的“manual”xtics设置相冲突

这些是要点。当然,还有许多其他的可能性(使用线条样式等),但这应该是一个很好的起点

剧本是:

reset
file='beforeafter.txt'

set xtics ('Before' 0, 'After' 1)
set xrange [-0.2:1.2]
set offset 0,0,0.2,0.2

stats file nooutput
cnt = int(STATS_records+STATS_outofrange)

plot for [i=0:cnt-1] file using (0):1 every ::i::i with points lc i+1 pt (6+i) ps 2 t '',\
     for [i=0:cnt-1] file using (1):2 every ::i::i with points lc i+1 pt (6+i) ps 2 t '',\
     file using (0):1:(1):($2-$1):($0+1) with vectors nohead lc variable t ''
使用测试数据beforefafter.txt

15.5
2  0.3
3  3
结果是:

使用线条样式 另一个变体使用线型设置颜色、线型和点类型。对于迭代,必须明确使用
ls(i+1)
,而对于
向量
则使用
作为变量(
箭头样式变量
)。使用
lc变量
无法为箭头设置不同的破折号模式

因此,在我看来,这里有一个更具可读性和灵活性的变体:

reset
set termoption dashed
file='beforeafter.txt'

set xtics ('Before' 0, 'After' 1)
set xrange [-0.2:1.2]
set offset 0,0,0.2,0.2

stats file nooutput
cnt = int(STATS_records+STATS_outofrange)

set style line 1 lt 1 pt 5 ps 2 lw 2 lc rgb '#AE1100'
set style line 2 lt 2 pt 7 ps 2 lw 2 lc rgb '#6EB043'
set style line 3 lt 3 pt 9 ps 2 lw 2 lc rgb '#7777ff'

set for [i=1:3] style arrow i ls i nohead

unset key
plot file using (0):1:(1):($2-$1):($0+1) with vectors as variable,\
     for [i=0:cnt-1] file using (0):1 every ::i::i with points ls (i+1),\
     for [i=0:cnt-1] file using (1):2 every ::i::i with points ls (i+1)
结果是:


还没有试用过您的代码,但它看起来很棒。肯定会回来接受它作为一个答案,只是想先尝试一下。太感谢你了@ilakast示例中的线条样式不是必需的(某些测试的剩余部分)。但我添加了第二个脚本,它在点和线设置方面更灵活。你的脚本很棒,我从中学到了很多东西。在我的问题中我应该更明确一些:每个条件(之前和之后)我有30个数据点,所以我没有考虑线或点的不同形状和颜色。我可以用“pointsize”来操纵点的大小,但我仍在尝试将所有点和线变黑…@ilakast好的,只是想展示一下可能性。如果您需要不同的点大小,甚至可能取决于实际的数据更改,您可以使用
pointsize变量