2017-07-07 93 views
0

我正在嘗試創建散點子圖的集合,並希望它們共享相同的顏色條。Matplotlib,具有共享顏色條的多個散點子圖

我遵循指導here,但它似乎只適用於繪製對象具有自動比例屬性的圖像。

我使用的代碼如下:

import matplotlib.pyplot as plt 
import numpy 
import random 

x = [] 
y = [] 

for i in range(100): 
    x.append(random.normalvariate(100,10)) 
    y.append(random.normalvariate(100,10)) 

#Creates a list of length n 
def getRand(n): 
    l = [] 
    for i in range(n): 
     l.append(random.normalvariate(1,10)) 
    return l 

f = plt.figure()  
f, axes = plt.subplots(nrows = 2, ncols = 2, sharex=True, sharey = True) 

axes[0][0].scatter(getRand(100),getRand(100), c = getRand(100), marker = "x") 
axes[0][0].set_xlabel('Crosses', labelpad = 5) 

axes[0][1].scatter(getRand(100),getRand(100), c = getRand(100), marker = 'o') 
axes[0][1].set_xlabel('Circles', labelpad = 5) 

axes[1][0].scatter(getRand(100),getRand(100), c = getRand(100), marker = '*') 
axes[1][0].set_xlabel('Stars') 

axes[1][1].scatter(getRand(100),getRand(100), c = getRand(100), marker = 's') 
axes[1][1].set_xlabel('Squares') 


#Add separate colourbar axes 
cbar_ax = f.add_axes([0.85, 0.15, 0.05, 0.7]) 

#Autoscale none 
f.colorbar(axes[0][0], cax=cbar_ax) 


plt.show() 

這將生成錯誤:

AttributeError的: 'AxesSubplot' 對象沒有屬性 'autoscale_None'

該問題發生時我將數據發送到顏色欄:

f.colorbar(axes[0][0], cax=cbar_ax) 

他再次是電流輸出,很顯然,我希望標記的顏色是比例尺上的權利(我會擔心您正確地安裝它以後):

enter image description here

是否有實現的遠這對於一組散佈圖如這樣,如果是的話,我如何修改我的代碼來實現它?

+0

你可能需要[一個獨立的彩條(https://matplotlib.org/examples/api/colorbar_only.html)可能通過' mpl.colorbar.ColorbarBase'。 –

回答

0

figure.colorbar簽名是

colorbar(mappable, cax=None, ax=None, use_gridspec=True, **kw) 

這意味着第一參數必須是ScalarMappable,而不是軸。

sc = axes[0][0].scatter(..) 
fig.colorbar(sc, cax=cbar_ax) 

如果要使用相同的顏色條所有散點圖,您需要使用相同的標準化爲他們所有。

norm=plt.Normalize(-22,22) 
sc = axes[0][0].scatter(getRand(100),getRand(100), c = getRand(100), norm=norm) 
fig.colorbar(sc, cax=cbar_ax) 

一個完整的例子:

import matplotlib.pyplot as plt 
import numpy as np 

def getRand(n): 
    return np.random.normal(scale=10, size=n) 

f = plt.figure()  
f, axes = plt.subplots(nrows = 2, ncols = 2, sharex=True, sharey = True) 
norm=plt.Normalize(-22,22) 
sc = axes[0][0].scatter(getRand(100),getRand(100), c = getRand(100), marker = "x", norm=norm) 
axes[0][0].set_xlabel('Crosses', labelpad = 5) 

axes[0][1].scatter(getRand(100),getRand(100), c = getRand(100), marker = 'o', norm=norm) 
axes[0][1].set_xlabel('Circles', labelpad = 5) 

axes[1][0].scatter(getRand(100),getRand(100), c = getRand(100), marker = '*', norm=norm) 
axes[1][0].set_xlabel('Stars') 

axes[1][1].scatter(getRand(100),getRand(100), c = getRand(100), marker = 's', norm=norm) 
axes[1][1].set_xlabel('Squares') 

cbar_ax = f.add_axes([0.85, 0.15, 0.05, 0.7]) 

f.colorbar(sc, cax=cbar_ax) 

plt.show() 

enter image description here

相關問題