2013-05-16 11 views
11

मैं मैटलप्लिब के साथ अजगर में कुछ ग्राफिक्स प्रस्तुत कर रहा हूं, और उन्हें लाटेक्स पेपर में शामिल करूँगा (मैटलप्लिब के ImageGrid इत्यादि के साथ फ़िडलिंग के बजाय लाटेक्स के अच्छे टैब्यूलर संरेखण का उपयोग करके)। imshow का उपयोग किए बिना, savefig के साथ एक स्टैंडअलोन कलरबार बनाना और सहेजना चाहता हूं।स्टैंडअलोन कलरबार (matplotlib)

(vlim, vmax मानकों, साथ ही cmap स्पष्ट रूप से प्रदान किया जा सकता के रूप में)

एक ही रास्ता मैं मिल सकता है काफी जटिल और था (क्या मैं समझता हूँ से) कैनवास पर एक हार्ड-कोडेड आयत ड्रॉ: http://matplotlib.org/examples/api/colorbar_only.html

matplotlib के साथ एक स्टैंडअलोन कलरबार बनाने का एक शानदार तरीका है?

+5

ईमानदारी से इस तरह वे आप के लिए काम के सबसे किया है लग रहा है .. मुझे नहीं पता कि क्या आप इसे बचाने में सक्षम होने के मामले में उससे बेहतर कुछ भी पाएंगे, अपने कोलोरैप, रेंज इत्यादि को एक बार में परिभाषित करें। – mdscruggs

+0

मैं यह इंगित करता हूं कि आप जो कह रहे हैं वह दृश्यों के पीछे आपके लिए क्या है plt.colorbar' में जटिल दिखता है। – tacaswell

+0

@tcaswell मैं निश्चित रूप से सहमत हूं। मैं बस सोच रहा था कि क्या एक और अधिक सुरुचिपूर्ण समाधान था जिसे 'plt.colorbar' को पुन: कार्यान्वित करने की आवश्यकता नहीं थी; लिंक किए गए समाधान में कटौती और पेस्ट करने के लिए ठीक है, लेकिन 'plt.olshbar()' को 'plt.imshow' के बाद एक खाली मैट्रिक्स (पोस्टरिटी के लिए नोट: जो काम नहीं करता है) के साथ कॉल करने की तुलना में सुरुचिपूर्ण लगता है। – user

उत्तर

16

आप कुछ डमी छवि बना सकते हैं और फिर इसकी कुल्हाड़ी छुपा सकते हैं। एक अनुकूलित अक्षरों में अपनी कलरबार बनाएं।

import pylab as pl 
import numpy as np 

a = np.array([[0,1]]) 
pl.figure(figsize=(9, 1.5)) 
img = pl.imshow(a, cmap="Blues") 
pl.gca().set_visible(False) 
cax = pl.axes([0.1, 0.2, 0.8, 0.6]) 
pl.colorbar(orientation="h", cax=cax) 
pl.savefig("colorbar.pdf") 

परिणाम:

enter image description here

+0

यही वह है जिसके बारे में मैं बात कर रहा हूं! – user

+5

यह मेरे लिए एक AssertionError 'assert position == 'top' या position == 'bottom'' फेंकता है। कोड को '' pl.colorbar (ओरिएंटेशन = 'क्षैतिज', कैक्स = कैक्स) में बदलना, 'समस्या को ठीक किया और जिन परिणामों को मैं ढूंढ रहा था उनका उत्पादन किया। कुछ संस्करण-समस्याएं हो सकती हैं या तो। – Nras

2

HYRY के जवाब में के रूप में एक ही विचार का उपयोग करना, अगर आप अर्थ में एक "स्टैंडअलोन" colorbar चाहते हैं कि उसे एक आंकड़ा पर मदों की स्वतंत्र है (सीधे वे कैसे रंग के होते हैं के साथ जुड़ा हुआ नहीं है), तो आपको निम्न की तरह कुछ कर सकते हैं: अगर आप की तरह कर रहे हैं

from matplotlib import pyplot as plt 
import numpy as np 

# create dummy invisible image 
# (use the colormap you want to have on the colorbar) 
img = plt.imshow(np.array([[0,1]]), cmap="Oranges") 
img.set_visible(False) 

plt.colorbar(orientation="vertical") 

# add any other things you want to the figure. 
plt.plot(np.random.rand(30)) 
+0

बहुत अच्छा समाधान! –

0

तो, this answer here पर आधारित है, मुझे और इस बदसूरत नकली plt.imshow से बचने के लिए(), आप मूल रूप से दो पंक्तियों में ऐसा कर सकते हैं:

import matplotlib as mpl 
import matplotlib.pyplot as plt 


fig, ax = plt.subplots() 
col_map = plt.get_cmap('nipy_spectral') 
mpl.colorbar.ColorbarBase(ax, cmap=col_map, orientation = 'vertical') 

# As for a more fancy example, you can also give an axes by hand: 
c_map_ax = fig.add_axes([0.2, 0.8, 0.6, 0.02]) 
c_map_ax.axes.get_xaxis().set_visible(False) 
c_map_ax.axes.get_yaxis().set_visible(False) 

# and create another colorbar with: 
mpl.colorbar.ColorbarBase(c_map_ax, cmap=col_map, orientation = 'horizontal') 

picture of resulting figure