繁体   English   中英

Contourf在有限数据上绘制空白。 过去的答案不正确

contourf plots whitespace over finite data. Past answers do not correct

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

代码中的注释包括使用np.linespace限制的建议修复程序。 尽管从问题“ contourf()在有限数据上绘制空白”给出了以下给出的答案,但这仍不能解决问题:如果要确保包括所有数据,则可以定义自己的级别来使用

plt.contourf(x,y,Z,np.linspace(Z.min(),Z.max(),100))认为提供的解决方案有效,然后在较早的文章中却找不到。 该声明是指出问题未被发现或无法重复,因此从未给出答案。 此处的代码在pi和win7平台上均重现了该问题,并且是可重复的。 多余的空白区域似乎与平行的轮廓线相关联,这些轮廓线不会在图像中循环。 注意代码中的注释,其中可以修改xc来更改数据的形状。

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

fig = plt.figure(figsize=(16,12))   #fill the screen
fig.canvas.set_window_title('<Test>')
ax = fig.gca()               # to work in 2d contour

x=[  274.0, 3174.6, 6075.2, 8975.8, 11876.4, 14777.0, 14777.0 , 11876.4, 8975.8,
  6075.2, 3174.6,  274.0, 274.0, 3174.6, 6075.2, 8975.8, 11876.4, 14777.0,
 14777.0, 11876.4, 8975.8, 6075.2, 3174.6, 274.0,   274.0,  3174.6, 6075.2,
  8975.8, 11876.4, 14777.0, 14777.0, 11876.4, 8975.8, 6075.2, 3174.6,  274.0 ]

y=[ 6737.2,  6737.2, 6737.2, 6737.2, 6737.2, 6737.2, 9907.4, 9907.4, 9907.4,
  9907.4, 9907.4, 9907.4, 13077.6, 13077.6,13077.6, 13077.6, 13077.6, 13077.6,
 16247.6, 16247.6, 16247.6, 16247.6, 16247.6, 16247.6, 19418.0, 19418.0, 19418.0,
 19418.0, 19418.0, 19418.0, 22588.2, 22588.2, 22588.2, 22588.2, 22588.2, 22588.2]

z=[154.11000061, 142.88999939, 137.19000244, 137.5, 143.42999268,
   155.47000122, 140.53999329, 126.16000366, 118.51999664, 118.43000031,
 125.22000122, 138.96000671, 131.03999329, 116.23999786, 108.23999786,
 108.90000153, 116.66999817, 132.6000061, 132.75999451, 117.56999969,
 111.65000153, 109.80000305, 117.29000092, 132.11000061, 141.44000244,
 127.08000183, 120.48000336, 120.58999634, 127.70999908, 141.05999756,
 156.22999573, 145.16000366, 139.33999634, 139.27999878, 145.63000488,
 157.00999451]

print(z)
xmax=(np.amax(x))
xmin=(np.amin(x))
ymax=(np.amax(y))
ymin=(np.amin(y))
zmax=(np.amax(z))
zmin=(np.amin(z))
xc=1 #change this from -40 to 1 to 40
yc=xc
Zheight=zmin
if xc==0:
    xc=.001
if yc==0:
    yc=.001
xcurv=int(1000000/xc)
ycurv=int(1000000/yc)  
z_surf = ((((x-(xmax+xmin)/2)/10)*((x-(xmax+xmin)/2)/10))/-xcurv + (((y-(ymax+ymin)/2)/10*(y-(ymax+ymin)/2)/10))/-ycurv ) +Zheight
zcorr=z-z_surf
zcorrmin=(np.amin(zcorr))
zcorrmax=(np.amax(zcorr))
X,Y= np.meshgrid(x,y)
Z = griddata((x, y), zcorr, (X, Y),method='nearest')
print("Zmin=",zmin,"Zmax=",zmax)
print("Zcorrmin=",zcorrmin,"Zcorrmax=",zcorrmax)

#im=ax.contourf(X, Y, Z, 15, alpha=.75, cmap = 'rainbow')   #white areas in contour map
im=ax.contourf(X, Y, Z,  np.linspace(Z.min(), Z.max(), 15), alpha=.75, cmap = 'rainbow') #supposed to fix white space but doesn't (3d surface and wireframe work fine with this data)
C = plt.contour(X, Y, Z, 15, colors='black')
plt.clabel(C, inline=1, fontsize=10)

v = np.linspace(zcorrmin, zcorrmax, 15, endpoint=True)
fig.colorbar(im,ax=ax,ticks=v)

plt.xticks(())
plt.yticks(())
plt.show()
1 个回复

问题在于网格过于粗糙。 图中的某些部分不会出现轮廓。

解决方案是将数据插值到更细的网格上。

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

fig = plt.figure(figsize=(16,12))   #fill the screen
fig.canvas.set_window_title('<Test>')
ax = fig.gca()               # to work in 2d contour

x=[  274.0, 3174.6, 6075.2, 8975.8, 11876.4, 14777.0, 14777.0 , 11876.4, 8975.8,
  6075.2, 3174.6,  274.0, 274.0, 3174.6, 6075.2, 8975.8, 11876.4, 14777.0,
 14777.0, 11876.4, 8975.8, 6075.2, 3174.6, 274.0,   274.0,  3174.6, 6075.2,
  8975.8, 11876.4, 14777.0, 14777.0, 11876.4, 8975.8, 6075.2, 3174.6,  274.0 ]

