超简单Python画Heatmap热力图 -库plotly
在画热力图之前需要安装一个 Plotly 的第三方库
pip install plotly
推荐一下其他 画图工具 -> 点击 这里
数据解释
导入的数据格式为两个.csv的表格,由于懒惰没有再处理原始数据集了,具体传值赋值 pandas 均能实现。
其中的 T2_All_Value 代表多列 z轴 ,x_y_axis 代表对应z轴的 x、y坐标。
T2_All_Value
x_y_axis
上代码
import pandas as pd from tqdm import tqdm import plotly.graph_objects as go # 关于取xyz的值做矩阵 df_all_T2 = pd.read_csv('T2_All_Value.csv', index_col=0) # index_col=0用于消除unnamed:0列 # 读取T2数据集的行列数 q1 = df_all_T2.shape[1] # 列数 r1 = df_all_T2.shape[0] # 行数 print('T2有%r行,%r列。' % (r1, q1)) # 读取x和y轴数据 df_x_y = pd.read_csv('x_y_axis.csv') # 获取表格的行列数q,r q2 = df_x_y.shape[1] # 列数 r2 = df_x_y.shape[0] # 行数 print('x_y有%r行,%r列。' % (r2, q2)) list_ix = [] list_iy = [] list_iz = [] def choose_layer(layers): for xx in range(r2 + 1): if xx < r2: IIx = df_x_y.iloc[xx, 0] IIy = df_x_y.iloc[xx, 1] IIz = df_all_T2.iloc[xx, layers] # print('[x, y, z] = [%r, %r, %r]' % (IIx, IIy, IIz)) # 将每个坐标轴存入一个list中 list_ix.append(IIx) list_iy.append(IIy) list_iz.append(IIz) # print('本次的数据:', one_data) mmx = list_ix mmy = list_iy mmz = list_iz return mmx, mmy, mmz
上面Function的到输入数据,每个mmx、mmy、mmz代表的是x-y-z轴的数据列表,类型为 list。
def get_data(mmxx, mmyy, mmzz): df = pd.DataFrame(data=[v for v in zip(mmxx, mmyy, mmzz)], columns=['x', 'y', 'Value']) return df
上一段 get_data() 主要将输入数据变成DataFrame的格式输出。
主函数 代码如下:
if __name__ == '__main__': # SIZE = 100 for i in range(1, q1): mmx, mmy, mmz = choose_layer(i) df = get_data(mmxx=mmx, mmyy=mmy, mmzz=mmz) layout = go.Layout( # plot_bgcolor='red', # 图背景颜色 paper_bgcolor='white', # 图像背景颜色 autosize=True, # width=2000, # height=1200, title=str(i) + '-热力图', titlefont=dict(size=30, color='gray'), # 图例相对于左下角的位置 legend=dict( x=0.02, y=0.02 ), # x轴的刻度和标签 xaxis=dict(title='x坐标轴数据', # 设置坐标轴的标签 titlefont=dict(color='red', size=20), tickfont=dict(color='blue', size=18, ), tickangle=45, # 刻度旋转的角度 showticklabels=True, # 是否显示坐标轴 # 刻度的范围及刻度 # autorange=False, # range=[0, 100], # type='linear', ), # y轴的刻度和标签 yaxis=dict(title='y坐标轴数据', # 坐标轴的标签 titlefont=dict(color='blue', size=18), # 坐标轴标签的字体及颜色 tickfont=dict(color='green', size=20, ), # 刻度的字体大小及颜色 showticklabels=True, # 设置是否显示刻度 tickangle=-45, # 设置刻度的范围及刻度 autorange=True, # range=[0, 100], # type='linear', ), ) fig = go.Figure(data=go.Heatmap( showlegend=True, name='Value', x=df['x'], y=df['y'], z=df['Value'], type='heatmap', ), layout=layout ) fig.update_layout(margin=dict(t=100, r=150, b=100, l=100), autosize=True) fig.show()
最终热力图效果如图所示
右上角有交互功能,可 放大、缩小、保存、移动等系列操作。
完整代码
import pandas as pd from tqdm import tqdm import plotly.graph_objects as go # 关于取xyz的值做矩阵 df_all_T2 = pd.read_csv('T2_All_Value.csv', index_col=0) # index_col=0用于消除unnamed:0列 # 读取T2数据集的行列数 q1 = df_all_T2.shape[1] # 列数 r1 = df_all_T2.shape[0] # 行数 print('T2有%r行,%r列。' % (r1, q1)) # 读取x和y轴数据 df_x_y = pd.read_csv('x_y_axis.csv') # 获取表格的行列数q,r q2 = df_x_y.shape[1] # 列数 r2 = df_x_y.shape[0] # 行数 print('x_y有%r行,%r列。' % (r2, q2)) list_ix = [] list_iy = [] list_iz = [] one_data = [] all_data = [] for xx in range(r2 + 1): if xx < r2: IIx = df_x_y.iloc[xx, 0] IIy = df_x_y.iloc[xx, 1] IIz = df_all_T2.iloc[xx, 7] # one_data.append(IIx) # print('ddddddd:', one_data) # all_data.append(one_data) # print('[x, y, z] = [%r, %r, %r]' % (IIx, IIy, IIz)) # 将每个坐标轴存入一个list中 list_ix.append(IIx) list_iy.append(IIy) list_iz.append(IIz) # print('本次的数据:', one_data) print('xxx:', list_ix) print('yyy', list_iy) print('zzz', list_iz) mmx = list_ix mmy = list_iy mmz = list_iz print('duoshaogehsu', len(mmx)) long = len(mmx) # 取LIST长度 # for ir in tqdm(range(long)): # # for ie in (): for ie, iu, io in tqdm(zip(mmx, mmy, mmz)): # print('shenmgui:', ie) one_data.append(ie) # print('aaaaaa:',one_data) one_data.append(iu) # print('ssssss:', one_data) one_data.append(io) # print('cccccc:', one_data) # time.sleep(1) all_data.append(one_data) # print('牛逼的循环:', all_data) one_data = [] print('dasd asdas :', all_data) data = all_data xdata = list(set(mmx)) ydata = list(set(mmy)) bx = [] by = [] print('changdu1:', len(xdata)) print('changdu2:', len(ydata)) print('changdu3:', len(mmz)) for i_i in xdata: bx.append(str(i_i)) for i_j in ydata: by.append(str(i_j)) print('字符串类型的xdata:', bx) print('字符串类型的ydata:', by) xdata = bx ydata = by def get_data(mmxx, mmyy, mmzz): df = pd.DataFrame(data=[v for v in zip(mmxx, mmyy, mmzz)], columns=['x', 'y', 'z']) return df if __name__ == '__main__': # SIZE = 100 df = get_data(mmxx=mmx, mmyy=mmy, mmzz=mmz) layout = go.Layout( # plot_bgcolor='red', # 图背景颜色 paper_bgcolor='white', # 图像背景颜色 autosize=True, # width=2000, # height=1200, title='T2热力图', titlefont=dict(size=30, color='gray'), # 图例相对于左下角的位置 legend=dict( x=0.02, y=0.02 ), # x轴的刻度和标签 xaxis=dict(title='x坐标轴数据', # 设置坐标轴的标签 titlefont=dict(color='red', size=20), tickfont=dict(color='blue', size=18, ), tickangle=45, # 刻度旋转的角度 showticklabels=True, # 是否显示坐标轴 # 刻度的范围及刻度 # autorange=False, # range=[0, 100], # type='linear', ), # y轴的刻度和标签 yaxis=dict(title='y坐标轴数据', # 坐标轴的标签 titlefont=dict(color='blue', size=18), # 坐标轴标签的字体及颜色 tickfont=dict(color='green', size=20, ), # 刻度的字体大小及颜色 showticklabels=True, # 设置是否显示刻度 tickangle=-45, # 设置刻度的范围及刻度 autorange=True, # range=[0, 100], # type='linear', ), ) fig = go.Figure(data=go.Heatmap( showlegend=True, name='Value', x=df['x'], y=df['y'], z=df['z'], type='heatmap', ), layout=layout ) fig.update_layout(margin=dict(t=100, r=150, b=100, l=100), autosize=True) fig.show()