我想在 matplotlib 中创建椭圆,其填充颜色具有取决于半径的 alpha(不透明度)值;
例如,二维高斯。
有没有办法做到这一点?
可以很容易地创建具有颜色渐变的矩形图(例如Gradient facecolor matplotlib bar plot和this),但我不知道如何对圆形/椭圆做同样的事情。
我想在 matplotlib 中创建椭圆,其填充颜色具有取决于半径的 alpha(不透明度)值;
例如,二维高斯。
有没有办法做到这一点?
可以很容易地创建具有颜色渐变的矩形图(例如Gradient facecolor matplotlib bar plot和this),但我不知道如何对圆形/椭圆做同样的事情。
这是使用 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 中是否有一种简单的方法可以做到这一点?
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()
这将导致以下结果(忽略方格背景):