0

我正在绘制一些数据。一个地块在另一个地块之下。顶部图有两个系列,它们共享 x 轴,但 y 轴上的比例不同。底部图有两个系列,具有相同的 x 和 y 轴刻度。

这是我希望制作时的图像:

在此处输入图像描述

最上面的情节是我希望它看起来的样子。然而,我正在努力让数据绘制在我的第二个图上。我的代码如下所示:

fig, axs = plt.subplots(2, 1, figsize=(11.69, 8.27))

color1 = 'red'
color2 = 'blue'
axs[0].set_title("Energy of an Alpha Particle Against Distance Through a {} Target".format(Sy_t), fontsize=15)
axs[0].set_ylabel("Alpha Energy (MeV)", fontsize=10, color=color1)
axs[0].set_xlabel("Distance travelled through target (cm)", fontsize=10)
axs[0].tick_params(axis='y', colors=color1)
axs[0].grid(lw=0.2)
axs[0].plot(dc['sum'], dc.index, marker='+', lw=0.2, color=color1)
axs[1] = axs[0].twinx()

#ax2.set_title("Stopping Power Against Distance through a {} Target".format(Sy_t), fontsize=15)
axs[1].set_ylabel("dE/dx (MeV/cm)", fontsize=10, color=color2)
axs[1].set_xlabel("Distance travelled through target (cm)", fontsize=10)
axs[1].plot(dc['sum'], dc['dydsum'], marker='+', lw=0.2, color=color2)
axs[1].tick_params(axis='y', colors=color2)
axs[1].grid(lw=0.2)
fig.tight_layout()

axs[2].set_title('Cross-Section Plots overall and for the product')
axs[2].set_ylabel('Cross-Section (mb)')
axs[2].set_xlabel('Energy (MeV)')
axs[2].plot(Sig_sum)
axs[2].plot(Sig_prod)
plt.show()

我得到的一个错误是:

IndexError: index 2 is out of bounds for axis 0 with size 2 

顶部图的数据来自数据框。底部的两个系列具有相同的 x 和 y 比例,其中一个日期框如下所示:

1        0.001591
2        0.773360
3       28.536766
4      150.651937
5      329.797010
6      492.450824
7      608.765402
8      697.143340
9      772.593010
10     842.011451
11     900.617395
12     947.129704
13     984.270901
14    1015.312625
15    1041.436808
16    1062.700328
17    1079.105564
18    1091.244022
19    1100.138834
20    1107.206041
21    1113.259507
22    1118.579315
23    1123.164236
24    1127.014592
25    1129.558439
26    1130.390331
27    1129.917985
28    1128.069117
29    1125.184650
30    1121.497063
31    1117.341899
32    1112.556194
33    1108.158215
34    1103.083775
35    1097.872010
36    1092.889581
37    1087.439353
38    1081.922461
39    1076.163363
40    1070.421916

当我尝试自己绘制下图时,它的图形如下所示: 在此处输入图像描述

4

1 回答 1

1

你可能会从所发生的事情的一些分解中受益。一开始,你打电话

fig, axs = plt.subplots(2, 1)

它将图形分成两个子图(从技术上讲是axes.Axes类)。axs然后是一个包含两个坐标区对象的数组。

稍后,你做

axs[1] = axs[0].twinx()

它做了两件事:它创建第三个axes.Axes对象(在顶部子图的顶部)并更改 的值axs[1]以引用该对象而不是底部子图。然后,您没有(简单的)方法可以访问底部子图(并且尝试访问越界索引axs会使错误立即发生)。

可能的修复:

fig, axs = plt.subplots(2, 1, ...)
topleftax = axs[0]
toprightax = axs[0].twinx()
bottomax = axs[1]
# and replace in the code that comes thereafter:
# axs[0] -> topleftax
# axs[1] -> toprightax
# axs[2] -> bottomax
于 2019-05-15T15:58:53.817 回答