Gnuplot:如何绘制相反的条形图或金字塔条形图
Gnuplot: How to draw an opposing bar plot or pyramid bar diagram
是否可以在 gnuplot 中使用两个正 y 轴?这只是问题的一个简单示例。
plot.gp:
reset
set style fill solid 1
set boxwidth 0.8 relative
plot 'data1.dat' index 1 using 1:2 with boxes title 'A' ,\
'' index 2 using 1:(-) with boxes title 'B'
我想在 plot.gp 的最后一行使用 1:2
而不是 1:(-)
。
data1.dat:
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
发件人:
收件人:
这是一个只有一个图的解决方案,但是,y 轴的控制点位于不同的一侧。
也许有一些简单的方法可以让他们站在同一边。
代码:
### two "positive" y-axes
reset session
$Data <<EOD
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
EOD
set style fill transparent solid 0.5
set boxwidth 0.8 relative
set yrange[-0.3:0.3]
set ytics 0,0.1
set mytics 2
set y2range[0.3:-0.3]
set y2tics 0,0.1
set my2tics 2
set y2tics mirror
set xzeroaxis ls -1
plot $Data u 1:2 index 0 axis x1y1 w boxes title 'A' ,\
'' u 1:2 index 1 axis x1y2 w boxes title 'B'
### end of code
结果:
加法:
这是第二个建议,所有 ytic 标签都在一侧。
一个小缺点是它不是自动缩放的,您必须“手动”设置范围和步长。
它正在使用命令 evaluate
(检查 help evaluate
)。并且 real()
(检查 help real
)以避免 gnuplot 的整数除法,以防除法的两个数字可能是整数。
代码:
### y-axis with two "positive" directions
reset session
$Data <<EOD
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
EOD
set style fill transparent solid 0.5
set boxwidth 0.8 relative
set xzeroaxis ls -1
Max = 0.3
Steps = 3
set yrange[-Max:Max]
set ytics () # remove all tics
do for [i=-Steps:Steps] {
myTic = sprintf('set ytics add ("%g" %g)',abs(real(i)/Steps*Max),real(i)/Steps*Max)
eval(myTic)
}
plot $Data u 1:2 index 0 axis x1y1 w boxes lc 3 title 'A' ,\
'' u 1:(-) index 1 axis x1y1 w boxes lc 4 title 'B'
### end of code
结果:
与来自 theoz 的答案相同,除了 y2 标签移动到图的左侧并且 set link y2
命令用于概括轴反转。
您可以调整偏移量 graph -1.03
以叠加“0”标签,然后通过将 y2 坐标范围更改为 set y2tics 0.1,0.1
来删除重复的“0”标签。
$Data <<EOD
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
EOD
set style fill transparent solid 0.5
set boxwidth 0.8 relative
set xzeroaxis ls -1
set yrange[-0.3:0.3]
set ytics 0,0.1
set mytics 2
# Set y2 axis to exact mirror of y1
# Shift tic labels to the left and use right-justified text
set link y2 via -y inv -y
set y2tics 0,0.1
set y2tics offset graph -1.03 right
plot $Data u 1:2 index 0 axis x1y1 w boxes title 'A' ,\
'' u 1:2 index 1 axis x1y2 w boxes title 'B'
是否可以在 gnuplot 中使用两个正 y 轴?这只是问题的一个简单示例。
plot.gp:
reset
set style fill solid 1
set boxwidth 0.8 relative
plot 'data1.dat' index 1 using 1:2 with boxes title 'A' ,\
'' index 2 using 1:(-) with boxes title 'B'
我想在 plot.gp 的最后一行使用 1:2
而不是 1:(-)
。
data1.dat:
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
发件人:
收件人:
这是一个只有一个图的解决方案,但是,y 轴的控制点位于不同的一侧。 也许有一些简单的方法可以让他们站在同一边。
代码:
### two "positive" y-axes
reset session
$Data <<EOD
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
EOD
set style fill transparent solid 0.5
set boxwidth 0.8 relative
set yrange[-0.3:0.3]
set ytics 0,0.1
set mytics 2
set y2range[0.3:-0.3]
set y2tics 0,0.1
set my2tics 2
set y2tics mirror
set xzeroaxis ls -1
plot $Data u 1:2 index 0 axis x1y1 w boxes title 'A' ,\
'' u 1:2 index 1 axis x1y2 w boxes title 'B'
### end of code
结果:
加法:
这是第二个建议,所有 ytic 标签都在一侧。
一个小缺点是它不是自动缩放的,您必须“手动”设置范围和步长。
它正在使用命令 evaluate
(检查 help evaluate
)。并且 real()
(检查 help real
)以避免 gnuplot 的整数除法,以防除法的两个数字可能是整数。
代码:
### y-axis with two "positive" directions
reset session
$Data <<EOD
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
EOD
set style fill transparent solid 0.5
set boxwidth 0.8 relative
set xzeroaxis ls -1
Max = 0.3
Steps = 3
set yrange[-Max:Max]
set ytics () # remove all tics
do for [i=-Steps:Steps] {
myTic = sprintf('set ytics add ("%g" %g)',abs(real(i)/Steps*Max),real(i)/Steps*Max)
eval(myTic)
}
plot $Data u 1:2 index 0 axis x1y1 w boxes lc 3 title 'A' ,\
'' u 1:(-) index 1 axis x1y1 w boxes lc 4 title 'B'
### end of code
结果:
与来自 theoz 的答案相同,除了 y2 标签移动到图的左侧并且 set link y2
命令用于概括轴反转。
您可以调整偏移量 graph -1.03
以叠加“0”标签,然后通过将 y2 坐标范围更改为 set y2tics 0.1,0.1
来删除重复的“0”标签。
$Data <<EOD
0.12 0.024
0.15 0.132
0.18 0.241
0.22 0.136
0.12 0.039
0.15 0.219
0.18 0.197
0.22 0.155
EOD
set style fill transparent solid 0.5
set boxwidth 0.8 relative
set xzeroaxis ls -1
set yrange[-0.3:0.3]
set ytics 0,0.1
set mytics 2
# Set y2 axis to exact mirror of y1
# Shift tic labels to the left and use right-justified text
set link y2 via -y inv -y
set y2tics 0,0.1
set y2tics offset graph -1.03 right
plot $Data u 1:2 index 0 axis x1y1 w boxes title 'A' ,\
'' u 1:2 index 1 axis x1y2 w boxes title 'B'