y=[ 6737.2,  6737.2, 6737.2, 6737.2, 6737.2, 6737.2, 9907.4, 9907.4, 9907.4,
  9907.4, 9907.4, 9907.4, 13077.6, 13077.6,13077.6, 13077.6, 13077.6, 13077.6,
 16247.6, 16247.6, 16247.6, 16247.6, 16247.6, 16247.6, 19418.0, 19418.0, 19418.0,
 19418.0, 19418.0, 19418.0, 22588.2, 22588.2, 22588.2, 22588.2, 22588.2, 22588.2]

z=[154.11000061, 142.88999939, 137.19000244, 137.5, 143.42999268,
   155.47000122, 140.53999329, 126.16000366, 118.51999664, 118.43000031,
 125.22000122, 138.96000671, 131.03999329, 116.23999786, 108.23999786,
 108.90000153, 116.66999817, 132.6000061, 132.75999451, 117.56999969,
 111.65000153, 109.80000305, 117.29000092, 132.11000061, 141.44000244,
 127.08000183, 120.48000336, 120.58999634, 127.70999908, 141.05999756,
 156.22999573, 145.16000366, 139.33999634, 139.27999878, 145.63000488,
 157.00999451]


xmax=(np.amax(x))
xmin=(np.amin(x))
ymax=(np.amax(y))
ymin=(np.amin(y))
zmax=(np.amax(z))
zmin=(np.amin(z))

z_surf = ((((x-(xmax+xmin)/2)/10)*((x-(xmax+xmin)/2)/10))/-1e6 + \
          (((y-(ymax+ymin)/2)/10*(y-(ymax+ymin)/2)/10))/-1e6 ) + zmin
zcorr=z-z_surf

X,Y= np.meshgrid(np.linspace(xmin, xmax, 51),np.linspace(ymin, ymax, 51))
Z = griddata((x, y), zcorr, (X, Y),method='linear')

im=ax.contourf(X, Y, Z,  15, alpha=.75, cmap = 'rainbow')
C = ax.contour(X, Y, Z, 15, colors='black')

ax.clabel(C, inline=1, fontsize=10)

fig.colorbar(im,ax=ax)

ax.scatter(x,y,c="k", label="original grid")
ax.scatter(X,Y,c="crimson", s=4, label="fine grid")
ax.legend(framealpha=1)
plt.xticks(())
plt.yticks(())
plt.show()

在这里,我用黑点标记了原始网格,并用红点标记了精致的网格。 插值仍然是线性的。 但是对于更平滑的曲线,您可以使用method='cubic'

在此处输入图片说明

1 Contourf()在有限数据上绘制空白

我正在尝试通过以下程序使用matplotlib.pyplot.contourf()绘制3D图表: 在大多数情况下,它运行良好。 但是,在某些地方绘制了无用的空白区域。 可以在此处找到生成的图(对不起,我没有足够的声誉点来直接附加图像) 该程序的目的是计算二维numpy数组的1个 ...

2 Matlab Contourf绘制插值

嗨,如果我有这样的数据,例如 我想生成一个contourf (即contourf(x,y,z); )图,该图摆脱了步骤,即结果应该是边界处的平滑曲线。 ...

3 熊猫的Ewma,但每周滚动数据超过了。

我正在尝试以“每周滚动”的方式计算大熊猫的ewma。 例如,可以说今天是星期二。 然后,仅使用星期二的数据即可计算出今天的ewma。 (本周二,上周二,前一个周二,依此类推)。 现在明天我们将不得不做同样的事情,但是星期三等等。 完成此操作后,如果我想获取包括一周中每一天的“每周滚动e ...

4 ArtistAnimation使用contourf绘制模型图

使用“contourf”方法时,ArtistAnimation 是否有效? 我正在尝试构建模型预测的 MP4 动画。 我使用的方法类似于 MetPy Monday 视频系列之一中显示的方法,您可以将绘图附加到一个空的艺术家数组(用于雷达绘图)。 雷达/卫星图似乎可以成功构建动画,因为它们使用“pc ...

2020-05-01 00:09:39 1 390   metpy
5 我如何跟踪正确答案?

我不知道如何跟踪正确答案。 我需要一些东西来跟踪打印正确的时间。 我不知道该怎么做。 我知道我只需要记录正确并除以四。 四,因为这就是我的测验中有多少问题。 ...

2015-09-16 18:39:05 1 1099   java
6 如何检查表格数据是否有正确答案

所以我有这个: Index.php: 根据网站从数据库中获取的数据,创建表单中的表格。 例: 一旦用户单击“ Verzenden”,就必须检查他们在输入中填写的内容是否与PLU代码相同。 plu代码位于数据库中,并连接到产品。 如果填写的答案与plu代码不同( ...

8 当Alpha <1时,Matplotlib Contourf绘制不需要的轮廓

我在Python 2.7中使用matplotlib来绘制填充的等高线图。 我想在图像上叠加这个,所以我使用alpha关键字使图表半透明。 当我这样做时,轮廓的主体是正确的透明度,但contourf()在不同级别之间的边界上绘制不需要的线。 我试图用关键字参数linecolor ='none ...

9 2x2 Contourf 图共享相同的颜色条

我想在以下 2x2 绘图的右侧添加一个颜色条。 我一直在回顾上一个问题Matplotlib 2 Subplots, 1 Colorbar的解决方案。 但是,我有四个contourf()子图,而发布的解决方案使用imshow()图。 我不知道如何将以前的解决方案应用于我的情节的ax和cs对 ...

10 在底图上对齐数据(contourf)

我已经开始使用底图,这似乎很有用。 如果我在纬度/经度网格上以填充轮廓绘制一些全局数据,则效果很好:Iff我将lat_0和lon_0保留为零。 一旦更改了中心位置,地图就会移动,但数据不会移动。 我将不胜感激。 我已经创建了一个简单的代码版本,并使用一些简单的示例数据来说明问题。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM