前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据分析--斜率图

Python数据分析--斜率图

原创
作者头像
MiaoGIS
发布2022-04-22 10:59:50
1K0
发布2022-04-22 10:59:50
举报
文章被收录于专栏:Python in AI-IOT

最近阅读学习了林骥老师的《数据化分析 Python 实战》,书中讲好的技能应该刻意的练习,而不是简单的重复。

学习林骥老师的数据可视化的每种图表时,原来代码略微修改,使其适用于自己工作业务中的数据可视化

林骥老师将数据可视化分析源代码分享在他的GitHub空间https://github.com/linjiwx/mp

斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据。

斜率图的优势,是能快速看到每个类别前后发生的变化,并能根据线条的陡峭程度,直观地感受到变化的幅度。

数据如下:

代码语言:text
复制
year	PM2.5	PM10	SO2	NO2	O3	CO
2017	72.17396877	132.7863806	21.47354929	54.11512468	65.71172221	1.205715451
2018	56.83333333	125.75	19.125	65.45833333	30.29166667	0.92375

代码如下:

代码语言:python
代码运行次数:0
复制
# 导入所需的库
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

# 正常显示中文标签
mpl.rcParams['font.sans-serif'] = ['SimHei']

# 自动适应布局
mpl.rcParams.update({'figure.autolayout': True})

# 正常显示负号
mpl.rcParams['axes.unicode_minus'] = False

# 定义颜色,主色:蓝色,辅助色:灰色,互补色:橙色
c = {'蓝色':'#00589F', '深蓝色':'#003867', '浅蓝色':'#5D9BCF',
     '灰色':'#999999', '深灰色':'#666666', '浅灰色':'#CCCCCC',
     '橙色':'#F68F00', '深橙色':'#A05D00', '浅橙色':'#FBC171'}
# 数据源路径
filepath='./data/air.xlsx'


df = pd.read_excel(filepath,0, index_col='year',dtype=np.float16)

category_names = df.columns
labels = df.index.map(str).to_list()
data = df.values

fig, axes=plt.subplots(2,3,figsize=(4, 6))

fig.set_facecolor('w')
 
axes=axes.flatten()
# 画斜率图
radio=((data[1]-data[0])/data[0]).round(2)
for i, ax,name in zip(np.arange(len(df.columns)), axes,df.columns):
    ax.set_facecolor('w')
    ax.set_title('\n郑州市2017-2018年空气污染因子'+name+'对比\n', fontsize=16,  color=c['深灰色'])
    color=c['深灰色']
    if(np.abs(radio[i])>0.20):
        
        color=c['橙色'] if(radio[i])>0 else c['蓝色']
    
    ax.plot(labels, df.iloc[:, i], marker='o', color=color)
    trend='加重' if(radio[i]>0) else '减轻'
    ax.margins(y=0.2)
    # 设置数据标签及其文字颜色
    ax.text(-0.03, df.iloc[0, i],  '{:.2f}'.format(df.iloc[0, i]), ha='right', va='center', color=color, fontsize=16)
    ax.text(1.06, df.iloc[1, i], '{:.2f}'.format(df.iloc[1, i]), ha='left', va='center', color=color, fontsize=16)
    ax.text(0.5, df.iloc[1, i], trend+'{:.0%}'.format(np.abs(radio[i])), ha='left', va='center', color=color, fontsize=16)

    
    ax.set_ylim(0, df.iloc[:, i].max()*1.20)

    ax.yaxis.set_visible(False)
    ax.xaxis.set_visible(False)

    ax.spines['left'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    ax.spines['bottom'].set_visible(False)
 
fig.tight_layout()
plt.show()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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