在GIS预处理器中实现(出色的matplotlib)轮廓绘制时,结果有些不理想[请参见所附图像以获取参考]。

结果不是理想的展示折线段(橙色的圆圈区域),而是闭合的多边形环(绿色突出显示的路径)。

轮廓示例

我最好的推理逻辑。 在附加图像中从左到右,轮廓级别正在降低。 闭合的循环表明matplotlib.pyplot.contours()正在将所有值合并到所述水平的范围内-因此,闭合循环了吗?

目的是使这些大致垂直的轮廓线水平在所述形状的边界处截止。 考虑到这些轮廓的路径是用pyplot的另一种方法来抓取并绘制的-内置的遮罩和裁剪似乎可能不适用。

也许在最初的轮廓创建过程中我忽略了文档中的一个论点-还是满足描述需求的其他方法?

感谢您提供线索或智慧。

电流输入:

(meshXList,meshYList和valueZList是位于所示多边形内的各向同性网格质心坐标)

X = np.array(self.meshXList).reshape(self.numRows,self.numCols)
Y = np.array(self.meshYList).reshape(self.numRows,self.numCols)
Z = np.array(self.valueZList).reshape(self.numRows,self.numCols)

conIntrv = float(self.conIntNum.text())
minCon,maxCon = float(self.minConLineNum.text()),float(self.maxConLineNum.text())
numCon = int((maxCon-minCon)/conIntrv)
levels = np.linspace(minCon,maxCon,numCon)

contours = plt.contour(X,Y,Z,levels,antialiased=True)
conCollect = contours.collections

rawContourLines = []
for lineIdx, line in enumerate(conCollect):
    lineStrings = []
    for path in line.get_paths():
        if len(path.vertices)>1:
            lineStrings.append(path.vertices)
    rawContourLines.append(lineStrings)

更新相关解决方法:

@ tom10最衷心地暗示着对我来说应该是显而易见的。 附加图像中的灰色区域包含在meshXList,meshYList和valueZList中; 尽管未在GIS程序中选择显示。

理解valueZList不需要数字值(使用-999.99999999999),而是可以合并{None},这表明该问题的解决方案非常简单:

    emptValue = None
    self.valueZList = [emptValue]*len(self.meshXList)
    with open(valueFile, "r") as valueInput:
        reader = csv.reader(valueInput)
        for idx,row in enumerate(reader):
            if idx==0: self.valueType = row[1]
            if idx>0:
                holdingIdx = int(row[0])
                holdingVal = float(row[1])
                if '888.88' in holdingVal or '777.77' in holdingVal:
                    self.valueZList[holdingIdx] = emptValue
                else:
                    self.valueZList[holdingIdx]=holdingVal
                    if holdingVal<minValue: minValue = holdingVal
                    if holdingVal>maxValue: maxValue = holdingVal

Horray的“无类型”。 适当的边界

#1楼 票数:1 已采纳

一种方法是将边界外的区域设置为None 因此,修改标准示例以提供“开放”轮廓:

在此处输入图片说明

import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

Z[X<-1] = None
Z[X>2] = None

plt.figure()
CS = plt.contour(X, Y, Z, levels=np.arange(-.5, 2, .5))
plt.clabel(CS, inline=1, fontsize=10)
plt.title('Simplest default with labels')

plt.show()

或者,更有趣(使用Z[X*X+(Y-1)**2>3.] = None ):

在此处输入图片说明

  ask by Katalpa translate from so

未解决问题?本站智能推荐:

2回复

Matplotlib中的散点图轮廓

我有一个庞大的散点图(~100,000点),我在matplotlib中生成。 每个点在此x / y空间中都有一个位置,我想生成包含总点数的某些百分位数的轮廓。 matplotlib中是否有一个函数可以执行此操作? 我已经研究过contour(),但是我必须用这种方式编写自己的函数。
1回复

了解Matplotlib中的轮廓函数

我有以下几套: 和 我有colors = ('red', 'blue', 'green') ,当我使用matplotlib用plt.contour(x, y, Z, colors=colors)绘制轮廓时,我得到: 我期望只有三行将0区域与1区域与2区域分开。 为什
1回复

matplotlib中轮廓和轮廓f之间的颜色差异

我正在尝试制作一个使用轮廓和轮廓线的图,它们都使用相同的颜色图,绘制相同的数据。 但是,contourf仅用于以某种方式(使用屏蔽数组)绘制“重要”数据。 同时,轮廓线用于绘制所有数据。 目的是绘制一个可以获取所有信息的图表,但将注意力吸引到更重要的区域。 我几乎可以按照自己的意愿进
1回复

如何在matplotlib中获得平滑的填充轮廓?

嗨,iam试图绘制不均匀数据的填充轮廓。 在三个列表中。 我的问题是我无法获得平滑的填充轮廓。 我要做的是首先使用griddata将数据从不规则点更改为网格。 如下图所示。 看起来很奇怪。 如何将颜色变化平滑到下一个点。 提前致谢
1回复

如何在Matplotlib中以3D绘制3个轮廓

我有3个轮廓,由以下内容生成: 从外观上看,其绘制如下: 我希望将所有这些都绘制在3D图中,但是当我尝试使用以下方法绘制时: 结果图是这样的: 如何使其他两个3D轮廓很好地显示?
1回复

如何在matplotlib中更改轮廓的形状

我在matplotlib使用contour或contourf 数据是带有值的2D数组,如下所示: 我得到的结果如下。 它就像一个正方形,实际上,y范围是600 +,x范围只有350。因此,图形应看起来像矩形,而不是正方形。 但是我研究了contour和contour c
1回复

更改默认轮廓中的负值的破折号样式-matplotlib

我正在尝试使用matplotlib绘制轮廓,并且我在数据中具有负值,并且我希望它们被破折号(默认情况下matplotlib会这样做),但是我想(1)控制破折号样式(on,off)和(2 )仅更改负轮廓的颜色。 我尝试了链接中的答案: 如何在matplotlib等高线图中设置破折号长度 但
1回复

用FuncAnimation动画Matplotlib中的轮廓图[复制]

这个问题在这里已有答案: 在matplotlib 1答案中 提高重绘等高线图的速度 我有一个简单的动画我想用MatPlotLib FuncAnimation和一个等高线图。 这是我到目前为止所做的: 其中u [:,:,i]包含我要在轮廓中绘制的新Z数据。