二、层次关系型图表
层次关系型图表主要表示数据个体之间的层次关系,主要包括包含和从属两类。比如公司不同部门的组织结构,不同洲的国家包含关系等,包括热力图(含相关系数图)、节点链接图、树形图、冰柱图、旭日图等。
2.1 热力图
热力图就是将一个网格矩阵映射到指定颜色序列上,通过恰当选取颜色展示数据。
matplotlib中的热力图:
语法:plt.imshow(data, **kwargs)
参数解释:
data:要绘制的热力图数据,为2维数组,如7行7列。
**kwargs:其他参数设置,例如cmap(颜色映射)等等。
示例数据和代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#构造数据,
year = [i for i in range(2010, 2022)]*12
year.sort()
month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']*12
passenger = np.random.randint(100, 1000, (len(month), 1))[:, 0].tolist()
df = pd.DataFrame({'year':year, 'month':month, 'passenger':passenger})
print(df)
样本数据(2010-2021年每个月的乘客数)
现用热力图表示逐年逐月的乘客数系列。
to_heatmap = df['passenger'].values.reshape(12, -1) #将乘客数据转为二维数据
x_ticks = list(df['year'].unique()) #x轴标签数据,年份
y_ticks = list(df['month'].unique()) #y轴标签数据,月份
plt.imshow(to_heatmap, cmap = 'jet_r') #设置颜色映射为jet相反的映射
plt.xticks(range(0, 12, 2), labels = x_ticks[::2], rotation = 45)
plt.yticks(range(0, 12, 1), labels = y_ticks)
plt.xlabel('Year')
plt.ylabel('Month')
plt.show()
现我们需要将实际数据填充到方格中,并添加colorbar来对应颜色映射。
font1 = {'family': 'Times New Roman', 'size': 9} #设定一个字体样式
fig, ax = plt.subplots(figsize = (5, 5))
ax1 = ax
im = ax1.imshow(to_heatmap, cmap = 'jet_r')
#设置axes对象的x轴和y轴标签,并设置标签的字体样式和对齐方式(很重要的属性,要熟悉)
ax1.set_xticks(range(0, 12, 2), labels = x_ticks[::2])
plt.setp(ax1.get_xticklabels(), rotation=45, ha='right',
rotation_mode='anchor', fontproperties = 'Times New Roman', size = 10)
ax1.set_yticks(range(0, 12, 2), labels = y_ticks[::2])
plt.setp(ax1.get_xticklabels(), ha='right', fontproperties = 'Times New Roman', size = 10)
ax1.set_xlabel('Year')
ax1.set_ylabel('Month')
#添加colorbar
cbar = plt.colorbar(im, ax = ax1)
cbar.set_label('Passenger', rotation = -90, labelpad = 12)
#为每个方格添加所对应的数字,并设置字体样式和对齐方式
for i in range(len(x_ticks)):
for j in range(len(y_ticks)):
text = ax1.text(j, i, to_heatmap[i, j],
ha='center', va='center', color='w', font = font1)
plt.show()
补充:plotnine中的热力图绘制方法
plotnine是非常优秀的绘图库,与matplotlib库相比,plotnine绘制语句更加简单。但plotnine主要是R语言中过渡而来,笔者研究并不是很多,在此仅做一些基本的展示。
#加载基本数据,设置x轴y轴数据,设置填充数值为乘客列
base_plot = (ggplot(df, aes(x = 'year', y = 'month', fill = 'passenger', label = 'passenger'))
+ geom_tile(colour = 'black') #设置方块四周颜色
#设置方块内的文字,大小,颜色
+ geom_text(aes(label = 'passenger'), size=6, colour = 'white')
#设置方块颜色映射为jet的反向
+ scale_fill_cmap(cmap_name = 'jet_r')
#设置x轴标签和名称
+ scale_x_continuous(name = 'Year', breaks = np.arange(2010, 2022, 3), expand = (0, 0))
#设置图片大小和分辨率
+ theme(dpi = 100, figure_size = (4, 4)))
print(base_plot)
#加载基本数据,并设置大小为passenger
base_plot = (ggplot(df, aes(x = 'year', y = 'month', fill = 'passenger', label = 'passenger', size = 'passenger'))
#设置绘制方法为点,标记样式为圆,轮廓颜色为黑色
+ geom_point(shape = 'o', colour = 'black')
#设置最大圆的尺寸
+ scale_size_area(max_size = 11, guide = False)
#设置颜色映射,name表示映射使用到哪个图中,本次是使用在点中,当有多个子图,有线和点,则name是必须的
+ scale_fill_cmap(name = 'Point', cmap_name = 'jet_r')
+ theme(dpi = 100, figure_size = (4, 4)))
print(base_plot)
base_plot = (ggplot(df, aes(x = 'year', y = 'month', fill = 'passenger', label = 'passenger', size = 'passenger'))
#设置绘制方法为圆,标记形状为正方形
+ geom_point(shape = 's', colour = 'black')
+ scale_size_area(max_size = 11, guide = False)
+ scale_fill_cmap(cmap_name = 'jet_r')
+ theme(dpi = 100, figure_size = (4, 4)))
print(base_plot)
本文分享自 python数据可视化之美 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!