本文以2019年全国各城市的空气质量观测数据为例,利用matplotlib、calmap、pyecharts绘制日历图和热力图。在绘图之前先利用pandas对空气质量数据进行处理。

2019年全国各城市空气质量观测数据来源于:https://beijingair.sinaapp.com。

数据处理

从网站下载的数据为逐小时数据,每天一个文件。如果要绘制全年的日历图或者热图,首先要将所有的数据进行合并处理。

下载好数据之后,将数据解压到当前目录的2019文件夹内,然后处理数据:

import globfrom datetime import datetime, timedeltaimport numpy as npimport pandas as pd

from matplotlib import cm, colorsimport matplotlib.dates as mdatesimport matplotlib.patches as mpatchesimport matplotlib.pyplot as plt

def format_aqi(filep, columns=None): files = glob.glob(filep)

df = pd.concat((pd.read_csv(f) for f in files)) df.index = pd.to_datetime(df.date.astype(np.str) + df.hour.apply(lambda x: '%02d'%x), format='%Y%m%d%H') # drop date and hour columns df.drop(['date', 'hour'], axis=1, inplace=True)

df = df.pivot_table(columns='type', index=df.index) df.columns.names = ['station', 'type'] df.index.names = ['date']

df = df.stack('station')

if columns is not None: df = df.loc[:, columns]

return df

filep = '2019/china*.csv' data = format_aqi(filep)data.csv('2019.csv') # 保存以便后续使用

合并完成数据后,读取数据并进一步处理:

data = pd.read_csv('2019.csv', index_col='date', parse_dates=True)data2 = data.pivot_table(index=data.index, columns=['station'])

time_range = pd.date_range(datetime(2019, 10, 1, 0), datetime(2019, 12, 31, 23), freq='1h')

idx = pd.IndexSliceaqi = data2.loc[:, idx['AQI', :]].xs('AQI', axis=1)aqi = aqi.reindex(time_range)

cities = ['北京', '天津', '石家庄', '邯郸', '济南', '郑州', '菏泽', '亳州', '徐州', '驻马店', '南京', '合肥', '马鞍山', '武汉', '上海', '杭州', '长沙', '南昌', '上饶', '温州', '吉安', '赣州', '福州', '龙岩', '厦门', '泉州' ]

sub = aqi[cities[::-1]]

绘制热力图

因为空气质量有专门的配色,首先设置对应等级的colormap

colors_aqi = ['#009966', '#FFDE33', '#FF9A32', '#CC0033', '#660099']levels = [0, 50, 100, 150, 200, 300]

cmap_aqi = colors.ListedColormap(colors_aqi) norm = colors.BoundaryNorm(levels, cmap_aqi.N)

然后,开始绘图:

fig, ax = plt.subplots(figsize=(16, 9))

con = ax.pcolormesh(sub.index.values, np.arange(0, sub.columns.shape[0]+1), sub.T, cmap=cmap_aqi, norm=norm, vmin=0, vmax=300 )

sdate = datetime(2019, 10, 1)edate = datetime(2019, 12, 31)xticks = pd.date_range(sdate, edate, freq='15d')

ax.set_xlim([sdate, edate])ax.set_xticks(xticks)ax.set_xticklabels([i.strftime('%m/%d') for i in xticks])ax.set_yticks(np.arange(0.5, len(cities)))_ = ax.set_yticklabels(sub.T.index.values, fontdict={'family': 'SimHei', 'fontsize': 16})

ytext = [i.get_text() for i in list(ax.get_yticklabels())]

cb = fig.colorbar(con, extend='max', pad=0.02, extendrect=True, extendfrac=0.2)cb.cmap.set_over('#7D0023')

cb.ax.tick_params(axis='both', direction='in', length=0)_ = cb.ax.set_ylabel('Air Quality Index(AQI)', fontdict={'family': 'Times New Roman'})

2019年10月-12月各城市的AQI日变化

绘制日历图

python中关于绘制日历图的工具相对较少,没有特别有些的工具。下面分别使用calmap和pyecharts绘制日历图。

