Python 绘制热力图(主次x轴刻度表明)

需要导入库

import seaborn as sns    #画热力图需要库
import pandas as pd     #热力图处理数据所用库
import matplotlib.pyplot as plt   #Python画图工具
import numpy as np   #Python画图工具

数据处理

热力图需要一个矩阵的数据,根据矩阵的行和列对应的值对应相应的颜色。
df1 = pd.read_csv(‘citycase.csv’) 首先我们采用这个函数读取文件里面的数据形成一个矩阵。
target = pd.pivot_table(df1, index= ‘cities’) 然后采用这个函数将读出的数据的横纵坐标代表值提取出来,这里index= ‘cities’表示纵坐标为cities对应那一列表示的值。横纵标目前为读取文件的第一行表示的值。
下面为数据处理和热力图绘制代码:

df1 = pd.read_csv('citycase.csv')
#print(df1)  #可以将其输出调试数据处理是否正确
#通过透视图函数形成绘图数据
target = pd.pivot_table(df1, index= 'cities')
#print(target)
#绘图
ax = sns.heatmap(target, # 指定绘图数据
                 cmap=plt.cm.YlOrRd, # 指定填充色
                 linewidths=.1, # 设置每个单元方块的间隔
                 # annot=True # 显示数值
                )

坐标编辑

坐标轴的数据编辑是很重要的直接关系着图片是否美观。

关键函数解释(只列出了x轴的,Y轴的直接将x改掉即可)

plt.xticks(rotation = 0)   #设置x轴表明文字的放向,0为平放90为竖着放

xmajorLocator   = MultipleLocator(13)   #将x轴次刻度标签设置为13的倍数
ax.xaxis.set_major_locator(xmajorLocator)

xmajorFormatter = FormatStrFormatter('%d') #设置x轴标签文本的格式
ax.xaxis.set_major_formatter(xmajorFormatter)

出来的效果如图:

x轴横坐标处理效果图

整体代码:

# coding:utf-8
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

df1 = pd.read_csv('citycase.csv')
# print(df1)
# 通过透视图函数形成绘图数据
target = pd.pivot_table(df1, index= 'cities')
# print(target)
# 绘图
ax = sns.heatmap(target, # 指定绘图数据
                 cmap=plt.cm.YlOrRd, # 指定填充色
                 linewidths=.1, # 设置每个单元方块的间隔
                 # annot=True # 显示数值
                )


plt.xticks(rotation = 0)
xmajorLocator   = MultipleLocator(13)   #将x轴次刻度标签设置为13的倍数
ax.xaxis.set_major_locator(xmajorLocator)
xmajorFormatter = FormatStrFormatter('%d') #设置x轴标签文本的格式
ax.xaxis.set_major_formatter(xmajorFormatter)


xminorLocator   = MultipleLocator(1) #将x轴次刻度标签设置为1的倍数
ax.xaxis.set_minor_locator(xminorLocator)
# 网格模式标明
ax.xaxis.grid(True, which='major', linestyle='-.', linewidth=1, color='black') #x坐标轴的网格使用主刻度


plt.xticks(np.arange(0,85,13),['2011'
                                ,'2012'
                                ,'2013'
                                ,'2014'
                                ,'2015'
                                ,'2016'
                                ,'2017'
                                 ,'2018'
                                # ,'2016',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '
                                # ,'2017',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '
                                 ])


# 旋转y刻度0,即水平显示
plt.yticks(rotation = 0)

plt.savefig('heatmap.pdf')
# 显示图形
plt.show()

你可能感兴趣的:(Python绘图)