Matplotlib 污染玫瑰图

Matplotlib 污染玫瑰图,matplotlib,mesh,Matplotlib,Mesh,我正在尝试创建一个污染玫瑰图,如链接中所述 回复中的示例是有效的,但当我使用我的数据时,它给出了一个奇怪的图。有什么建议我哪里出了问题吗?多谢各位 import matplotlib.pyplot as plt import numpy as np wd = [90.,297.,309.,336.,20.,2.,334.,327.,117.,125.,122.,97.,95.,97.,103.,106.,125.,148.,147.,140.,141.,145.,144.,151.,161.]

我正在尝试创建一个污染玫瑰图,如链接中所述

回复中的示例是有效的,但当我使用我的数据时,它给出了一个奇怪的图。有什么建议我哪里出了问题吗?多谢各位

import matplotlib.pyplot as plt
import numpy as np

wd = [90.,297.,309.,336.,20.,2.,334.,327.,117.,125.,122.,97.,95.,97.,103.,106.,125.,148.,147.,140.,141.,145.,144.,151.,161.]
ws = [15,1.6,1.8,1.7,2.1,1.6,2.1,1.4,3,6.5,7.1,8.2,10.2,10.2,10.8,10.2,11.4,9.7,8.6,7.1,6.4,5.5,5,5,6]
oz = [10.,20.,30.,40.,50.,60.,70.,80.,90.,100.,110.,120.,90.,140.,100.,106.,125.,148.,147.,140.,141.,145.,144.,151.,161.]

pi_fac = 22/(7*180.)
wd_rad = [w * pi_fac for w in wd]
ws_r = np.linspace(min(ws),max(ws),16)

WD,WS = np.meshgrid(wd_rad,ws_r) 
C = oz + np.zeros((len(ws_r),len(wd)),dtype=float)
C = np.ma.masked_less_equal(C,10)

fig, ax = plt.subplots(subplot_kw={"projection":"polar"})
ax.pcolormesh(WD,WS,C,vmin=10, vmax=170) # I tried different vmin and vmax too

plt.show()

链接的帖子假设你有一个规则的方向和速度网格,但你的输入似乎是非常无序的组合

要根据
oz
值创建带有彩色区域的绘图,可以尝试
tricontourf
tricontourf
接受不需要位于网格上的X、Y和Z值,并创建等高线图。虽然它适用于矩形布局,但也可能适用于您的情况。但是,当从360º交叉到0º时,它会有一个不连续性

此示例的绘图还绘制了一个颜色条,以显示
oz
值的哪个范围对应于哪个颜色
vmin
vmax
可以更改此颜色映射

导入matplotlib.pyplot作为plt
将numpy作为np导入
wd=[90297309336,20,2334327117,125,122,97,95,97,103,106,125,148147140,141,145,144,151,161]
ws=[15,1.6,1.8,1.7,2.1,1.6,2.1,1.4,3,6.5,7.1,8.2,10.2,10.8,10.2,11.4,9.7,8.6,7.1,6.4,5,5,5,6]
盎司=[10,20,30,40,50,60,70,80,90,100,110,120,90,140,100,106,125,148,147,140,141,145,144,151,161]
图,ax=plt.子地块(子地块_kw={“投影”:“极坐标”})
cont=ax.tricontourf(np.radians(np.array(wd)),ws,oz,cmap='hot')
打印颜色条(续)
plt.show()

使用
ax.scatter(np.radians(np.array(wd)),ws,c=oz,cmap='hot',vmax=250)
您可以创建散点图来了解输入着色时的外观

您可能希望合并Python,以获得类似windrose的极坐标图

另一种方法可能更接近于链接问题的目的,即使用scipy的
interpolate.griddata
将数据映射到网格。要去除没有数据的区域,可以使用“无”的“下”色,前提是
vmin
大于零

导入matplotlib.pyplot作为plt
将numpy作为np导入
从scipy导入插值
wd=[90297309336,20,2334327117,125,122,97,95,97,103,106,125,148147140,141,145,144,151,161]
ws=[15,1.6,1.8,1.7,2.1,1.6,2.1,1.4,3,6.5,7.1,8.2,10.2,10.8,10.2,11.4,9.7,8.6,7.1,6.4,5,5,5,6]
盎司=[10,20,30,40,50,60,70,80,90,100,110,120,90,140,100,106,125,148,147,140,141,145,144,151,161]
wd_rad=np.弧度(np.阵列(wd))
oz=np.array(oz,dtype=np.float)
WD,WS=np.meshgrid(np.linspace(0,2*np.pi,36),np.linspace(min(WS),max(WS),16))
Z=插值.griddata((wd_rad,ws),oz,(wd,ws),method='linear')
图,ax=plt.子地块(子地块_kw={“投影”:“极坐标”})
cmap=plt.get\u cmap('hot'))
cmap.set_在('none'下)
img=ax.pcolormesh(WD,WS,Z,cmap=cmap,vmin=20)
打印颜色条(img)
plt.show()

你能粘贴正在工作的代码并包含你所得到的奇怪情节的图片吗?如果这回答了你的问题,你可能会认为它是被接受的。