注意:calmap已经放弃维护了,在使用过程中可能会存在问题。本文fork了原来的源码,解决了可能遇到的问题。可以从https://github.com/bugsuse/calmap下载源码,然后执行python setup.py install进行安装即可。

注意:本文为了简单起见,利用AQI绘图时,直接对AQI求日均值,但是实际情况下是不能直接这样计算的。

import calmap

dd = data[data.station == '北京'].AQI.resample('1d').mean()

fig, ax = plt.subplots(figsize=(18, 9))

cmp = calmap.yearplot(dd, how=None, year=2019, cmap=cmap_aqi, norm=norm, vmin=0, vmax=300, )

ax2 = fig.add_axes([0.94, 0.4, 0.015, 0.2])cb1 = mpl.colorbar.ColorbarBase(ax2, cmap=cmap_aqi, ticks=levels, norm=norm, orientation='vertical', extend='max', extendrect=True, extendfrac=0.15)cb1.cmap.set_over('#7D0023')cb1.set_ticks([25, 75, 125, 175, 250])cb1.ax.set_yticklabels([u'优', u'良', u'轻度污染', u'中度污染', u'重度污染'], fontdict={'fontsize': 16, 'family': 'SimHei'}) cb1.ax.yaxis.set_tick_params(length=0.01)ax2.text(1.13, 1.07, '严重污染', fontdict={'fontsize':16, 'family':'SimHei'})

ax.set_ylabel('2019', fontdict=dict(fontsize=26, color='grey'))

2019年北京市AQI日历图

下面利用pyecharts绘制2019年北京市AQI日历图。

from pyecharts import options as optsfrom pyecharts.charts import Calendar

begin = datetime(2019, 1, 1)end = datetime(2019, 12, 31)data = [ [str(begin + timedelta(days=i)), dd[i]] for i in range((end - begin).days + 1)]

