因经常需要画一些图,现在专门开一篇博客,记录各种画图使用的代码,目前主要用到的画图包有matplotlib,seaborn,pandas,pyecharts,seaborn等多种。博客不定期更新,用到即记录。
seaborn画热力图代码
直接上代码
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 3 09:55:34 2021
@author: HP
"""
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
data = pd.read_excel('XX.xlsx', engine='openpyxl')
data.set_index('小时', inplace=True)
# 列逆序
data = data[list(data.columns)[::-1]]
# 按列求百分比
data = data.div(data.sum(axis=0), axis=1)
f, ax = plt.subplots(figsize=(9, 6))
#绘制热力图,还要将数值写到热力图上
sns.heatmap(data, annot=True, fmt="0.3f", ax=ax, cmap="OrRd")
#设置坐标字体方向
label_y = ax.get_yticklabels()
plt.setp(label_y, rotation=360, horizontalalignment='right')
label_x = ax.get_xticklabels()
plt.setp(label_x, rotation=45, horizontalalignment='right')
plt.title('seaborn热力图', fontsize=30)
plt.xlabel('X轴标签', fontsize=24)
plt.ylabel('Y轴标签', fontsize=24)
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
plt.show()
简单解释:
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
这两行代码画图常用,分别解决中文标签和负号乱码的问题。
data = pd.read_excel('XX.xlsx', engine='openpyxl')
这行代码写入excel文件,但新版的xlsd是不支持xlsx文件的,所以要加入engine='openpyxl'
这个参数。
data.set_index('小时', inplace=True)
将dataframe的某列设置为索引,并替换原索引,我的列索引标签是小时。
data = data[list(data.columns)[::-1]]
这行代码不是必须的,看个人数据,主要作用是将列数据逆序排一下。
data = data.div(data.sum(axis=0), axis=1)
同上,也非必须,作用是显示列数据的百分比,而非原始数值。
sns.heatmap(data, annot=True, fmt="0.3f", ax=ax, cmap="OrRd")
这是关键代码,annot=True
作用是将数据值放到热力图上,fmt="0.3f"
是设置数据的格式,cmap="OrRd"
设置热力图颜色深浅,根据个人喜好需求设置。
后面是常规设置,不再解释。
看下效果:
后续待补充。
散点图及坐标轴间隔设置
x = data.XX.values.tolist()
y1 = data.XXX.values.tolist()
y11 = [x * 20 for x in y1]
y2 = data.XX.values.tolist()
y22 = [x * 20 for x in y2]
plt.scatter(x, y1, s=y11, c='blue') # s是圆形标记的大小
plt.scatter(x, y2, s=y22, c='red')
plt.legend(["XX", "XXX"], fontsize=24)
plt.xlabel("MM", fontsize=28)
plt.ylabel("NN", fontsize=28)
plt.title("TTT", fontsize=40)
plt.xticks(range(0, 42, 2), fontsize=22) # 设置坐标轴间隔
plt.yticks(range(0, 22, 2), fontsize=22)