2015-09-08 113 views
15

我正在製作一些交互式繪圖,我想添加一個顏色條圖例。我不希望顏色條在自己的軸上,所以我想將它添加到現有的軸上。我在做這件事時遇到了困難,因爲我找到的大多數示例代碼都爲顏色條創建了新的軸。將顏色條添加到現有軸

我試過下面的代碼,使用matplotlib.colorbar.ColorbarBase,它將一個顏色條添加到現有的軸,但它給了我奇怪的結果,我不知道如何指定顏色條的屬性(例如,軸上的位置它被放置,這是什麼尺寸)

import matplotlib 
import matplotlib.pyplot as plt 
from matplotlib.cm import coolwarm 
import numpy as np 

x = np.random.uniform(1, 10, 10) 
y = np.random.uniform(1, 10, 10) 
v = np.random.uniform(1, 10, 10) 

fig, ax = plt.subplots() 

s = ax.scatter(x, y, c=v, cmap=coolwarm) 

matplotlib.colorbar.ColorbarBase(ax=ax, cmap=coolwarm, values=sorted(v), 
           orientation="horizontal") 

使用的fig.colorbar代替matplotlib.colorbar.ColorbarBase仍然不給我我想要很什麼,我仍然不知道如何調整顏色條的屬性。

fig.colorbar(s, ax=ax, cax=ax) 

enter image description here

比方說,我想在左上角的彩條,橫跨圖的頂部延伸大約一半。我會怎麼做呢?

我最好爲此寫一個自定義函數,也許使用LineCollection

+0

我沒有答案。但是,爲什麼要將顏色條作爲現有軸的一部分,而不是給它一個新的軸? – tnknepp

+0

@tnknepp我正在製作具有縮放/平移功能的交互式圖表,切換圖表的開關等。對於我來說,不必爲顏色條創建新軸 –

+0

爲什麼你不能僅僅使用' fig.colorbar(AX = AX)'? – tom

回答

18

顏色條必須有自己的軸。但是,您可以創建與前一個軸重疊的軸。然後使用kwarg指示fig.colorbar使用新軸。

例如:

import numpy as np 
import matplotlib.pyplot as plt 

data = np.arange(100, 0, -1).reshape(10, 10) 

fig, ax = plt.subplots() 
cax = fig.add_axes([0.27, 0.8, 0.5, 0.05]) 

im = ax.imshow(data, cmap='gist_earth') 
fig.colorbar(im, cax=cax, orientation='horizontal') 
plt.show() 

enter image description here

+1

這似乎不適用於3d軸 – derchambers

21

這種技術通常在圖中用於多個軸。在這種情況下,通常需要有一個顏色條,其大小與imshow的結果相符。這可以與axes grid工具包很容易實現:

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

data = np.arange(100, 0, -1).reshape(10, 10) 

fig, ax = plt.subplots() 
divider = make_axes_locatable(ax) 
cax = divider.append_axes('right', size='5%', pad=0.05) 

im = ax.imshow(data, cmap='bone') 

fig.colorbar(im, cax=cax, orientation='vertical') 
plt.show() 

Image with proper colorbar in size

+2

這種方法解決了我的問題,當軸包含底圖(前一個答案拉伸底圖)。感謝! – blaylockbk