python-3.x - 如何在 matplotlib imshow 等高线图上显示数据点?
问题描述
我已经使用imshow
. 从下面的代码中可以看出,z
计算的值是x
和的范围。y
作为下一步,我想z_new
为一些随机x_new
和y_new
轮廓图像绘制一些计算值,这些值可能由封闭的圆圈或类似的东西标记。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
x = np.linspace(-0.5, 2.0, 101)
y = np.linspace(-0.5, 2.0, 101)
z = np.zeros((101, 101))
E = 0.0
for i in range(len(x)):
for j in range(len(y)):
z[i,j] = -max(y[j]+0.2+E, 0.5-x[i], 0)
x_new = np.array([1.1168189, 0.8381589, 1.3312789, -0.2149011])
y_new = np.array([1.7571379, 1.5555579, 1.9138179, 0.7912879])
z_new = []
for k, l in zip(x_new, y_new):
#print (k, l, -max(l+0.2+E, 0.5-k, 0)) # z_new = -max(l+0.2+eU, 0.5-k, 0) calculated for some random x_new and y_new
z_new.append(-max(l+0.2+E, 0.5-k, 0)) # I would like to see these z_new points on the contour plot for corresponding x_new and y_new
fig, ax = plt.subplots()
ms = plt.imshow(z.T, cmap='plasma', vmin=-2.5, vmax=0, origin='lower', interpolation='none', extent=[-0.5,2.0,-0.5,2.0])
ax.set_xlabel('x', fontsize=16, fontname = "Helvetica")
ax.set_ylabel('y', fontsize=16, fontname = "Helvetica")
cbar = plt.colorbar(ms)
cbar.ax.tick_params(labelsize=10, direction='out')
cbar.set_label('z', fontsize=16, fontname = "Helvetica")
#plt.savefig('test.pdf')
plt.xticks(fontname = "Helvetica", fontsize=12)
plt.yticks(fontname = "Helvetica", fontsize=12)
plt.show()
解决方案
您可以使用下面代码的最后一行在热图顶部添加散点图。没有边缘的圆圈很难看到,但是当您发现它们时,您可以很好地了解它们的值与热图的比较。您可以通过取消注释命令上方的行来为圆圈添加黑色边缘plt.scatter
,这使圆圈易于定位,但很难看到颜色差异。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
x = np.linspace(-0.5, 2.0, 101)
y = np.linspace(-0.5, 2.0, 101)
z = np.zeros((101, 101))
E = 0.0
for i in range(len(x)):
for j in range(len(y)):
z[i,j] = -max(y[j]+0.2+E, 0.5-x[i], 0)
x_new = np.array([1.1168189, 0.8381589, 1.3312789, -0.2149011])
y_new = np.array([1.7571379, 1.5555579, 1.9138179, 0.7912879])
z_new = []
for k, l in zip(x_new, y_new):
#print (k, l, -max(l+0.2+E, 0.5-k, 0)) # z_new = -max(l+0.2+eU, 0.5-k, 0) calculated for some random x_new and y_new
z_new.append(-max(l+0.2+E, 0.5-k, 0)) # I would like to see these z_new points on the contour plot for corresponding x_new and y_new
fig, ax = plt.subplots()
ms = plt.imshow(z.T, cmap='plasma', vmin=-2.5, vmax=0, origin='lower', interpolation='none', extent=[-0.5,2.0,-0.5,2.0])
ax.set_xlabel('x', fontsize=16, fontname = "Helvetica")
ax.set_ylabel('y', fontsize=16, fontname = "Helvetica")
cbar = plt.colorbar(ms)
cbar.ax.tick_params(labelsize=10, direction='out')
cbar.set_label('z', fontsize=16, fontname = "Helvetica")
#plt.savefig('test.pdf')
plt.xticks(fontname = "Helvetica", fontsize=12)
plt.yticks(fontname = "Helvetica", fontsize=12)
## New code ##
# plt.scatter(x_new, y_new, c=z_new, cmap='plasma', vmin=-2.5, vmax=0, edgecolors='black') # Uncomment this if you want the points circled in black
plt.scatter(x_new, y_new, c='green') # Uncomment if you want green circles
# plt.scatter(x_new, y_new, c=z_new, cmap='plasma', vmin=-2.5, vmax=0)
## End of new code ##
plt.show()
推荐阅读
- azure - 使用 terraform 为 Azure 应用程序网关添加重定向规则
- javascript - rails slim template: Uncaught SyntaxError: Unexpected token if
- python-3.x - 提取嵌入在某个类下的文本
- javascript - Javascript - 带有字符串模板的正则表达式后跟 4 位数字?
- mysql - 插入带有计算列的语句
- java - 邮递员给出了正确的回应,但放心返回错误的回应
- database-design - 数据库架构重组以优化性能和空间
- python - 字符串的 Python ASCII 值
- sql - 列引用对于函数中的局部变量不明确
- sql - 每个部门的最高薪水(也是相同的薪水)