将密钥放在gnuplot中的多图图形下方 [英] Place key below multiplot graph in gnuplot

查看:50
本文介绍了将密钥放在gnuplot中的多图图形下方的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如标题所示,我想将图例放置在多图图形下方.我只为其中一个图添加了图例,因为所有样式的线型都相同.我遇到的问题是,如果我通过set key below添加关键点,则图本身会调整大小以适合画布中的(大)关键点.我宁愿保持地块的大小.我尝试使用set key inside将关键点添加为多图中的其他图,但是如果关键点太大,则关键点可以与这些图重叠.我正在使用epslatex终端.

As the title suggests I want to place the plot legend below a multiplot graph. I add the legend for just one of the plots because the line styles are the same for all. The problem I encounter is that, if I add the key by set key below, the plots themselves get resized as to fit the (large) key inside the canvas. I would rather want to maintain the size of the plots. I tried adding the key as additional plot in the multiplot with set key inside, but then the key can overlap the plots if it is too large. I am using the epslatex terminal.

推荐答案

这是一种通过一些功能来帮助调整绘图中边距位置的方法:

Here is a way to do it with some functions to help adjust the positions of the margins in the plot:

#!/usr/bin/env gnuplot

### n: change this parameter to equal the number of data sets to be plotted
n = 3
# t: top margin in pixels
t = 75.0
# b: key height in pixels (bottom margin)
b = 300.0
# h: height of output in pixels
h = 150.0*n + t + b

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

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

set title 'Big Key Plot'
set ylabel 'Y Axis'

set multiplot layout (n+1),1
### First plot
# change only plot command here
currentplot = 1
set tmargin at screen top(currentplot,n,h,t,b)
set bmargin at screen bot(currentplot,n,h,t,b)
unset key
unset xtics
plot sin(1*x) title 'Line 1', \
     sin(2*x) title 'Line 2', \
     sin(3*x) title 'Line 3', \
     sin(4*x) title 'Line 4', \
     sin(5*x) title 'Line 5', \
     sin(6*x) title 'Line 6', \
     sin(7*x) title 'Line 7'
### Middle plot
# copy and paste this code to make more middle plots
currentplot = currentplot + 1
set tmargin at screen top(currentplot,n,h,t,b)
set bmargin at screen bot(currentplot,n,h,t,b)
unset title
replot
### Last plot
# change only plot command here
currentplot = currentplot + 1
set tmargin at screen top(currentplot,n,h,t,b)
set bmargin at screen bot(currentplot,n,h,t,b)
set xlabel 'X Axis'
set xtics
replot
### Last (key) plot
set tmargin at screen bot(n,n,h,t,b)
set bmargin at screen 0
set key center center
set border 0
unset tics
unset xlabel
unset ylabel
set yrange [0:1]
plot 2 t 'Line 1', \
     2 t 'Line 2', \
     2 t 'Line 3', \
     2 t 'Line 4', \
     2 t 'Line 5', \
     2 t 'Line 6', \
     2 t 'Line 7'

unset multiplot

结果如下:

您需要手动调整的内容是绘图的数量和底部边距的大小,这是绘制关键点的位置.这些评论通常会指出您必须在哪里进行更改.

The things you have to adjust manually are the number of plots and the size of the bottom margin, which is where the key gets drawn. The comments generally say where you have to change things.

我将密钥单独放在一个绘图中,这样可以很容易地使其他绘图的大小完全相同.在y范围为0到1时绘制数字2,以防止在关键图中显示线条.

I put the key in a plot by itself so that it would be easy to keep the sizes of the other plots the exact same. Plotting the number 2 when the y range is 0 to 1 keeps the lines from showing in the key plot.

这主要基于我的回答此处为什么我所有的情节都令人感动.如果要在图之间留出空隙,可以使用附加的margin参数来调整top()和bot()函数.

This is mostly based on my answer here, which is why I have the plots all touching. You can adjust the top() and bot() functions with an additional margin parameter if you want a gap between the plots.

这篇关于将密钥放在gnuplot中的多图图形下方的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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