使用matplotlib在2D彩色网格图上居中显示等值线图

yqkkidmi  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(107)

我有两个10x10大小的数组,其中一个用来将数组的值显示为2D彩色方格,另一个用来在这个2D方格上绘制等值线图,这样我就可以显示两个数组中的值之间的关系。
我的问题的一些示例数据:

import matplotlib.pyplot as plt
import numpy as np

# make some random data
squares = np.random.random((10,10))
contour = np.random.random((10,10))

# plot squares
plt.pcolor(squares, cmap='bone')
plt.colorbar()
# plot contour
plt.contour(contour, levels=10)
plt.colorbar()
plt.show()

运行这段代码可以根据需要将它们重叠绘制,但是等值线图被移到左下角,并且没有用正方形填充整个图形。如何将等值线图居中,而不必将等值线图数组的大小增加到(11,11),而是将其向上和向右移动半个正方形?
任何帮助都很感激

klr1opcd

klr1opcd1#

pcolor图为1x1的单元格着色,其中边界由110, 1, 2, ..., 10形成。当没有明确给出XY时,等值线图假设在点位置处给出“高度”,因此在XY值处,10坐标值指向0, 1, 2, ..., 9
要对齐两者,可以告诉plt.contour这些值表示单元格的中心,因此坐标值0.5, 1.5, 2.5, ..., 9.5(用numpy表示,例如np.arange(10) + 0.5

import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage.filters import gaussian_filter

# make some random data
heights = gaussian_filter(np.random.randn(10, 10), 2)

# plot squares
plt.pcolor(heights, cmap='bone')
plt.colorbar()
# plot contour
plt.contour(np.arange(10) + 0.5, np.arange(10) + 0.5, heights, levels=10, cmap='Reds')
plt.colorbar()
plt.show()

相关问题