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利用单行热力图绘制好看的风向风速相关推荐

  1. python画笑脸-python 利用turtle库绘制笑脸和哭脸的例子

    我就废话不多说了,直接上代码吧! import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolo ...

  2. python turtle画彩虹-Python利用turtle库绘制彩虹代码示例_天津SEO

    天津SEO RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例: #-*- coding:utf-8 –*- f ...

  3. python画图代码彩虹-Python利用turtle库绘制彩虹代码示例

    语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为R ...

  4. python画笑脸图案-python 利用turtle库绘制笑脸和哭脸的例子

    我就废话不多说了,直接上代码吧! import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolo ...

  5. 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线

    文章目录 前言 一.ROC与AUC 1.ROC 2.AUC 二.代码实现 总结 前言 内容接上一篇机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线_fanstuck的博客-CSDN博客_ ...

  6. Python利用turtle库绘制花样螺旋正方形

    文章目录 前言 一.简单的螺旋正方形 二.花样螺旋正方形 1.绘制正方形 2.花样螺旋正方形 总结 前言 对于大部分学习Python的同学来说,利用turtle库绘制图像是必经的一个学习过程,本文介绍 ...

  7. python利用turtle库绘制正方形绕一个顶点旋转

    利用turtle库绘制正方形绕一个顶点旋转 程序如下 import turtle as t t.setup(600,600)#定义窗口尺寸 t.pensize(2.5) for i in range( ...

  8. Python 利用Turtle模块绘制国际象棋棋盘

    使用Turtle模块绘制国际象棋棋盘 使用语言:Python 3.7.3 思路: 国际象棋是8×8的一个个小正方形,或者说是9横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 ...

最新文章

  1. 神经学家探寻:机器如何拥有意识!如何避免机器人伤害我们!
  2. 《微型计算机2014年》更新至12月下
  3. 微信小程序之设置不同的顶部导航栏名称
  4. 服务器和运行内存,服务器运行内存不够的解决方法
  5. CG-CTF-Web-SQL注入1
  6. transformers PreTrainedTokenizer
  7. 升级Linux下的sudo
  8. 苹果8a1660是什么版本_苹果7a1660是什么版本
  9. Vue项目玩转Ueditor(百度富文本编辑器),解决图片需要上传服务器的问题,将图片转存base64字符串。
  10. 浏览器未连接到互联网
  11. Spring Security Oauth2:授权模式、简单模式 、密码模式 和 客户端模式
  12. ubuntu 播放视频黑屏,没声音没画面,无法播放视频怎么办--已解决
  13. 【nodejs】mocha+chai+nyc基础
  14. HCIP-DATACOM-解题九月部分58+51题
  15. C语言————二进制转十进制
  16. 在地址栏输入一个字母后的网址
  17. semantic-ui基础使用
  18. Patching OIM 11.1.1.5.0 to 11.1.1.5.3
  19. java-net-php-python-java智能会议管理系统计算机毕业设计程序
  20. visio首要任务闪退软件设置

热门文章

  1. 数学之路(3)-数据分析(7)
  2. 手机端怎么限制wifi网速
  3. Java-Quartz定时器
  4. 玩转全球最大同性交友网站--- 开源社区GitHub
  5. Oracle connect by与level的使用
  6. NJFU软件需求分析试卷
  7. python 红楼梦 人物关系_用Python来理一理红楼梦里的这些关系
  8. [单片机][FUSB302][PD1.0][PD2.0] PD协议 Demo 例子 代码
  9. linux使用usb刻录光驱,linux光驱刻录
  10. 国务院办公厅关于2014年部分节假日安排的通知