2014-03-13 58 views
0

我對Python非常新,甚至我做了相當深入和長期的研究,我想我需要在社區中的確認,然後在github上打開一個案例。需要一個庫缺陷的確認

我正在繪製兩個"hinton plots"但我使用顏色範圍來表示矩陣值。
由於某種原因使用子圖繪製背景在最後一個子圖第一個陰謀與第一個mymap顏色(在我的情況是藍色)。如果在任何情況下都覆蓋set_facecolor = 'gray'(即使我在繪圖後設置背景顏色)。此外,我發現只有當matrix值大於0時,此bug纔會累積。
請參閱下面的圖片(和圖片說明)和代碼。

第二個子圖上第一張圖片的背景爲藍色。 Background of the first picture on the second subplot is blue 第三個子圖添加了無數據,現在它是藍色的,第二個子圖的第一個平方不是。 Third subplot added with no data, now it is blue colored and first square of second subplot is not

對於第一畫面效果變化6個行:fig, (axe_1, axe_2) = plt.subplots(1,2)

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib as mpl 


fig, (axe_1, axe_2, axe_3) = plt.subplots(1, 3) 
my_min, my_max = (0, 10) 
step = 1 
mymap = mpl.colors.LinearSegmentedColormap.from_list("my list", ['blue','red']) 
levels = range(my_min, my_max+step, step) 
matrix = [None, None] 
matrix[0] = np.asanyarray([[0, 1, 2], [3, 0, 5], [6, 7, 0]]) 
matrix[1] = np.asanyarray([[0, 9, 8], [7, 0, 6], [5, 4, 0]]) 

for iter, item in enumerate([axe_1, axe_2]): 

    item.patch.set_facecolor('gray') 
    item.set_aspect('equal', 'box') 
    item.xaxis.set_major_locator(plt.NullLocator()) 
    item.yaxis.set_major_locator(plt.NullLocator()) 
    Z = [[0, 0], [0, 0]] 
    CS3 = plt.contourf(Z, levels, cmap=mymap) 
    for (x, y), z in np.ndenumerate(matrix[iter]): 
     b = (float(z)-my_min)/(my_max-my_min) 
     g = 0 
     r = 1-b 
     rect = plt.Rectangle([y, x], 0.9, 0.9, facecolor=(r, g, b), edgecolor="black") 
     item.add_patch(rect) 
    item.autoscale_view() 
plt.show() 

如果我沒有做任何愚蠢的錯誤,你會確認這是一個錯誤,我會打開GitHub上的問題。

+0

你能更清楚地知道你的問題是什麼嗎? –

+0

更新的問題,我希望現在更清楚。 – arbulgazar

回答

1

這個問題似乎是plt.contourf(我不嚴格理解爲什麼有)的呼叫。但是,它是通過狀態機界面調用的,因此通過循環圖到axe_2(因爲這是plt.gca()返回)。您正在繪製一個2x2全0陣列的輪廓,它正確地繪製爲[0,0,1,1]處的藍色框,這是您看到的藍色邊緣。

它在3軸的情況下「正確」工作,因爲pyplot認爲最後一個軸是當前軸。

+0

我減少了我的代碼到這個最小的例子,因爲你不讀大量不相關的代碼,但在我的原始項目中,我使用'plt.contourf'生成'mpl.colorbar()'的可映射表以查看顏色級別差異。 據我瞭解,這不是一個錯誤是不是? – arbulgazar

+1

不,這不是一個錯誤,圖書館正確地按照它聲稱它會這麼做的方式做正確的事情);而不是用手繪製矩形,使用「pcolor」並使邊緣變厚(請參閱https://stackoverflow.com/questions/14391959/heatmap-in-matplotlib-with-pcolor) – tacaswell

+0

是的,仔細閱讀你在做什麼(這是爲了意思,不正確),你正在重新發明幾個車輪。 'pcolor'將爲你繪製顏色映射和矩形圖。 – tacaswell