python - 使用 alpha 值绘制数据,生成一幅彩色图像 - Matplotlib

标签 python matplotlib opacity imshow

我正在尝试用不透明度值绘制某些数据。

要在不透明的情况下绘制它,我可以这样做:

plt.figure()
fig = plt.imshow(scalar_field, origin='lower', zorder=1, extent=(-4, 4, -4, 4))
plt.colorbar(fig)
plt.show()
plt.close()

这给了我这样的图像:

enter image description here

但是我有一些应该包含的不透明度值。然后,我执行以下操作:

plt.figure()
data = plt.cm.jet(scalar_field)
data[..., 3] = 1.0 # just for tests purposes
fig = plt.imshow(data, origin='lower', extent=(-4, 4, -4, 4))
plt.colorbar(fig)
plt.show()
plt.close()

enter image description here

这是正确的,因为 vmin=0.0vmax=1.0 以及我的值太小。

所以,为了正确地看到某些东西,我这样做:

plt.figure()
data = plt.cm.jet(scalar_field)
data[..., 3] = 1.0 # just for tests purposes
max_lim = numpy.max(field_property)
min_lim = numpy.min(field_property)
fig = plt.imshow(data, origin='lower', extent=(-4, 4, -4, 4), vmin=min_lim, vmax=max_lim, cmap=plt.cm.jet))
plt.colorbar(fig)
plt.show()
plt.close()

正确调整图像限制,如第一幅图所示:

但是,我还看不到图像。在这两种情况下,我都可以在图像中看到类似奇怪的蓝色圆圈的东西。

enter image description here

我错过了什么?

谢谢。

最佳答案

您缺少的是使用某个值调用 cmap 假定固定值的事实。如果您传递 float,则 cmap 的范围固定在 0 和 1 之间。如果您传递 int,则范围为 0 到 255。显然,您正在传递cmap 的值非常小,然后返回等于或接近值 0 的颜色(因此蓝色代表 jet)。

然后,您将此“颜色数组”传递给 imshow,这假定该数组并将其显示为 RGB(A) 图像。您添加的任何 vminvmaxcmap 内容都将被忽略,因为它已经是 RGB 图像,没有任何可映射的内容。

您想要做的是创建一个 ScalarMappable,您可以使用 cmap 和设置范围的 normalizer 创建它。

由于您没有定义“scalar_field”,我将使用 MPL Gallery 中的一些示例数据:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

# create the sample data
# after http://matplotlib.org/examples/images_contours_and_fields/pcolormesh_levels.html
dx, dy = 0.05, 0.05
y, x = np.mgrid[slice(1, 5 + dy, dy),
                slice(1, 5 + dx, dx)]

z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)


fig, ax = plt.subplots(figsize=(6,6))
ax.axis('off')

# with a normalizer you can set the range against which you want to map
norm = mpl.colors.Normalize(vmin=-1, vmax=1)
# the cmap of your choice
cmap = plt.cm.jet

# create a 'mapper'
mapper = mpl.cm.ScalarMappable(norm=norm, cmap=cmap)

# map the data to a rgba array
rgba = mapper.to_rgba(z)

# make some adjustments to the alpha
rgba[:,:,3] = 0.5

# and plot
# there is no need for vmin, cmap etc keywords, its already rgba
ax.imshow(rgba)

关于python - 使用 alpha 值绘制数据,生成一幅彩色图像 - Matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25183650/

相关文章:

python - 如何使用 Numpy 重新创建 sigma 符号?

css - 在不透明的背景图像上倾斜

python - 如何从 lambda 函数中的变量生成持久值

javascript - 使用 Python Flask 自定义 Stripe Checkout

python - 如何在考虑到特定约束的情况下搜索嵌套字典

c# - 如何通过设置窗口实时控制程序的不透明度?

html - CSS : Background opacity is showing on text

python - 如何以编程方式检测站点是否禁止屏幕抓取?

python - 如何在 Python/Pylab/Seaborn/Plotly 中创建比较散点图/群图?

python - matplotlib slider 重绘不更新图文