我想画 60 个彼此相邻的盒子(不重叠)。宽度应根据具体列,高度应根据具体列,以及蚂蚁标题的颜色。作为标题,我只想将所有框编号为 1 到 60。
请问我该怎么做?
(我知道,第三列会自动生成特定宽度,但是框是重叠的,我不会因为重新计算 x 位置而感到高兴。我也经历过使用 rgb 变量设置颜色。但是,如何一次完成所有这些事情,我做不知道。非常感谢您的建议)
我建议您使用 ImageMagick 来完成此操作。然而,在 gnuplot 中你可以这样做:
set object 1 rect from x1,y1 to x2,y2
set label 1 at x3,y3 "yourlabel" front center
据我了解,您有一个数据文件,其中包含标签、宽度、高度和颜色列。 虽然绘图样式
with boxes
提供 2 列和 3 列语法:
2 columns: x y 3 columns: x y x_width
但是,这样(正如您所注意到的),您将无法避免重叠。
您可以使用绘图样式
with boxxyerror
。有4列和6列两种选择:(勾选help boxxyerror
)
4 columns: x y xdelta ydelta 6 columns: x y xlow xhigh ylow yhigh
据我了解,对于可变颜色(附加列),您必须使用 6 列语法,否则 gnuplot 可能会感到困惑。
避免框重叠的“技巧”就是简单地将
x0
中的 x 坐标相加。
数据:
SO8742082.dat
(具有一些随机的宽度、高度和颜色)
# width height color
1 1.25559 90.5915 0xbc2d76
2 1.87402 40.3925 0xa10862
3 1.12711 60.5378 0x0247e8
4 2.95355 105.314 0x6b8fee
5 1.75121 103.800 0xd0e30b
6 1.61134 15.6505 0x42e77e
7 1.13001 100.190 0x580410
8 1.15918 27.1352 0x963b2e
9 2.68129 96.0740 0xf951f4
10 1.57321 72.9696 0x4afd27
11 1.78742 41.2944 0xea1933
12 1.39995 61.9502 0xcc8750
13 2.75575 96.4659 0xf328e8
14 2.30559 64.6213 0x549178
15 2.57415 62.2784 0xe5af89
16 2.54712 20.2026 0x4eeeb4
17 2.18039 105.251 0x9dbdc9
18 1.66738 51.9178 0xe3aa7e
19 1.11258 84.3438 0xafbb7e
20 1.26511 75.0783 0xb8f302
脚本:(适用于 gnuplot>=4.6.0,2012 年 3 月)
通过一些繁琐的解决方法,您可能可以让它在早期版本中运行(可能是 4.4.0 或 4.4.4,无论使用什么版本的 OP)。
### plot boxes with variable width, height, color and label
reset
FILE = "SO8742082.dat"
set xrange[*:*]
set yrange[0:*]
set xtics out
set style fill solid 0.5 noborder
set key noautotitle
plot x0=0 FILE u 2:3:(x0):(x0=x0+$2):(0):3:4 w boxxy lc rgb var, \
x0=0 '' u (x0+$2/2):(x0=x0+$2,$3):1 w labels offset 0,1 center
### end of script
结果: