首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斑块中的色差?

斑块中的色差?
EN

Stack Overflow用户
提问于 2012-06-09 06:05:55
回答 2查看 10.5K关注 0票数 12

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

例如,二维高斯。

有办法这样做吗?

可以很容易地创建带有颜色梯度的矩形图(如渐变面色图条图),但我不知道如何对圆圈/椭圆进行同样的绘制。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-12 11:11:40

下面是函数示例,它使用了Alex的post中的思想

代码语言:javascript
复制
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-')

这是你跑步时得到的

代码语言:javascript
复制
    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#

票数 8
EN

Stack Overflow用户

发布于 2012-06-12 07:36:19

我不认为matplotlib目前支持梯度填充补丁-参见这封邮件

john>你好,我试图设置一个条形(一个修补的长方形系列)的填充模式,而不是仅仅一个坚实的颜色。在matplotlib中有什么简单的方法可以做到这一点吗? john>我在想类似Qt的QBrush,它有交叉、垂直、密集等模式。 目前还没有对此的支持--对于支持这类东西的后端来说,添加并不是太困难。基本上,我们需要为它指定API,并向后端添加支持。我一直想添加渐变填充补丁(如多边形,矩形),这将是最好的同时做。

与其使用补丁,您可以创建一个网格,计算颜色与一个函数,然后使用imshow与插值:

代码语言:javascript
复制
# 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()

这将导致以下情况(忽略背景变化):

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10958835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档