【问题标题】:Four graphs in one picture一张图四张图
【发布时间】:2019-08-31 17:51:36
【问题描述】:

请问这张图有什么问题?我想在一张图片中绘制四个图表。它显示两个图形。我想要一个有 3 个标题的图例,因为使用了三种颜色。然后我不知道如何写两个标题 - 一个用于左侧图表,一个用于右侧图表。

我想要 4 个不同的 2x2 绘图 - 我在脚本中有 4 个绘图。我有很多错误。

set tics out nomirror
set encoding iso_8859_1
unset xtics
set ylabel "{/:Italic F} [a. u.]" font "Segoe UI,12" offset 2,0
set ytics nomirror font "Segoe UI,12"
set lmargin screen 0.2 #levý prostor vedle graf
set rmargin screen 0.9 #pravý prostor vedle grafu
set multiplot layout 2,2
set bmargin screen 0.40
set key Left reverse out horiz
set format y "%.2f"
set key tc variable
set xrange [4272:4500]
set yrange [0.7:1.02]
set title "Title 1" font "Segoe UI,12"
set title "Title 2" font "Segoe UI,12"
plot \
x title "Fitted" with lines linecolor rgb "red" lw 1.5,\
x title "Measured" with lines linecolor rgb "black" lw 1.5
unset ytics
set y2tics
set link y2
unset ylabel
set y2label "{/:Italic F} [a. u.]" font "Segoe UI,12" offset 1,0
set tmargin screen 0.4 #posun horní čáry dolního graf
set bmargin screen 0.15 #posun dolní čáry dolního graf
unset key
set tics out nomirror
set xlabel "{/:Italic {/Symbol l}} ({\305})" font "Segoe UI,12"
set xrange [4272:4500]
set yrange [-0.05:0.03]
plot x title "Measured - fitted" with lines linecolor rgb "navy" lw 1.5 

set margin
set margin
plot \
x title "Fitted" with lines linecolor rgb "red" lw 1.5,\
x title "Measured" with lines linecolor rgb "black" lw 1.5
set margin
set margin
plot x title "Measured - fitted" with lines linecolor rgb "navy" lw 1.5 

【问题讨论】:

  • 你期待什么?您正在绘制 4 次,但只有 2 次具有不同的边距。所以 3 个地块是相同的并且彼此重叠。你能描述甚至更好地画出你真正想要实现的目标吗?也许 2x2 布局中有 4 个地块?我不清楚。顺便说一句,你必须set title ... 绘图命令之前。
  • 我编辑了我的问题。

标签: gnuplot


【解决方案1】:

我建议你看看 gnuplot 在线演示集合中的情节,特别是这个:custom_key.dem

该演示说明了通过set multiplot layout 命令将单独的图自动放置到网格中,还说明了单个图例的构造,其中包含来自组成图的标题和信息。在线副本包括生成该图的命令的副本。如果您无法将该示例适应您自己的数据,请返回并展示您的尝试,以便人们提出进一步的建议。

【讨论】:

    【解决方案2】:

    我可以看到您使用了symbol 字体中的一些符号。 如果需要,请使用set encoding utf8 选项并直接写入符号。 您也可以将字体设置为 terminal 选项。 例如:set terminal pngcairo size 800,600 font "Segoe UI,8" enhanced

    为了帮助您理解margins screen 的工作原理,请查看此图。 此网格将屏幕(terminal 命令上的size 800,600)每 10%(0.1 个屏幕单位)划分。



    为了使图形具有相同的大小并相互对齐,我们必须手动设置各个图形的边距。 为了使它更容易,我使用了macros 命令。 下面是如何使用multiplot 创建2×2 图表的完整示例。

    reset
    set encoding utf8                                               # Encoding
    set terminal pngcairo size 800,600 font "Segoe UI,8" enhanced   # Terminal settings
    set output "multiplot_2x2.png"                                  # Output file name
    
    set grid ls -1 lc "gray"        # grid lines
    set tics out nomirror           # tics marks
    
    # Line styles
    set style line 1 lc "#e41a1c"   # red
    set style line 2 lc "#377eb8"   # blue
    set style line 3 lc "#4daf4a"   # green
    set style line 4 lc "#984ea3"   # purple
    
    # Margins for each row and column
    Row1 = "set tmargin screen 0.90; set bmargin screen 0.56"   # Top and bottom margins
    Row2 = "set tmargin screen 0.42; set bmargin screen 0.08"
    Col1 = "set lmargin screen 0.08; set rmargin screen 0.48"   # Left and right margins
    Col2 = "set lmargin screen 0.57; set rmargin screen 0.97"
    
    # Multiplot option with main title
    set multiplot layout 2,2 rowsfirst title "{/:Bold=12 Multiplot 2×2}"
    # -------------------------------------------------------------------
    @Row1; @Col1                            # Calling the macros
    set title "{/:Bold=10 Row 1, Col 1}"    # Title for plot
    set xrange [-10:10]                     # x-range
    set yrange [0:50]                       # y-range
    set xtics 2                             # Increment for x-tics
    set ytics 10                            # Increment for y-tics
    set xlabel "Crazy distance / Å"         # x-label
    set ylabel "Crazy values / a.u."        # y-label
    plot x**2 w l ls 1 title "x^{2}"        # The plot
    # -------------------------------------------------------------------
    @Row1; @Col2
    set title "{/:Bold=10 Row 1, Col 2}"
    set xrange [-15:20]
    set yrange [-4000:8000]
    set xtics 5
    set ytics 2000
    set xlabel "Crazy temperature / °C"
    set ylabel "Crazy pressure / Pa"
    plot x**3 w l ls 2 title "x^{3}"
    # -------------------------------------------------------------------
    @Row2; @Col1
    set title "{/:Bold=10 Row 2, Col 1}"
    set xrange [-15:15]
    set yrange [-0.4:1.2]
    set xtics 5
    set ytics 0.2
    set xlabel "Crazy energy / kJ"
    set ylabel "Crazy volume / m^{3}"
    plot sin(x)/x w l ls 3
    # -------------------------------------------------------------------
    @Row2; @Col2
    set title "{/:Bold=10 Row 2, Col 2}"
    set xrange [0:14]
    set yrange [-10:15]
    set xtics 2
    set ytics 5
    set xlabel "Crazy value {/:Italic N}_{A} / 10^{23}"
    set ylabel "Crazy property / cd sr kg^{−1} m^{−2} s^{3}"
    plot cos(x)*x w l ls 4
    # -------------------------------------------------------------------
    unset multiplot
    

    结果:

    使用@Ethan's answer 上的方法可以达到完全相同的结果,优势在于忽略macros 使用,只需编写:

    set multiplot \
        layout 2,2 rowsfirst \
        title "{/:Bold=12 Multiplot 2×2}" \
        margins screen 0.08,0.97,0.08,0.90 \
        spacing screen 0.09,0.14
    

    【讨论】:

    • 谢谢,是否可以在...处使用网格设置键?
    • 是的!输入help key 了解更多详情。另请参阅key placement
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2021-12-14
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多