2015-09-08 16 views
15

Bazı etkileşimli grafikler yapıyorum ve bir colorbar efsanesi eklemek istiyorum. Colorbar'ın kendi eksenlerinde olmasını istemiyorum, bu yüzden onu mevcut eksenlere eklemek istiyorum. Bunu yaptığım örnek kodun çoğunun, colorbar için yeni bir eksen oluşturması nedeniyle bunu yapmakta zorlanıyorum.Mevcut eksene colorbar ekle

Varolan bir eksene bir renk çubuğu ekleyen matplotlib.colorbar.ColorbarBase'u kullanarak aşağıdaki kodu denedim, ancak bana garip sonuçlar veriyor ve renk çubuğunun niteliklerini nasıl belirleyeceğimi anlayamıyorum (örneğin, eksenlerde nerede) o yerleştirilir ve hangi boyutta olduğunu)

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") 

hala istediğim oldukça ne bana vermez fig.colorbar yerine matplotlib.colorbar.ColorbarBase kullanılması ve hala Colorbar niteliklerini nasıl ayarlanacağını bilmiyorum edilir.

enter image description here

fig.colorbar(s, ax=ax, cax=ax) 
ı arsa üstünde yarım yaklaşık germe, sol üst köşede Colorbar istiyorum diyelim. Bunu yapmayı nasıl yaparım?

Bunun için özel bir işlev yazmayı daha iyi yapabilirim, belki LineCollection kullanıyor musunuz?

+0

Ben buna cevabım yok. Ancak, neden renk çubuğunun yeni bir eksen vermek yerine varolan eksenin bir parçası olmasını istersiniz? – tnknepp

+0

@tnknepp Yakınlaştırma/kaydırma, paftaları açma ve kapama, vb. Ile etkileşimli çizimler yapıyorum. Sadece benim için daha kolay kullanamayacağınız bir renk çubuğu –

+0

için yeni bir eksen oluşturmak zorunda kalmam. fig.colorbar (ax = ax) '? – tom

cevap

18

Renk çubuğunun kendi eksenleri olması gerekir. Bununla birlikte, bir öncekiyle çakışan bir eksen oluşturabilirsiniz. Daha sonra kwarg'ı kullanarak yeni eksenleri kullanmak için fig.colorbar kullanın. Örneğin

:

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

gibi görünüyor bir örnek katacak Bu bir 3d eksen – derchambers

21

Bu teknik genellikle bir şekilde birden fazla eksen için kullanılır. Bu bağlamda, genellikle, imshow'dan elde edilen sonuçlara karşılık gelen bir colorbar değerine sahip olmak gerekir. Bu axes grid alet kiti ile kolayca elde edilebilir:

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

ile işe yaramaz gibi görünüyor Bu yöntem, eksenler bir basemap içerdiğinde (önceki cevap ana haritası uzattı) sorunumu çözdü. Bunun için teşekkürler! – blaylockbk

İlgili konular