Python画3维热力图

刻词梨木 2024-09-16 12:31:01 阅读 61

使用Python画三维可拖动热力图,并且设置热力图颜色变化范围

使用Python画3维热力图时,可能会遇到两个问题,一是是否画表面的图,这个图是否可以拖动演示。二是因为数据分布不均匀导致色条的范围与预想的不一致。(图片来自网络)

3维绘图,Axes3D演示

使用Python的matplotlib及其工具包mpl_toolkits。可以实现数据的三维绘制。

<code># 使用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演示图code>

# 生成网格坐标,如果直接代入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

转载请务必注明出处

文章主图是陌芋大大的图



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。