首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在plt.imshow()中将alpha设置为数组会使绘图崩溃

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

Stack Overflow用户
提问于 2020-09-27 17:44:10
回答 2查看 866关注 0票数 0

当试图运行这段受matplotlib文档启发的小代码时,二维图像的透明性与颜色的融合

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

最后,我:

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

代码语言:javascript
复制
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发行版的经典python3.6下运行了这段代码
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-29 09:45:06

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

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

票数 2
EN

Stack Overflow用户

发布于 2020-09-27 18:02:23

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

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

产生下面的图像。

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

https://stackoverflow.com/questions/64091495

复制
相关文章

相似问题

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