복붙노트

[PYTHON] matplotlib에서 색상 막대를 추가하는 동안 AttributeError 발생

PYTHON

matplotlib에서 색상 막대를 추가하는 동안 AttributeError 발생

다음 코드는 Python 2.5.4에서 실행되지 않습니다.

from matplotlib import pylab as pl
import numpy as np

data = np.random.rand(6,6)
fig = pl.figure(1)
fig.clf()
ax = fig.add_subplot(1,1,1)
ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
pl.colorbar()

pl.show()

오류 메시지는 다음과 같습니다.

C:\temp>python z.py
Traceback (most recent call last):
  File "z.py", line 10, in <module>
    pl.colorbar()
  File "C:\Python25\lib\site-packages\matplotlib\pyplot.py", line 1369, in colorbar
    ret = gcf().colorbar(mappable, cax = cax, ax=ax, **kw)
  File "C:\Python25\lib\site-packages\matplotlib\figure.py", line 1046, in colorbar
    cb = cbar.Colorbar(cax, mappable, **kw)
  File "C:\Python25\lib\site-packages\matplotlib\colorbar.py", line 622, in __init__
    mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax
AttributeError: 'NoneType' object has no attribute 'autoscale_None'

이 코드에 어떻게 컬러 바를 추가 할 수 있습니까?

다음은 통역사 정보입니다.

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

해결법

  1. ==============================

    1.참고 : 파이썬 2.6.2를 사용하고 있습니다. 코드에서 동일한 오류가 발생했으며 다음과 같은 수정으로 문제가 해결되었습니다.

    참고 : 파이썬 2.6.2를 사용하고 있습니다. 코드에서 동일한 오류가 발생했으며 다음과 같은 수정으로 문제가 해결되었습니다.

    다음 색상 막대 예제를 읽었습니다. http://matplotlib.sourceforge.net/examples/pylab_examples/colorbar_tick_labelling_demo.html

    from matplotlib import pylab as pl
    import numpy as np
    
    data = np.random.rand(6,6)
    fig = pl.figure(1)
    fig.clf()
    ax = fig.add_subplot(1,1,1)
    img = ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
    fig.colorbar(img)
    
    pl.show()
    

    당신의 예제가 왜 작동하지 않았는지 확실하지 않습니다. matplotlib에 익숙하지 않습니다.

  2. ==============================

    2.(이것은 아주 오래된 질문입니다.)이 문제가 나타나는 이유는 스테이트 머신 (matplotlib.pyplot)을 축에 이미지를 추가하는 OO 방식과 혼합했기 때문입니다.

    (이것은 아주 오래된 질문입니다.)이 문제가 나타나는 이유는 스테이트 머신 (matplotlib.pyplot)을 축에 이미지를 추가하는 OO 방식과 혼합했기 때문입니다.

    plt.imshow 함수는 단지 하나의 미묘하게 다른 방식으로 ax.imshow 메소드와 다릅니다. 메서드 ax.imshow :

    함수 plt.imshow :

    ax.imshow 메소드로 plt.colorbar (모든 극단적 인 경우를 제외하고는)을 사용할 수있게하려면 반환 된 이미지 (ScalarMappable의 인스턴스)를 다음과 같이 전달해야합니다. 첫 번째 인수로 plt.colorbar :

    plt.imshow(image_file)
    plt.colorbar()
    

    상태 머신을 사용하지 않고 동일하다 :

    img = ax.imshow(image_file)
    plt.colorbar(img, ax=ax)
    

    ax가 pyplot의 현재 축이라면 kwarg ax = ax는 필요하지 않습니다.

  3. ==============================

    3.튜토리얼에서이 문제에 대한 또 다른 해결책을 찾았습니다.

    튜토리얼에서이 문제에 대한 또 다른 해결책을 찾았습니다.

    아래 코드는 plt.imshow () 메소드에서 잘 작동합니다.

    def colorbar(Mappable, Orientation='vertical', Extend='both'):
        Ax = Mappable.axes
        fig = Ax.figure
        divider = make_axes_locatable(Ax)
        Cax = divider.append_axes("right", size="5%", pad=0.05)
        return fig.colorbar(
            mappable=Mappable, 
            cax=Cax,
            use_gridspec=True, 
            extend=Extend,  # mostra um colorbar full resolution de z
            orientation=Orientation
        )
    
    fig, ax = plt.subplots(ncols=2)
    
    img1 = ax[0].imshow(data)
    colorbar(img1)
    
    img2 = ax[1].imshow(-data)
    colorbar(img2)
    
    fig.tight_layout(h_pad=1)
    plt.show()
    

    다른 플로팅 방법과 잘 작동하지 않을 수 있습니다. 예를 들어 Geopandas Geodataframe 플롯에서는 작동하지 않습니다.

  4. ==============================

    4.코드에 다음 줄을 추가 / 편집하십시오.

    코드에 다음 줄을 추가 / 편집하십시오.

    plot = ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
    pl.colorbar(plot)
    
  5. from https://stackoverflow.com/questions/2643953/attributeerror-while-adding-colorbar-in-matplotlib by cc-by-sa and MIT license