我必须为几个机构作图,以显示它们在1个或多个接收者面前的表现。子图似乎是正确的方法,但似乎每个子图都需要我指定轴参数,即使它们是相同的。因此,我创建了一小段代码,创建带下标的轴对象,除非只有一个接收者,否则它可以正常工作。
num_plots = len(receivers)
fig,axes = plt.subplots(num_plots,1,figsize=(50,150),squeeze=False)
minor_ticks = md.MinuteLocator(byminute=[0,15,30,45],interval=1)
hours = md.HourLocator(interval=1)
for i,receiver in enumerate(receivers):
axes[i].xaxis.set_minor_locator(minor_ticks)
axes[i].xaxis.set_major_locator(hours)
axes[i].xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
axes[i].xaxis.get_offset_text().set_fontsize(24)
axes[i].yaxis.get_offset_text().set_fontsize(24)
axes[i].grid(b=True,which='major',color='b',linestyle='-',alpha=0.6)
axes[i].grid(b=True,which='minor',color='r',linestyle='--',alpha=0.3)
axes[i].tick_params(axis="both",labelsize=30)
axes[i].set_ylabel('Bilateral Risk/5 min',fontsize=40,weight='bold')
axes[i].set_xlabel('Time',weight='bold')
如果只有一个子图(基本上是“图,轴= plt.subplots(1,1,无花果大小(50,150),squeeze = False)”),那么我得到以下错误:
Traceback (most recent call last):
.
.
.
File "/Users/xxx/risk_scoring.py",line 276,in plot_result
axes[i].xaxis.set_minor_locator(minor_ticks)
AttributeError: 'numpy.ndarray' object has no attribute 'xaxis'
这是意外的,因为我从here和here认为'squeeze ='将允许1x1子图。是什么导致了错误,或者有更好的方法来做到这一点?
跟进并回答:
采用前面的代码并替换接收者= [“ a”,“ b”,“ c”,“ d”],然后相同,但只有一个接收者全部为'squeeze = True'(默认值):
0
1
2
3
[<matplotlib.axes._subplots.AxesSubplot object at 0x7f865c94b610>
<matplotlib.axes._subplots.AxesSubplot object at 0x7f865b6f3750>
<matplotlib.axes._subplots.AxesSubplot object at 0x7f865b727410>
<matplotlib.axes._subplots.AxesSubplot object at 0x7f865bd67790>]
和
Traceback (most recent call last):
File "main.py",line 186,in <module>
axes[i].xaxis.set_minor_locator(minor_ticks)
TypeError: 'AxesSubplot' object is not subscriptable
原因是,在第一种情况下,“轴”是一个数组,而在第二种情况下,它只是一个对象“ AxesSubplot(0.125,0.11; 0.775x0.77)”。
如果您进行第二种情况(1个接收者)但设置为'squeeze = false',则会得到:
[[<matplotlib.axes._subplots.AxesSubplot object at 0x7f2e447a7790>]]
0
Traceback (most recent call last):
File "main.py",in <module>
axes[i].xaxis.set_minor_locator(minor_ticks)
AttributeError: 'numpy.ndarray' object has no attribute 'xaxis'
那是一个二维数组。因此,我将所有引用都更改为带有二维索引的“ axes”,例如“ axes [i] [0] .set ...”,这一切似乎都可以正常工作。