2015-09-08 4 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.colorbarmatplotlib.colorbar.ColorbarBase के बजाय का उपयोग अभी भी मुझे नहीं देता मैं काफी क्या चाहते हैं, और मैं अभी भी कैसे colorbar की विशेषताओं को समायोजित करने के पता नहीं है।

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

enter image description here

मान लीजिए कि मैं ऊपरी बाएँ कोने में colorbar करना चाहते हैं, भूखंड के शीर्ष पर आधे रास्ते के बारे में खींच लो। मुझसे यह कैसे होगा?

क्या मैं इसके लिए कस्टम फ़ंक्शन लिखने से बेहतर हूं, शायद LineCollection का उपयोग कर रहा हूं?

+0

मैं इस के लिए कोई जवाब नहीं है। हालांकि, आप एक नई अक्ष देने के विरोध में रंगीन अक्ष को मौजूदा अक्ष का हिस्सा क्यों बनना चाहते हैं? – tnknepp

+0

@tnknepp मैं ज़ूमिंग/पैनिंग के साथ इंटरैक्टिव प्लॉट बना रहा हूं, प्लॉट्स ऑन और ऑफ टॉगल करना आदि। रंगीन –

+0

के लिए मुझे एक नई अक्ष बनाने की ज़रूरत नहीं है, आप अभी क्यों ' fig.colorbar (कुल्हाड़ी = कुल्हाड़ी) '? – tom

उत्तर

18

रंगीन की अपनी कुल्हाड़ी होनी चाहिए। हालांकि, आप एक अक्ष बना सकते हैं जो पिछले एक के साथ ओवरलैप हो। फिर नई अक्षों का उपयोग करने के लिए fig.colorbar बताने के लिए cax kwarg का उपयोग करें।

उदाहरण के लिए:

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

जैसा दिखता हूं इसका एक उदाहरण जोड़ूंगा यह 3 डी अक्ष – derchambers

21

इस तकनीक को आम तौर पर एक आकृति में कई अक्ष के लिए प्रयोग किया जाता है। इस संदर्भ में अक्सर रंगीन होना आवश्यक होता है जो इम्शो के परिणाम के साथ आकार में मेल खाता है। यह 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