Python利用单行热力图绘制好看的风向风速
Python利用单行热力图绘制好看的风向风速
- 导入所需支持库
- 先画单行热力图表示风速
- 设置画布
- 设置风速数据
- 设置色板
- 利用seaborn绘制热力图
- 画风向箭头
- 换箭头函数
- 导入风向数据
- 导入计算坐标
- 移动坐标轴
- 完整代码
导入所需支持库
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.colors as mcolors
import numpy as np
先画单行热力图表示风速
f, ax = plt.subplots(figsize=(3, 3))
plt.rcParams['font.sans-serif'] = ['SimHei']#解决中文乱码
uniform_data = []
wind_speed = [2,4,4,3,4,2,1,1,1,2,1,2,1,2,1,1,1,1,0,0,0,1,0,1]
uniform_data.append(wind_speed)
colors = ['lightskyblue','darkturquoise','lime','greenyellow','orangered','red']
clrmap = mcolors.LinearSegmentedColormap.from_list("mycmap",colors)
x_time = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']
sns.heatmap(uniform_data,square=True,annot=True, fmt="d",linewidths=.5,cmap=clrmap,yticklabels=['风速'],xticklabels=x_time,cbar=False,vmin=0,vmax=8,ax = ax)
ax.set_xticklabels(ax.get_xticklabels(), rotation=0)
ax.set_yticklabels(ax.get_yticklabels(), rotation=0)
设置画布
f, ax = plt.subplots(figsize=(3, 3))
plt.rcParams['font.sans-serif'] = ['SimHei']#解决中文乱码
设置风速数据
uniform_data = []
wind_speed = [2,4,4,3,4,2,1,1,1,2,1,2,1,2,1,1,1,1,0,0,0,1,0,1]
uniform_data.append(wind_speed)
这一步时风速列表变成一列数据,用于后续绘制单行热力图使用
设置色板
colors = ['lightskyblue','darkturquoise','lime','greenyellow','orangered','red']
clrmap = mcolors.LinearSegmentedColormap.from_list("mycmap",colors)
这里作者用的是自定义的色板,也可以不做这一步,使用matplotlib自带色板
利用seaborn绘制热力图
x_time = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']
sns.heatmap(uniform_data,square=True,annot=True, fmt="d",linewidths=.5,cmap=clrmap,yticklabels=['风速'],xticklabels=x_time,cbar=False,vmin=0,vmax=8,ax = ax)
ax.set_xticklabels(ax.get_xticklabels(), rotation=0)
ax.set_yticklabels(ax.get_yticklabels(), rotation=0)
sns.heatmap()函数中各参数含义可以自行去理解,这里作者就不赘述了,其中uniform_data是数据,yticklabels是纵坐标标签,vmin,vmax是数据最大最小值,配合色板显示颜色用。
画风向箭头
换箭头函数
def drawArrow(A, B ,ax_1):ax = ax_1.twinx()if A[0] ==B[0] and A[1] ==B[1]:ax.plot(A[0],A[1],'ko')else:ax.annotate("", xy=(B[0], B[1]), xytext=(A[0], A[1]),arrowprops=dict(arrowstyle="->"))ax.spines['left'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)ax.spines['bottom'].set_visible(False)ax.set_xlim(0,24)ax.set_ylim(0,5)ax.get_yaxis().set_visible(False)ax.set_aspect('equal') #x轴y轴等比例plt.tight_layout()
上述是画箭头函数,读者可不必细究,后面作者会封装好给大家使用,其实原理就是在热力图的上面利用 ax.annotate()画箭头A, B分别为起始和终点坐标。
导入风向数据
wind_direction = [340,110,90,110,180,130,350,30,230,260,240,240,230,210,200,250,250,230,'c','c','c',100,'c',250]
导入计算坐标
for i in range(24):if wind_direction[i] != 'c':a = np.array([0.5+0.5*np.sin(wind_direction[i]/ 180 * np.pi)+i,3.5+0.5*np.cos(wind_direction[i]/ 180 * np.pi)])b = np.array([0.5-0.5*np.sin(wind_direction[i]/ 180 * np.pi)+i,3.5-0.5*np.cos(wind_direction[i]/ 180 * np.pi)])drawArrow(a,b,ax)else:a = np.array([0.5+i,3.5])drawArrow(a,a,ax)
这里作者画的是24小时整点风向风速,所以循环中为24,大家可以根据需要修改,'C’代表静风
移动坐标轴
ax.spines['bottom'].set_position(('data',1))
可以发现,画完风向以后时间轴被移动到下方,通过上述代码移动回热力图下
完整代码
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.colors as mcolors
import numpy as npdef drawArrow(A, B ,ax_1):#画箭头ax = ax_1.twinx()if A[0] ==B[0] and A[1] ==B[1]:#静风画点ax.plot(A[0],A[1],'ko')else:ax.annotate("", xy=(B[0], B[1]), xytext=(A[0], A[1]),arrowprops=dict(arrowstyle="->"))ax.spines['left'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)ax.spines['bottom'].set_visible(False)ax.set_xlim(0,24)ax.set_ylim(0,5)ax.get_yaxis().set_visible(False)ax.set_aspect('equal') #x轴y轴等比例plt.tight_layout()def drow_wind_heatmap(wd,ws,xticklabels):f, ax = plt.subplots(figsize=(12, 12))plt.rcParams['font.sans-serif'] = ['SimHei']#解决中文乱码uniform_data = []uniform_data.append(ws)colors = ['lightskyblue','darkturquoise','lime','greenyellow','orangered','red']clrmap = mcolors.LinearSegmentedColormap.from_list("mycmap",colors)#自定义色标sns.heatmap(uniform_data,square=True,annot=True, fmt="d",linewidths=.5,cmap=clrmap,yticklabels=['风速'],xticklabels=xticklabels,cbar=False,vmin=0,vmax=8,ax = ax)ax.set_xticklabels(ax.get_xticklabels(), rotation=0)#坐标轴标签旋转ax.set_yticklabels(ax.get_yticklabels(), rotation=0)#坐标轴标签旋转ax.spines['bottom'].set_position(('data',1))#移动x轴for i in range(24):#画24个箭头if wd[i] != 'c':a = np.array([0.5+0.5*np.sin(wd[i]/ 180 * np.pi)+i,3.5+0.5*np.cos(wd[i]/ 180 * np.pi)])b = np.array([0.5-0.5*np.sin(wd[i]/ 180 * np.pi)+i,3.5-0.5*np.cos(wd[i]/ 180 * np.pi)])drawArrow(a,b,ax)else:#静风a = np.array([0.5+i,3.5])drawArrow(a,a,ax)plt.show()if __name__ == "__main__":x_time = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']wind_speed = [2,4,4,3,4,2,1,1,1,2,1,2,1,2,1,1,1,1,0,0,0,1,0,1]wind_direction = [340,110,90,110,180,130,350,30,230,260,240,240,230,210,200,250,250,230,'c','c','c',100,'c',250]drow_wind_heatmap(wind_direction,wind_speed,x_time)
Python利用单行热力图绘制好看的风向风速相关推荐
- python画笑脸-python 利用turtle库绘制笑脸和哭脸的例子
我就废话不多说了,直接上代码吧! import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolo ...
- python turtle画彩虹-Python利用turtle库绘制彩虹代码示例_天津SEO
天津SEO RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例: #-*- coding:utf-8 –*- f ...
- python画图代码彩虹-Python利用turtle库绘制彩虹代码示例
语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为R ...
- python画笑脸图案-python 利用turtle库绘制笑脸和哭脸的例子
我就废话不多说了,直接上代码吧! import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolo ...
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线
文章目录 前言 一.ROC与AUC 1.ROC 2.AUC 二.代码实现 总结 前言 内容接上一篇机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线_fanstuck的博客-CSDN博客_ ...
- Python利用turtle库绘制花样螺旋正方形
文章目录 前言 一.简单的螺旋正方形 二.花样螺旋正方形 1.绘制正方形 2.花样螺旋正方形 总结 前言 对于大部分学习Python的同学来说,利用turtle库绘制图像是必经的一个学习过程,本文介绍 ...
- python利用turtle库绘制正方形绕一个顶点旋转
利用turtle库绘制正方形绕一个顶点旋转 程序如下 import turtle as t t.setup(600,600)#定义窗口尺寸 t.pensize(2.5) for i in range( ...
- Python 利用Turtle模块绘制国际象棋棋盘
使用Turtle模块绘制国际象棋棋盘 使用语言:Python 3.7.3 思路: 国际象棋是8×8的一个个小正方形,或者说是9横9纵的线组成.作画的时候,先做9横9纵的线,再填上灰色的小正方形,即可完 ...
- Python:利用matplotlib库绘制统计图(饼图、直方图、散点图、极坐标图和网格图)
1.网格图 import matplotlib.pyplot as plt import numpy as np a=np.arange(0.0,5.0,0.02) plt.plot(a,np.cos ...
最新文章
- 神经学家探寻:机器如何拥有意识!如何避免机器人伤害我们!
- 《微型计算机2014年》更新至12月下
- 微信小程序之设置不同的顶部导航栏名称
- 服务器和运行内存,服务器运行内存不够的解决方法
- CG-CTF-Web-SQL注入1
- transformers PreTrainedTokenizer
- 升级Linux下的sudo
- 苹果8a1660是什么版本_苹果7a1660是什么版本
- Vue项目玩转Ueditor(百度富文本编辑器),解决图片需要上传服务器的问题,将图片转存base64字符串。
- 浏览器未连接到互联网
- Spring Security Oauth2:授权模式、简单模式 、密码模式 和 客户端模式
- ubuntu 播放视频黑屏,没声音没画面,无法播放视频怎么办--已解决
- 【nodejs】mocha+chai+nyc基础
- HCIP-DATACOM-解题九月部分58+51题
- C语言————二进制转十进制
- 在地址栏输入一个字母后的网址
- semantic-ui基础使用
- Patching OIM 11.1.1.5.0 to 11.1.1.5.3
- java-net-php-python-java智能会议管理系统计算机毕业设计程序
- visio首要任务闪退软件设置
热门文章
- 数学之路(3)-数据分析(7)
- 手机端怎么限制wifi网速
- Java-Quartz定时器
- 玩转全球最大同性交友网站--- 开源社区GitHub
- Oracle connect by与level的使用
- NJFU软件需求分析试卷
- python 红楼梦 人物关系_用Python来理一理红楼梦里的这些关系
- [单片机][FUSB302][PD1.0][PD2.0] PD协议 Demo 例子 代码
- linux使用usb刻录光驱,linux光驱刻录
- 国务院办公厅关于2014年部分节假日安排的通知