在 plt.imshow() 中将 alpha 设置为数组会使绘图崩溃
Setting alpha as an array in plt.imshow() makes the plot crashe
当尝试 运行 受 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
-值
- 我运行这段代码是经典python3.6下的linux分布
您的 alpha 数组 alpha/alpha.max()
与实际图像数组 test
的形状不匹配。根据您提供的测试代码,我们可以创建一个 alpha 数组并使用下面的代码将其成功显示为 alpha-varying 图像。因此,您必须确保 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()
生成下图。
从 matplotlib 3.1.3 documentation 开始,alpha
关键字参数必须是标量值。
你应该更新到 Matplotlib 3.3.1,因为给 alpha
参数的数组必须在这两个版本之间实现。
当尝试 运行 受 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
-值 - 我运行这段代码是经典python3.6下的linux分布
您的 alpha 数组 alpha/alpha.max()
与实际图像数组 test
的形状不匹配。根据您提供的测试代码,我们可以创建一个 alpha 数组并使用下面的代码将其成功显示为 alpha-varying 图像。因此,您必须确保 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()
生成下图。
从 matplotlib 3.1.3 documentation 开始,alpha
关键字参数必须是标量值。
你应该更新到 Matplotlib 3.3.1,因为给 alpha
参数的数组必须在这两个版本之间实现。