gpt4 book ai didi

python - Matplotlib "gray"颜色图不跨越全黑到白范围

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:12 27 4
gpt4 key购买 nike

以下代码产生一个圆形图案:

import numpy as np
import matplotlib.pyplot as mp

def sphere_depth(x, y, depth, radius):
squ = x**2 + y**2
rsqu = radius**2
squ[squ > rsqu] = rsqu
res = np.sqrt(rsqu - squ)
res -= (radius - depth)
res[res < 0.] = 0.
return res

y_pix = x_pix = 100.

c_steps = 10

x, y = np.mgrid[0:x_pix:1, 0:y_pix:1]
z = sphere_depth(x - x_pix / 2, y - y_pix / 2, 5., 100.)
lvls = np.linspace(z.min(), z.max(), c_steps)

mp.close(1)
fig = mp.figure(1)
mp.axes([0, 0, 1, 1], frameon=False)
mp.contourf(x, y, z, cmap=mp.cm.gray, levels=lvls)
mp.axis('off')
mp.savefig("test.png")

颜色图设置为“灰色”,我希望最小值对应于黑色,最大值对应于白色。虽然后者是正确的,但前者不适用于此示例。最低值是深灰色。这可以在增加 c_steps 时进行调整,但我需要有一个非常粗粒度的灰色 map 。感谢您提出如何以黑色开始并以白色结束的任何想法。

最佳答案

在这种情况下,

contourf 的行为与 imshowpcolormesh 略有不同。这是为了与 contour 保持一致,并且由于级别的定义方式。

每个级别范围的颜色由该范围的中点定义。 (此外,您的中心轮廓实际上并不是完全白色的,但在视觉上与它完全相同。)

要指定您希望第一个间隔填充“纯”黑色,请在您的示例中设置 vmin=mean(lvls[:1])

例如,根据您在问题中的出色示例:

import numpy as np
import matplotlib.pyplot as plt

def sphere_depth(x, y, depth, radius):
squ = x**2 + y**2
rsqu = radius**2
squ[squ > rsqu] = rsqu
res = np.sqrt(rsqu - squ)
res -= (radius - depth)
res[res < 0.] = 0.
return res

y_pix = x_pix = 100.

c_steps = 10

x, y = np.mgrid[0:x_pix:1, 0:y_pix:1]
z = sphere_depth(x - x_pix / 2, y - y_pix / 2, 5., 100.)
lvls = np.linspace(z.min(), z.max(), c_steps)

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.contourf(x, y, z, levels=lvls, cmap=plt.cm.gray,
vmin=np.mean(lvls[:2]), vmax=np.mean(lvls[-2:]))
ax.axis('off')

plt.show()

enter image description here

只是为了比较,这是原始示例中的图像:

enter image description here

它很微妙,但第一个在边缘有“纯”黑色,而第二个则没有。

关于python - Matplotlib "gray"颜色图不跨越全黑到白范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27089220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com