如何在gnuplot中用x1、y1和x2、y2轴绘制水平条形图?

如何在gnuplot中用x1、y1和x2、y2轴绘制水平条形图?,gnuplot,Gnuplot,我想用Gnuplot创建一个水平条形图,它由2个x轴、2个y轴和2个坐标原点组成。数据集1 x1/y1的坐标原点应位于左上角,数据集2 x2/y2的坐标原点应位于右下角(参见下图) 这在Gnuplot中是可能的吗?如果没有,可以选择使用哪个程序?非常感谢。因为您似乎是一个新的gnuplot用户(但不是新的StackOverflow成员,因为您现在应该知道需要一些代码),所以可能很难根据您的需求调整注释中的链接答案。打印样式将是带有boxxyerror的,选中帮助boxyError,并选中轴分配

我想用Gnuplot创建一个水平条形图,它由2个x轴、2个y轴和2个坐标原点组成。数据集1 x1/y1的坐标原点应位于左上角,数据集2 x2/y2的坐标原点应位于右下角(参见下图)


这在Gnuplot中是可能的吗?如果没有,可以选择使用哪个程序?非常感谢。

因为您似乎是一个新的gnuplot用户(但不是新的StackOverflow成员,因为您现在应该知道需要一些代码),所以可能很难根据您的需求调整注释中的链接答案。打印样式将是带有boxxyerror的
,选中
帮助boxyError
,并选中轴分配的
帮助轴
。 此外,为了让您的数字“可读”,我不知道gnuplot对1000个分隔符有一些通用格式,至少对Windows来说不是这样,但显然是对Linux(请参阅)

检查以下示例:

代码:

### two way horizontal bars (and thousand separators)
reset session

$Data1 <<EOD
USA           1368102
Russland      541353
Australien    403382
China         324068
Polen         222394
Vietnam       199876
Pakistan      176739
Mongolei      119426
Kanada        118270
Indien        38971
Deutschland   36500
Indonesien    27998
Serbien       13074
Brasilien     12587
Rumänien      9640
Kosovo        9262
Argentinien   7300
EOD

$Data2 <<EOD
"Bosnien \\& Herzegowina"   14.0
Thailand                 14.9
Laos                     15.9
Rumänien                 23.6
Bulgarien                30.3
Griechenland             36.1
Serbien                  37.5
Tschechien               39.2
Australien               45.1
Indien                   45.3
USA                      51.7
Polen                    58.6
Indonesien               60.0
Russland                 80.0
Türkei                   85.0
China                    150.0
Deutschland              166.3
EOD

set xrange [220:0]
set xtics nomirror
set x2range [0:2000000]
set x2tics () nomirror  # remove x2tics do it manually later
set yrange [17:-1]
set ytics out
set y2range [17:-1]
set y2tics out nomirror
myBoxWidth = 0.8     # relative boxwidth
yLow(i)  = i - myBoxWidth/2.
yHigh(i) = i + myBoxWidth/2.
unset key
set style fill solid 0.5

# simple workaround for thousand separators (only for integer number strings)
ThousandSep(s) = (_tmp= '', sum [_i=0:strlen(s)-1] (_i%3==0 && _i!=0 ? _tmp="'"._tmp : 0, \
                  _tmp=s[strlen(s)-_i:strlen(s)-_i]._tmp, 0), _tmp)

# manual x2tics with thousand separators
do for [i=0:1500000:300000] {
    myX2tic = ThousandSep(sprintf('%.0f',i))
    set x2tics add (myX2tic i)
}

set label 1 at second 600000, graph 0.7 "Bestand"            left font ",20"
set label 2 at first     140, graph 0.4 "Jahres-\nförderung" left font ",20"

plot $Data1 u (0):0:(0):2:(yLow($0)):(yHigh($0)):ytic(1) axes x2y1 w boxxy lc rgb 0x8ffd8c, \
     '' u 2:0:(ThousandSep(strcol(2))) axes x2y1 w labels left offset 1,0, \
     $Data2 u (0):0:(0):2:(yLow($0)):(yHigh($0)):y2tic(1) axes x1y2 w boxxy lc rgb 0x8d7bde, \
     '' u 2:0:2 axes x1y2 w labels right offset -1,0, \
### end of code
####双向水平杆(和千个分离器)
重置会话

$Data1你看到了吗?您是否尝试过根据自己的需要采用它?当然,这在gnuplot中是可能的!到目前为止你试过什么?您的输入数据是什么样子的?看起来像一个复制品或至少非常相似。请展示一些代码和一些自己的努力,我们将能够帮助您。这两个示例仅显示数据集为x1和y1以及单个坐标原点的条形图。然而,我们正在寻找一种解决方案,将两个数据集绘制成一行。在图中的上述示例中,例如,第一行数据集x1=1.368.102 y1=USA,右侧数据集x2=14.0和y2=Bosnien@ChristianHähnlein你的问题解决了吗?如果是,请检查答案是否被接受。如有任何反馈,将不胜感激。