簡體   English   中英

補丁中的matplotlib顏色漸變?

[英]matplotlib color gradient in patches?

我想在matplotlib中創建一個橢圓,其填充顏色具有取決於半徑的alpha(不透明度)值;

例如,2D高斯。

有沒有辦法做到這一點?

可以很容易地創建具有顏色漸變的矩形圖(如Gradient facecolor matplotlib條形圖 )但我無法弄清楚如何對圓/橢圓進行相同的操作。

這是使用Alex的帖子中的想法的功能示例

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#

情節

我不認為matplotlib目前支持補丁的漸變填充 - 請參閱此電子郵件

john>您好,我正在嘗試設置一個帶有填充圖案的條形圖(一組修補的矩形),而不僅僅是純色。 在matplotlib中有一個簡單的方法嗎?
約翰>我在想像Qt的QBrush,它有交叉,垂直,密集等模式。

目前沒有對此的支持 - 添加支持此類事情的后端並不太難。 基本上,我們需要為它指定API,並添加對后端的支持。 我一直想為補丁添加漸變填充(例如多邊形,矩形),一次做兩個都是好的。


您可以創建網格,使用函數計算顏色,然后使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM