Вы можете создать изображение RGBA из целочисленного массива и используемой вами цветовой карты, а затем установить для альфа-канала значение 0 для значения, для которого вы хотите иметь прозрачность. И затем вы можете установить transparent=True
в команде Matplotlib savefig
.
Вот фрагмент кода:
import numpy as np
from matplotlib import pyplot as plt
# Mockup data
terrain = np.zeros((200, 200), np.uint8)
terrain[20:180, 20:180] = np.random.randint(0, 10, (160, 160))
# Generate RGBA image from colormapped grayscale data
cmap = plt.get_cmap('magma')
rgba_img = (cmap(terrain / np.max(terrain)) * 255).astype(np.uint8)
# Set alpha channel to 0 for all 0 values in terrain
rgba_img[:, :, 3] = (terrain > 0) * 255
# Output with transparency
plt.figure(0, figsize=(5, 5))
plt.imshow(rgba_img)
plt.axis('off')
plt.tight_layout()
plt.savefig('output.png', transparent=True)
Выходные данные выглядят следующим образом:
Надеюсь, это поможет!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
Matplotlib: 3.2.0rc1
NumPy: 1.18.1
----------------------------------------