2012-06-09 17 views
6

मैं एक भरने वाले रंग के साथ matplotlib में इलिप्स बनाना चाहता हूं जिसमें अल्फा (अस्पष्टता) मान है जो त्रिज्या पर निर्भर करता है;matplotlib रंग ढाल?

उदा।, 2 डी गाऊशियन।

क्या ऐसा करने का कोई तरीका है?

यह रंग ढ़ाल आसानी से पर्याप्त (जैसे Gradient facecolor matplotlib bar plot और this) लेकिन मैं कैसे हलकों/दीर्घवृत्त के लिए भी ऐसा ही करने को समझ नहीं सकता के साथ आयताकार भूखंडों बनाने के लिए संभव है।

उत्तर

7

यहाँ समारोह है एलेक्स के पद

import matplotlib.pyplot as plt,numpy as np 

def gauplot(centers, radiuses, xr=None, yr=None): 
     nx, ny = 1000.,1000. 
     xgrid, ygrid = np.mgrid[xr[0]:xr[1]:(xr[1]-xr[0])/nx,yr[0]:yr[1]:(yr[1]-yr[0])/ny] 
     im = xgrid*0 + np.nan 
     xs = np.array([np.nan]) 
     ys = np.array([np.nan]) 
     fis = np.concatenate((np.linspace(-np.pi,np.pi,100), [np.nan])) 
     cmap = plt.cm.gray 
     cmap.set_bad('white') 
     thresh = 3 
     for curcen,currad in zip(centers,radiuses): 
       curim=(((xgrid-curcen[0])**2+(ygrid-curcen[1])**2)**.5)/currad*thresh 
       im[curim<thresh]=np.exp(-.5*curim**2)[curim<thresh] 
       xs = np.append(xs, curcen[0] + currad * np.cos(fis)) 
       ys = np.append(ys, curcen[1] + currad * np.sin(fis)) 
     plt.imshow(im.T, cmap=cmap, extent=xr+yr) 
     plt.plot(xs, ys, 'r-') 

और यहाँ से विचार का उपयोग कर उदाहरण है जब आप

gauplot([(0,0), (2,3), (5,1), (6, 7), (6.1, 6.1)], [.3,. 4, .5, 1, .4], [-1,10], [-1,10]) 
      #   centers of circles   # radii of circles# 

plot

+0

मुझे दृष्टिकोण पसंद है - मैंने इसे स्वयं माना था, लेकिन कुछ कारणों से इसे खारिज कर दिया। 1. यह लॉग-लॉग प्लॉट पर काम नहीं करता है (नहीं कि पैच अच्छी तरह से काम करते हैं, लेकिन वे कोशिश करते हैं) 2. इसे साजिश सीमाओं के पूर्व ज्ञान की आवश्यकता होती है (हालांकि इसे चारों ओर काम किया जा सकता है) 3. यह बहुत धीमी है। फिर भी, इस पल के लिए, मैं इसके साथ रोल करूंगा। – keflavich

+0

मुझे लगता है कि इम्शो की उत्पत्ति निचले बाएं कोने पर होनी चाहिए, 'plt.imshow (im.T, cmap = cmap, limit = xr + yr, origin = "lower") '। – ImportanceOfBeingErnest

6

मुझे नहीं लगता कि matplotlib वर्तमान में पैच के लिए ढाल भरने का समर्थन करता है - this email देखें।

जॉन> हैलो, मैं सिर्फ एक ठोस रंग की बजाय एक भर पैटर्न के साथ एक बार (आयत की एक पैच श्रृंखला) सेट करने की कोशिश कर रहा हूं। Matplotlib में ऐसा करने का कोई आसान तरीका है?
जॉन> मैं क्यूटी के क्यूब्रश जैसे कुछ के बारे में सोच रहा हूं जिसमें पार, लंबवत, घने, आदि पैटर्न हैं।

वर्तमान में इसके लिए कोई समर्थन नहीं है - इस तरह की चीज़ों का समर्थन करने वाले बैकएंड के लिए बहुत कठिन नहीं होगा। असल में, हमें इसके लिए एपीआई निर्दिष्ट करने के लिए की आवश्यकता है, और बैकएंड को समर्थन जोड़ें। मैं पैच के लिए ढाल भरने के इच्छुक (उदाहरण के लिए बहुभुज, आयताकार) और यह दोनों एक साथ करना अच्छा होगा।


इसके बजाय पैच का उपयोग कर आप एक जाल बना सकते हैं एक समारोह के साथ रंग की गणना तो प्रक्षेप के साथ imshow का उपयोग की

:

# Taken from http://matplotlib.sourceforge.net/examples/pylab_examples/layer_images.html 

def func3(x,y): 
    return (1- x/2 + x**5 + y**3)*exp(-x**2-y**2) 

# make these smaller to increase the resolution 
dx, dy = 0.05, 0.05 

x = arange(-3.0, 3.0, dx) 
y = arange(-3.0, 3.0, dy) 
X,Y = meshgrid(x, y) 

xmin, xmax, ymin, ymax = amin(x), amax(x), amin(y), amax(y) 
extent = xmin, xmax, ymin, ymax 

fig = plt.figure(frameon=False) 

Z2 = func3(X, Y) 

im2 = imshow(Z2, cmap=cm.jet, alpha=.9, interpolation='bilinear', extent=extent) 

show() 

यह निम्नलिखित में परिणाम होगा (चेकर पृष्ठभूमि पर ध्यान न दें) :

http://matplotlib.sourceforge.net/_images/layer_images.png

+0

चलाने के लिए और फिर पारदर्शी पैच के साथ एक सफेद मुखौटा z के मध्यवर्ती डाल जहाँ आप चाहते हैं कि तुम क्या मिलता है एक सादे पृष्ठभूमि पर ढाल पैच की तरह कुछ और पाने के लिए मार्कर। – cphlewis

संबंधित मुद्दे