在plt.imshow()中将alpha设置为数组会使绘图崩溃

2024-09-30 10:29:15 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试运行这段源于matplotlib文档Blend transparency with color in 2-D images的代码时:

import numpy as np
import matplotlib.pyplot as plt

test = np.random.random((300, 300))

plt.figure()
plt.imshow(test, alpha = test/test.max())
plt.show()

我的结局是:

<matplotlib.image.AxesImage at 0x7f8bfe8cc610>Traceback (most recent call last):
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_qt5.py", line 508, in _draw_idle
    self.draw()
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py", line 388, in draw
    self.figure.draw(self.renderer)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py", line 1709, in draw
    renderer, self, artists, self.suppressComposite)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 135, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py", line 2647, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 135, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 619, in draw
    renderer, renderer.get_image_magnification())
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 881, in make_image
    unsampled=unsampled)
  File "/Users/darkvador/opt/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 530, in _make_image
    np.asarray(alpha_channel, np.float32) * out_alpha * alpha,
ValueError: operands could not be broadcast together with shapes (740,740) (300,300)

我在macos catalina手下,与python合作:

Python 3.7.7 (default, Mar 26 2020, 10:32:53) 
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin 

请注意,如果出现以下情况,则不会发生错误:

  • 我评论plt.show()
  • 我使用一个常量alpha-value
  • 我在linux发行版的经典python 3.6下运行这段代码

Tags: inpyimagematplotliblibpackageslinesite
2条回答

matplotlib 3.1.3 documentation中,alpha关键字参数必须是标量值

您应该更新到Matplotlib 3.3.1,因为为alpha参数提供数组必须在这两个版本之间实现

您的alpha数组alpha/alpha.max()与实际图像数组test的形状不匹配。根据您提供的测试代码,我们可以创建一个alpha数组,并使用下面的代码将其成功显示为一个alpha变化图像。因此,您必须确保alpha数组的形状与test数组的形状完全相同

import numpy as np
import matplotlib.pyplot as plt

test = np.random.random((300, 300))
alpha = test / test.max()
print(alpha)

plt.figure()
plt.imshow(test, alpha = alpha)
plt.show()

制作下面的图片

imshow with alpha

相关问题 更多 >

    热门问题