2013-11-18 3 views
1

Я собираюсь создать корреляционную матрицу. создание матрицы отлично работает, пока я не попытаюсь добавить цветную панель.Ошибка при попытке добавить цветную панель

Это мой текущий код:

def corr_matrix(data): 
    '''function to find the mean for days''' 

    data=data.ix[:,1:].corr(method='pearson') 
    row_lab=[] 
    col_lab=[] 

    for i in data: 
     row_lab.append(i) 
     col_lab.append(i) 
    column_labels = col_lab 
    row_labels = row_lab 
    data=np.round(data.corr(method='pearson').abs(), decimals=2) 
    data=np.array(data) 
    fig, ax = plt.subplots() 

    plt.axis('tight') 
    heatmap = ax.pcolor(data, cmap='RdPu'),     
    plt.colorbar(mappable=heatmap) # put the major ticks at the middle of each cell 
    ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False) 
    ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False) 

    ax.invert_yaxis() 
    ax.xaxis.tick_top()  
    ax.set_xticklabels(row_labels, minor=False, rotation=90) 
    ax.set_yticklabels(column_labels, minor=False) 
    plt.show() 

Я попытался plt.colorbar(). Это тоже не работает. Любая помощь будет большой!

Я посмотрел на этот вопрос: AttributeError while adding colorbar in matplotlib но ответы, похоже, не работает :(

Это моя ошибка:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Users\AClayton\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 538, in runfile 
    execfile(filename, namespace) 
    File "C:/Users/AClayton/Desktop/HData/correlation.py", line 152, in <module> 
    cmat=corr_matrix(all_data) 
    File "C:/Users/AClayton/Desktop/HData/correlation.py", line 88, in corr_matrix 
    plt.colorbar(mappable=heatmap) # put the major ticks at the middle of each cell 
    File "C:\Users\AClayton\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\matplotlib\pyplot.py", line 2121, in colorbar 
    ret = gcf().colorbar(mappable, cax = cax, ax=ax, **kw) 
    File "C:\Users\AClayton\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\matplotlib\figure.py", line 1451, in colorbar 
    cb = cbar.colorbar_factory(cax, mappable, **kw) 
    File "C:\Users\AClayton\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\matplotlib\colorbar.py", line 1274, in colorbar_factory 
    cb = Colorbar(cax, mappable, **kwargs) 
    File "C:\Users\AClayton\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\matplotlib\colorbar.py", line 852, in __init__ 
    mappable.autoscale_None() 
AttributeError: 'tuple' object has no attribute 'autoscale_None' 

EDIIT all_data заменены на данные, как это было опечатка

data=pd.DataFrame(np.random.rand(10,10)) производит ошибку

+0

что такое тип данных? массив ? матрица numpy?, DataFrame? – joaquin

+1

больше, откуда приходит 'all_data'? Пожалуйста, напишите ** минимальный ** код **, который может быть выполнен **, и ** воспроизводит ** вашу проблему. – joaquin

+0

это dataframe, data = pd.DataFrame (np.random.rand (10,10)) дает тот же результат –

ответ

2

Это ответ, которым я не горжусь, и, вероятно, вы будете чувствовать то же самое о своем вопросе.
Здесь я иду:

Ошибка

AttributeError: 'tuple' object has no attribute 'autoscale_None' 

вызвано

mappable.autoscale_None() 

говорит вам, что Heatmap в

plt.colorbar(mappable=heatmap) 

фактически кортеж

Как получается?

Если вы пишете

>>> a = 1, 

вы определяете кортеж

>>> a 
(1,) 
>>> type(a) 
<type 'tuple'> 

это то же самое, как вы делали в:

heatmap = ax.pcolor(data, cmap='RdPu'),  

так, чтобы избавиться от запятой и вы получите такую ​​хорошую цифру:

enter image description here

+0

cringe. Это было очевидно! Спасибо большое x –