Python matplotlib颜色渐变在面片中?

Python matplotlib颜色渐变在面片中?,python,matplotlib,Python,Matplotlib,我想在matplotlib中创建椭圆,填充颜色的alpha(不透明度)值取决于半径 e、 例如,二维高斯分布 有没有办法做到这一点 可以很容易地创建带有颜色渐变的矩形打印(如和),但我不知道如何对圆/椭圆执行相同的操作。我认为matplotlib目前不支持面片的渐变填充-请参阅 john>您好,我正在尝试设置一个填充图案而不是纯色的条形图(一系列打补丁的矩形)。在matplotlib中有没有一种简单的方法可以做到这一点? john>我在想Qt的QBrush,它有交叉、垂直、密集等模式 目前还没有

我想在matplotlib中创建椭圆,填充颜色的alpha(不透明度)值取决于半径

e、 例如,二维高斯分布

有没有办法做到这一点


可以很容易地创建带有颜色渐变的矩形打印(如和),但我不知道如何对圆/椭圆执行相同的操作。

我认为
matplotlib
目前不支持面片的渐变填充-请参阅

john>您好,我正在尝试设置一个填充图案而不是纯色的条形图(一系列打补丁的矩形)。在matplotlib中有没有一种简单的方法可以做到这一点?
john>我在想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()
这将导致以下情况(忽略网纹背景):


下面是一个函数示例,使用了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-')

我喜欢这种方法——我自己也考虑过,但出于几个原因拒绝了。1.它在日志图上不起作用(不是说补丁工作得很好,而是他们尝试了)。它需要事先了解绘图边界(尽管这可以解决)3。相当慢。不过,现在我还是要继续。我想imshow的原点应该在左下角,
plt.imshow(im.T,cmap=cmap,extent=xr+yr,origin=“lower”)
。然后在需要标记的地方放置一个带透明补丁的白色遮罩z-mediate,以获得更像普通背景上的渐变补丁。
    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#