首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Matplotlib数据关系型图表(3)

Matplotlib数据关系型图表(3)

作者头像
python数据可视化之路
发布2023-02-23 20:57:26
发布2023-02-23 20:57:26
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

二、层次关系型图表

层次关系型图表主要表示数据个体之间的层次关系,主要包括包含和从属两类。比如公司不同部门的组织结构,不同洲的国家包含关系等,包括热力图(含相关系数图)、节点链接图、树形图、冰柱图、旭日图等。

2.1 热力图

热力图就是将一个网格矩阵映射到指定颜色序列上,通过恰当选取颜色展示数据。

matplotlib中的热力图:

语法:plt.imshow(data, **kwargs)

参数解释:

data:要绘制的热力图数据,为2维数组,如7行7列。

**kwargs:其他参数设置,例如cmap(颜色映射)等等。

示例数据和代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
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年每个月的乘客数)

现用热力图表示逐年逐月的乘客数系列。

代码语言:javascript
代码运行次数:0
运行
复制
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来对应颜色映射。

代码语言:javascript
代码运行次数:0
运行
复制
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语言中过渡而来,笔者研究并不是很多,在此仅做一些基本的展示。

代码语言:javascript
代码运行次数:0
运行
复制
#加载基本数据,设置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)
代码语言:javascript
代码运行次数:0
运行
复制
#加载基本数据,并设置大小为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)
代码语言:javascript
代码运行次数:0
运行
复制
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)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档