簡體   English   中英

如何在Matplotlib中的colormesh圖上繪制圖像?

[英]How to plot image over colormesh plot in Matplotlib?

我想繪制bool密度

plt.imshow(rectangle, extent=extent, cmap=ListedColormap([[1, 1, 1, 0], [0, 0, 0, 1]]))

在色網

plt.pcolormesh(x_ticks, y_ticks, np.transpose(potential))

這個怎么做?

目前,盡管我有其他期望,但我只能看到FIRST圖。


這是示例代碼:

import matplotlib
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
import numpy as np

x_ticks = np.linspace(-10, 10, 100, dtype=np.float32)
y_ticks = np.linspace(-10, 10, 100, dtype=np.float32)

x, y = np.meshgrid(x_ticks, y_ticks, indexing='ij')

# density plot of some circular function
r = np.sqrt(x ** 2 + y ** 2)
z = np.where(r != 0, np.sin(r) / r, 1)

plt.figure(1)
plt.pcolormesh(x_ticks, y_ticks, z)
plt.show()

# image of rectangle, white color is transparent
rectangle = np.logical_and(np.abs(x) < 2,  np.abs(y) < 2)
extent = [x_ticks[0], x_ticks[-1], y_ticks[0], y_ticks[-1]]

plt.figure(2)
plt.imshow(rectangle, extent=extent, cmap=ListedColormap([[1, 1, 1, 0], [0, 0, 0, 1]]))
plt.show()

# now I want both on the same plot superimposed
plt.figure(3)
plt.pcolormesh(x_ticks, y_ticks, z)
plt.imshow(rectangle, extent=extent, cmap=ListedColormap([[1, 1, 1, 0], [0, 0, 0, 1]]))
plt.show()

我得到這個:

在此處輸入圖片說明

但我希望這樣(在Photoshop中繪制):

在此處輸入圖片說明

您必須在一個繪圖調用中設置一個顯式zorder才能將其置於頂部/底部:

plt.pcolormesh(x_ticks, y_ticks, z)
plt.imshow(rectangle, extent=extent, cmap=ListedColormap([[1, 1, 1, 0], [0, 0, 0, 1]]), zorder=1)

結果

安德拉的答案當然是正確的。 您可以簡化您的代碼位和忽略extentzorder如果使用關鍵字pcolormesh繪制矩形,以及:

plt.pcolormesh(x_ticks, y_ticks, z)
plt.pcolormesh(x_ticks, y_ticks, rectangle,cmap=ListedColormap([[1, 1, 1, 0], [0, 0, 0, 1]]))

這樣,您立即知道坐標系是什么( zrectangle必須具有相同的形狀)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM