使用Python画三维可拖动热力图,并且设置热力图颜色变化范围
使用Python画3维热力图时,可能会遇到两个问题,一是是否画表面的图,这个图是否可以拖动演示。二是因为数据分布不均匀导致色条的范围与预想的不一致。(图片来自网络)
3维绘图,Axes3D演示
使用Python的matplotlib及其工具包mpl_toolkits。可以实现数据的三维绘制。
# 使用pip指令可以直接完成这两者的安装
pip install matplotlib mpl_toolkits
主要思路为:构建画布>生成坐标网格>绘制曲面>设置文本条目(标签、标题等)>演示,整个过程是针对第一个问题,其中在绘图时注意的关于色条的参数,是针对第二个问题
# 导入必要的包
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def draw3d(x, y, z, name):
# 构建画布
fig = plt.figure(figsize=(64, 48), dpi=300)
ax = plt.axes(projection='3d') # 设置为3D演示图
# 生成网格坐标,如果直接代入x,y到绘图,会是两列向量,而不是一组一组点对,会和z轴的数据无法一一对应
X, Y = np.meshgrid(x, y)
# 这里对色条进行了设置,主要有三个参数:
# color map : 色条的色系,例如jet是红-绿-蓝组成。
# vmin - vmax : 这两个就是控制color map数值范围的参数
surf = ax.plot_surface(X, Y, z, cmap=plt.get_cmap("jet"), vmin=-1, vmax=1)
# 设置标签、标题等
ax.set_xlabel('X', {'fontsize': 10})
ax.set_ylabel('Y', {'fontsize': 10})
ax.set_zlabel('Polarization', {'fontsize': 10})
xlabels = np.around(np.arange(-4, 4, 0.5), decimals=1)
zlabels = np.around(np.arange(-1, 1, 0.2), decimals=1)
ax.set_xticks(xlabels)
ax.set_yticks(xlabels)
ax.set_zticks(zlabels)
ax.set_xticklabels(xlabels, fontsize=3)
ax.set_yticklabels(xlabels, fontsize=3)
ax.set_zticklabels(zlabels, fontsize=3)
ax.set_title(name, {'fontsize': 10, 'fontweight': 'bold'})
# 为图片添加色条
plt.colorbar(surf)
plt.show() # 展示图片
plt.close() # 记得关闭图片,不然可能会覆盖或者影响下一张图片的绘制
注意事项
Color map(cmap)和Vmin,Vmax这三个参数在使用其他绘制函数时,也就是不适用plot_surface()函数时,可能需要在其他指定的地方设置,但是这三个参数的名字始终是color map(cmap), vmin, vmax, 请注意甄别!
个人博客:https://kecilimu-notion.vercel.app/
个人邮箱:kecilimu@163.com
转载请务必注明出处
文章主图是陌芋大大的图
版权归原作者 刻词梨木 所有, 如有侵权,请联系我们删除。