Matplotlib如何使用相同的轴规格执行一个或多个子图

我必须为几个机构作图,以显示它们在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'

这是意外的,因为我从herehere认为'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 ...”,这一切似乎都可以正常工作。

wanziang0723 回答:Matplotlib如何使用相同的轴规格执行一个或多个子图

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3141385.html

大家都在问