c = ( Calendar() .add( "", data, calendar_opts=opts.CalendarOpts( range_='2019', daylabel_opts=opts.CalendarDayLabelOpts(name_map='cn'), monthlabel_opts=opts.CalendarMonthLabelOpts(name_map='cn'), ), ) .set_global_opts( title_opts=opts.TitleOpts(title='2019年北京市每日AQI(Air Quality Index)', pos_left='center'), visualmap_opts=opts.VisualMapOpts( max_=300, min_=0, range_size=[0, 50, 100, 150, 200, 300], pieces= [{'min': 0, 'max': 50}, {'min': 51, 'max': 100}, {'min': 101, 'max': 150}, {'min': 151, 'max': 200},

2019年北京市AQI日历图

绘制热力图也可以使用seaborn,不需要单独码很多代码,而且功能要更多一些。python在绘制日历图方面不是非常友好,相比之下,pyecharts更有优势。但是pyecharts更适合线上可视化展示,不太适合制作用于发表论文的图。

这次就说到这了,感兴趣的可以去尝试一下。

以上就是Python如何绘制日历图和热力图的详细内容,更多关于Python绘制日历图和热力图的资料请关注WEB开发者其它相关文章!

python 日历热力图_Python如何绘制日历图和热力图相关推荐

  1. python画企鹅_python如何绘制降水图

    python能快速解决日常工作中的小任务,比如数据展示.python做数据展示,主要用到matplotlib库,使用简单的代码,就可以很方便的绘制折线图.柱状图等.使用Java等,可能还需要配合htm ...

  2. python制作日历_Python如何绘制日历图和热力图

    本文以2019年全国各城市的空气质量观测数据为例,利用matplotlib.calmap.pyecharts绘制日历图和热力图.在绘图之前先利用pandas对空气质量数据进行处理. 数据处理 从网站下 ...

  3. python制作热力图_Python中绘制场景热力图

    原文地址:https://www.cnblogs.com/taotingz/p/11309333.html 我们在做诸如人群密集度等可视化的时候,可能会考虑使用热力图,在Python中能很方便地绘制热 ...

  4. python绘制组合图_Python如何绘制组合图 Python绘制组合图代码示例

    Python如何绘制组合图?本篇文章小编给大家分享一下Python绘制组合图代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 绘制组合图: 组合 ...

  5. python画图代码彩虹-echarts绘制彩虹图

    echarts绘制彩虹图 1.开发环境 vue+echarts 2.电脑系统 windows10专业版 3.在使用echarts开发的过程中,我们可能需要绘制彩虹图,下面是我进行的总结,希望对你有所帮 ...

  6. python绘图:利用matlibplot绘制雷达图

    之前在一些数据分析案例中看到用 Go 语言绘制的雷达图,非常的漂亮,就想着用matlibplot.pyplot也照着画一个,遗憾的是matlibplot.pyplot模块中没有直接绘制雷达图的函数,不 ...

  7. python根据时间序列画折线图_Python cufflinks 绘制折线图,时间序列,子图:简单,很快,很酷,还会动,从此 seaborn 是路人...

    引言 Python 的 seaborn 与 matplotlib 绘图已不必多说,相信能够开始尝试使用 cufflinks 或者 FineBI 等工具进行绘图的朋友,已经对基本的数据可视化有了一定的了 ...

  8. python画热力图_Python中绘制场景热力图

    原博文 2019-08-06 15:39 − 我们在做诸如人群密集度等可视化的时候,可能会考虑使用热力图,在Python中能很方便地绘制热力图. 下面以识别图片中的行人,并绘制热力图为例进行讲解. 步 ...

  9. python作图的线型_Python matplotlib绘制线型图

    # 画折线图 import matplotlib.pyplot as plt import numpy as np import pandas as pd file=r'C:\Users\zm.com ...

  10. python动态柱状图_Python+matplotlib绘制动态更新的柱状图

    Python+matplotlib绘制极坐标柱状图(南丁格尔玫瑰图) Python使用折线图.柱状图.热力图比较不同班级相同学号学生的成绩 问题描述:有些学校的学号最后两位是根据入学成绩顺序排的,那么 ...

最新文章

  1. google gflags的参数解析,便捷实用
  2. php文本域输出_PHP转换文本框内容为HTML格式的方法
  3. 【干货51页PPT】深度学习理论理解探索
  4. 模式窗口window.open造成Session丢失的解决方法
  5. java redis 没密码配置_如何解决redis的NOAUTH Authentication required异常
  6. linux系统硬件配置查看方法
  7. [Java] 获取本月周次和日期时间段信息
  8. 概率整形 Peobabilistic Shaping PS 第一节
  9. 17秋 SDN课程 第五次上机作业
  10. java分子分母题,JAVA黄金分割点练习题
  11. c++ 应输入表达式_【C语言编程入门系列】—— 第五章,C语言基本运算和表达式(一)...
  12. java读取dbf数据类型,读取foxpro格式的dbf文件-JSP教程,Java技巧及代码
  13. 载波同步matlab程序,Gardner算法实现基带信号位同步的原理和MATLAB程序讲解
  14. windows域的创建
  15. 研究生跟了一个很棒的导师是种怎样的体验?
  16. pdf及word文档的读取 pyPDF2,docx
  17. flutter 初视回味
  18. 寒门能出贵子的关键在哪里
  19. 嵌入式Linux应用与开发——内核配置选项含Linux最新版本kernel下载后续操作
  20. 教你标准音标发音的网站

热门文章

  1. [转] 驱动模拟键盘鼠标
  2. 配置VIM语法高亮及自动缩进
  3. 2010年5月18日 小细节大隐患
  4. unity3d多个版本共存
  5. spring mvc 中,直接注入的 HttpServletRequst 是否安全呢?
  6. Java使用Cipher类实现加密,包括DES,DES3,AES和RSA加密
  7. php订单号生成规则,项目笔记之订单号生成规则以及方法,第一篇!
  8. mysql80110_M1938工作室出品N801苹果CMSV10高级自适应模板
  9. Java中变量的初始化以及变量的初始化顺序,已经加入个人的简单理解
  10. 中班音乐活动 机器人_幼儿园大班音乐活动教案:《机器人》