02小提琴图加热力图

2023-11-05 09:10
文章标签 02 加热 力图 小提琴

本文主要是介绍02小提琴图加热力图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文是在模仿中精进数据分析与可视化系列的第一期——小提琴图加热力图,主要目的是参考其他作品模仿学习进而提高数据分析与可视化的能力,如果有问题和建议,欢迎在评论区指出。若有其他想要看的作品,也欢迎在评论区留言或通过公众号发消息给出相关信息。

本文所用的数据和代码可在公众号回复20230106下载,公众号二维码见文末。

一、简介

本次要模仿的作品来自论文Effects of anthropogenic precursor emissions and meteorological conditions on PM2.5 concentrations over the “2+26” cities of northern China ,研究区域为“2+26”城市(京津冀及周边地区),站点级PM2.5浓度数据。

图片分为两个部分,上半部分为研究区域在1-12月的2015-2021年的各个站点的月均PM2.5浓度的小提琴图,下半部分为研究区域2015-2021年每年1-12月的整个研究区域的月均PM2.5浓度。

二、数据准备

本文不再介绍站点级PM2.5数据下载和处理的方法,直接提供数据作为示例,下载方法见文章开头。之后有空会单独写一篇文章详细讲一下怎么处理站点级数据,包括气象数据和污染物数据,有兴趣的可以关注公众号的GIS数据处理系列文章。本文提供的代码和数据示例如下:

+-- 02小提琴图加热力图
|   +-- steps
|   |   +-- 1.png
... ... ... ... ... 
|   |   +-- 7.tif
|   +-- plot.ipynb
|   +-- result.png
|   +-- station_month_mean.csv
|   +-- year_month_mean.csv
|

其中,steps下存放各步骤的结果,plot.ipynb为本文所用的代码,result.png为最终的可视化结果,year_month_mean.csvstation_month_mean.csv分别是前文提到的两个数据。

三、可视化

本文会将可视化的步骤拆分开来,分别介绍每个可视化步骤,最后再介绍这个图片的可视化方法。

1)导入所需的包并设置全局字体

import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import colors, cmplt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False

2)创建子图与画布

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 7))

3)绘制小提琴图

sns.violinplot(data=station_month_df, ax=ax1, scale='width', inner='quartile', cut=1, color='w')

4)上子图的刻度标签与轴标签

ax1.set_xticks([])
ax1.set_ylabel('$\mathrm{PM_{2.5}(ug/m^3)}$', fontdict={'fontsize':13})
ax1.set_ylim(20, 160)
ax1.tick_params(axis='y', labelleft='on', left='on', labelsize=12)

5)绘制热力图

im = sns.heatmap(year_month_df, vmin=20, vmax=160, annot=True, fmt='.1f', ax=ax2, linewidths=.5, linecolor="grey", cmap="RdYlBu_r", cbar=False,annot_kws={'color': 'k'})

6)下子图的刻度标签与轴标签

plt.setp(ax2.get_yticklabels(), rotation=45, ha="right", rotation_mode="anchor")
ax2.set_ylabel('Year', fontdict={'fontsize':13})
ax2.set_xticklabels(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
ax2.tick_params(axis='y', labelleft='on', left='on', labelsize=12)
ax2.tick_params(axis='x', labelbottom='on', bottom='on', labelsize=12)

7)热力图色带

cbar = fig.colorbar(cm.ScalarMappable(norm=colors.Normalize(vmin=20, vmax=160), cmap="RdYlBu_r"), ax=ax2, pad=0.12, orientation='horizontal', aspect=30)
cbar.ax.tick_params(labelsize=12)

8)调整子图间距

fig.subplots_adjust(hspace=0.03)

9)保存为图片

fig.savefig('./result.png', dpi=300, bbox_inches='tight')

四、结果展示

学习更多Python & GIS的相关知识,请移步公众号GeodataAnalysis

这篇关于02小提琴图加热力图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348826

相关文章

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTION=‘N’ / CREATE DATABASE myd

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

滚雪球学MyBatis(02):环境搭建

环境搭建 前言 欢迎回到我们的MyBatis系列教程。在上一期中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架的对比。通过这些内容,大家应该对MyBatis有了初步的了解。今天,我们将从理论走向实践,开始搭建MyBatis的开发环境。了解并掌握环境搭建是使用MyBatis的第一步,也是至关重要的一步。 环境搭建步骤 在开始之前,我们需要准备一些必要的工具和软件,包括J

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi

【SpringMVC学习02】SpringMVC入门程序

转自:http://blog.csdn.net/yerenyuan_pku/article/details/72231272 现有这样一个需求:使用SpringMVC这个框架实现商品列表的展示。这是我对这个需求的分析:我这里假设请求的url为/itemList.action,由于我想要展示商品列表,所以是并不需要传递参数的,再次是这里仅仅是一个SpringMVC的一个入门小程序,并不会与MyBa

02 Shell Script注释和debug

Shell Script注释和debug 一、ShellScript注释 ​ # 代表不解释不执行 ​ 语法:# # 创建myshell.sh文件[root@localhost ~]# vi myshell.sh # 写入内容#!/bin/bash# 打印hello world(正确)echo "hello world"echo "hello 2" # 注释2(正确)echo

python+selenium2轻量级框架设计-02日志类

本文介绍如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里。 import logging,time,osclass Logger(object):def __init__(self,logger):'''指定保存日志的文件路径,日志级别,以及调用文件将日志存入到指定的文件中'''#创建loggerself.logger = logging.getLogge

postman基础教程-02环境变量

编写的API往往需要在多个环境下执行,而Postman 提供了两种类型的变量:环境变量和全局变量,从而很好的解决了这个问题。 环境变量有效范围仅仅在于你所选取的环境,全局变量对所有的环境都试用 api可能需要在拨通的环境中运行,所以api请求的服务器地址不能写死,希望是可以配置的,创建环境变量有多种方式。 环境变量 1.手工预先创建环境变量 点击小眼睛按钮即可创建环境变量,第一个是环境变量