Gnuplot:设置颜色框的固定宽度

Gnuplot:设置颜色框的固定宽度,gnuplot,Gnuplot,我正在使用gnuplot将一些矩阵文件绘制为热图。这些矩阵可以是水平(矩阵高度低于其宽度)或垂直(矩阵高度高于其宽度) 除了彩盒,一切都很好。我已经设置了设置了大小比-1,得到了一个长宽比为1:1的方形热图。此命令可拉伸或收缩图形。但它也会拉伸或收缩颜色框 我希望我的颜色框有一个固定的宽度,因为我的一些矩阵文件的宽度非常小-这会导致颜色框非常薄。我已尝试手动设置颜色框的宽度。但是,如果不手动设置其原点和完整大小,这也是不可能的 示例 水平: unset key set cbrange [0:5]

我正在使用gnuplot将一些矩阵文件绘制为热图。这些矩阵可以是水平(矩阵高度低于其宽度)或垂直(矩阵高度高于其宽度)

除了彩盒,一切都很好。我已经设置了
设置了大小比-1
,得到了一个长宽比为1:1的方形热图。此命令可拉伸或收缩图形。但它也会拉伸或收缩颜色框

我希望我的颜色框有一个固定的宽度,因为我的一些矩阵文件的宽度非常小-这会导致颜色框非常薄。我已尝试手动设置颜色框的宽度。但是,如果不手动设置其原点和完整大小,这也是不可能的

示例

水平:

unset key
set cbrange [0:5]
set xrange [0:10]
set yrange [0:5]
set size ratio -1
set cbtics out nomirror
$map1 << EOD
5 4 3 1 0 5 4 3 1 0
2 2 0 0 1 2 2 0 0 1
0 0 0 1 0 0 0 0 1 0
0 0 0 2 3 0 0 0 2 3
0 1 2 4 3 2 2 0 0 1
EOD
plot '$map1' using ($1+.5):($2+.5):($3) matrix with image
unset键
设置cbrange[0:5]
设置xrange[0:10]
设置Y范围[0:5]
设置大小比率-1
将cbtics设置为默认错误

$map1@user8153为我的问题提供了一个很好的解决方案。对于我给出的例子来说,它很有魅力。但我不得不稍微改变一下他的命令。否则它将无法处理我的实际输入数据:

# [...]
cbwidth = 0.034
rightmargin = 0.875
set colorbox user origin graph 1, graph 0 size cbwidth, graph 1
set rmargin at screen rightmargin
# [...]
这将绘制一个旁边有一个颜色框的图形(图形窗口和颜色框之间没有任何空间-我们将在稍后修复)。colorboxs宽度为输出宽度的3.4%(使用png或pngcairo、svg或eps等术语时…)

我更喜欢在图形和颜色框之间留出一点空间。我的颜色框的原点(位置)是
图1,图0
。此位置等于图形窗口的右下角1表示此窗口的100%。所以,如果我们想增加一些额外的空间,我们只需要增加这个百分比@用户8153决定添加10%的额外空间=
原始图1.1,图0
(查看他的评论-我将
前0
更改为
图0
)。不幸的是,在这种情况下,我们不能设置静态百分比,因为这100%指的是图形窗口(而不是画布宽度-分别是孔打印图像),并且图形窗口的宽度随矩阵纵横比的变化而变化。因此,您必须根据图形窗口的实际宽度每次调整此值

要自动完成此操作,我建议手动将终端的大小设置为高于640x480的值(在这种情况下,1200x1200,裁剪将剪切空白):

之后,您可以自由地计算颜色框的x位置。使用gnuplots if/else或使用另一种语言(在我的例子中是typescript,因为我是通过node.js-gnuplot-wrapper调用gnuplot的,但逻辑是相同的):

当然,您不应该忘记,XTIC和ytics、x轴和y轴的标签以及标题都需要一些空间。上面的算法中不包括这些。也许有人已经有了一个更好的解决方案,关于如何获得真正的图形窗口宽度。获得该值后,可以修改颜色框的“原点”命令部分:

发件人:
set colorbox用户原点图1,图0大小cbwidth,图1


至:
set colorbox用户原点图cbPosX、图0大小cbwidth、图1

是否可以同时指定原点和整个大小?例如,
set colorbox user origin graph 1.1,first 0 size first 1,graph 1
生成一个与一个像素一样宽、与整个图形一样高的色盒。在这种情况下,您可能需要设置正确的边距,以便为颜色栏留出一点空间。谢谢@user8153!你帮了我很大的忙!我决定将
set colorbox user origin graph 1、graph 0 size cbwidth、graph 1
set rmargin(屏幕0.875
)结合使用
cbwith
是具有静态宽度的变量。明天我会给出一个完整的答案,包括所有细节。
# [...]
cbwidth = 0.034
rightmargin = 0.875
set colorbox user origin graph 1, graph 0 size cbwidth, graph 1
set rmargin at screen rightmargin
# [...]
set term pngcairo size 1200,1200 crop
const size = 1200             // canvas size (width and height): 1200px 
const cbspace = 0.017;        // prefered space between colorbox and window: 20px / 1200px
const rmargin = 0.875;        // right margin next to the graphs window 
let graphWindowWidth: number; // real width of the graphs window

if (matrixHeight > matrixWidth) {
    graphWindowWidth = (matrixWidth / matrixHeight) * size;
} else {
    graphWindowWidth = size * rmargin;
}
let cbPosX = (cbspace * size + graphWidth) / graphWidth;