python如何绘制极坐标轮廓图contourf

 更新时间:2023年08月16日 09:34:44   作者:小朱小朱绝不服输  
这篇文章主要介绍了python如何绘制极坐标轮廓图contourf问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python绘制极坐标轮廓图contourf

任务:将每个象限的风速,距离,角度绘制成极坐标轮廓图。

使用极坐标画等直线图,可以用极地图的 ax.contour ax.contourf

1.变量计算

每个象限的风速,距离就不再说怎么画了,这里说下角度的计算。

两个经纬度之间的夹角(与正北方向的夹角):

# 点1到点2方向沿逆时针方向转到正北方向的夹角
def LatLng2Degree(LatZero,LngZero,Lat,Lng):
    """
    Args:
        point p1(latA, lonA)
        point p2(latB, lonB)
    Returns:
        bearing between the two GPS points,
        default: the basis of heading direction is north
    """
    radLatA = math.radians(LatZero)
    radLonA = math.radians(LngZero)
    radLatB = math.radians(Lat)
    radLonB = math.radians(Lng)
    dLon = radLonB - radLonA
    y = math.sin(dLon) * math.cos(radLatB)
    x = math.cos(radLatA) * math.sin(radLatB) - math.sin(radLatA) * math.cos(radLatB) * math.cos(dLon)
    brng = math.degrees(math.atan2(y, x))
    brng = (brng + 360) % 360
    return brng

四个象限的距离,风速,角度一一对应。

2.极坐标绘制ax.contourf

import numpy as np
import matplotlib.pyplot as plt
#-- Generate Data -----------------------------------------
# Using linspace so that the endpoint of 360 is included...
azimuths = np.radians(np.linspace(0, 360, 20))
zeniths = np.arange(0, 70, 10)
r, theta = np.meshgrid(zeniths, azimuths)
values = np.random.random((azimuths.size, zeniths.size))
#-- Plot... ------------------------------------------------
fig, ax = plt.subplots(subplot_kw=dict(projection='polar'))
ax.contourf(theta, r, values)
plt.show()

首先,创建极坐标轴,绘制轮廓图。

fig, ax = subplots(subplot_kw=dict(projection='polar'))
cax = ax.contourf(theta, r, values, nlevels)

参数分别为theta:角度,r:半径,values:轮廓的实际值,nlevels:要绘制的轮廓图的层数。

这里theta, r, values 都需要是二维数组,需要通过列表转化为列。

相当于需要先构造网格矩阵,对于坐标轴,一般使用

r, theta = np.meshgrid(zeniths, azimuths)

np.meshgrid函数去构造。

一般情况下,theta, r, values的对应关系是:

可以通过reshape将值转化为二维数组

这里可以使用:

theta = np.radians(azimuths)
zeniths = np.array(zeniths)
values = np.array(values)
values = values.reshape(len(azimuths), len(zeniths))
r, theta = np.meshgrid(zeniths, np.radians(azimuths))

但当theta, r, values一一对应时,需要插值实现。

这里记得将角度转化为弧度

r = np.array(r)
v = np.array(v)
angle = np.array(angle)
angle = np.radians(angle)
angle1, r1 = np.meshgrid(angle, r)  # r和angle构造网格矩阵
v_new = griddata((angle, r), v, (angle1, r1), method='linear')
cax = ax.contourf(angle1, r1, v_new, 20, cmap='jet')

这里python插值可以参考:python插值(scipy.interpolate模块的griddata和Rbf)

可以解释一下使用Rbf插值会报错的原因,是因为有的方位角相同,比如多行是0度,这样在使用Rbf插值的时候,要求矩阵可逆,则会出现报错的情况。

插值完以后,这里还有一个点,就是把0度调整为正北方向。

ax.set_theta_zero_location("N")
ax.set_theta_direction(-1)

运行结果:

可以看到四个象限的风速就用极坐标轮廓图描述出来了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python线程创建和终止实例代码

    Python线程创建和终止实例代码

    这篇文章主要介绍了Python线程创建和终止实例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 利用Python裁切tiff图像且读取tiff,shp文件的实例

    利用Python裁切tiff图像且读取tiff,shp文件的实例

    这篇文章主要介绍了利用Python裁切tiff图像且读取tiff,shp文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python图像处理之简单画板实现方法示例

    Python图像处理之简单画板实现方法示例

    这篇文章主要介绍了Python图像处理之简单画板实现方法,结合实例形式分析了Python基于cv2模块与numpy模块的数值计算及矩形图形绘制简单操作技巧,需要的朋友可以参考下
    2018-08-08
  • 关于Python中 循环器 itertools的介绍

    关于Python中 循环器 itertools的介绍

    循环器是对象的容器,包含有多个对象。通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器将依次返回一个对象。直到所有的对象遍历穷尽,循环器将举出StopIteration错误。这篇文章将对此做一个详细介绍,感兴趣的小伙伴请参考下面文字内容
    2021-09-09
  • Python轻松读取TOML文件告别手动编辑配置文件

    Python轻松读取TOML文件告别手动编辑配置文件

    这篇文章主要为大家介绍了Python轻松读取TOML文件告别手动编辑配置文件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python3 最常用的三种装饰器语法汇总

    python3 最常用的三种装饰器语法汇总

    这篇文章主要介绍了python3 最常用的三种装饰器语法总结,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)

    Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)

    这篇文章主要介绍了Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Python实现农历转换教程详解

    Python实现农历转换教程详解

    农历,是我国现行的传统历法。它是根据月相的变化周期,每一次月相朔望变化为一个月,参考太阳回归年为一年的长度,并加入二十四节气与设置闰月以使平均历年与回归年相适应。本文将用Python实现农历转换,需要的可以参考一下
    2022-03-03
  • PyQt5多线程刷新界面防假死示例

    PyQt5多线程刷新界面防假死示例

    今天小编就为大家分享一篇PyQt5多线程刷新界面防假死示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python 中random模块的常用方法总结

    python 中random模块的常用方法总结

    这篇文章主要介绍了python 中random的常用方法总结的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论