对于算法我使用轮廓,但我只对其路径集合感兴趣。因为我已经打电话了
pylab inline
从一开始就没有内联来重写代码现在太痛苦了(许多函数必须更仔细地声明,比如np.something()而不是某些东西()等...),我是想知道是否有办法调用轮廓而不绘制等高线图? 像
这样的东西contour(image_matrix, 'No Show')?
此致
答案 0 :(得分:2)
以下是修改后的代码,用于获取声明的meshgrid中单位圆上的点。它使轮廓点比plt.contour更快,并且不会绘制点。
matplotlib._cntr是plt.contour调用的核心函数,它试图获取轮廓点。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/colorPrimary" />
<!--other content-->
</RelativeLayout>
对不起解释不好,我对python的经验不足。有关详细说明,请参阅以下链接。
链接到讨论: 的 http://matplotlib.1069221.n5.nabble.com/pyplot-Extract-contourset-without-plotting-td15868.html 强>
在讨论结束时,伊恩·托马斯先生附上了一个代码&#39; contour_test.py&#39;这可能对你有所帮助。
指向示例代码的链接: 的 http://matplotlib.1069221.n5.nabble.com/attachment/15872/0/contour_test.py 强>
答案 1 :(得分:1)
没有特定的选项来禁止contour的绘图(据我所见)。以下question似乎可以使用matplotlib._cntr
准确提供您想要的内容。
对于您的情况,通过切换回不同的gui,例如在pylab内联中实现对数字的抑制可能更简单。使用%pylab qt
然后调用cs = contour(image_matrix)
。如果没有显式调用plt.show()
,这可能无法显示任何内容,您可以使用cs
获取所需的轮廓信息。
您也可以使用类似matplotlib.interactive(False)
的内容来抑制数字。
答案 2 :(得分:0)
由于不再支持matplotlib._cntr
,因此可以使用find_contour()
中的skimage
函数。这是一个简单的代码,用于从documentation的分析函数中提取轮廓线级别0.8。
import numpy as np
from skimage import measure
# Construct some test data
x, y = np.ogrid[-np.pi:np.pi:100j, -np.pi:np.pi:100j]
r = np.sin(np.exp((np.sin(x)**3 + np.cos(y)**2)))
# Find contours at a constant value of 0.8
contours = measure.find_contours(r, 0.8)
这将沿轮廓使用(行,列)坐标的轮廓,而不是x
和y
的值。要转换为x
和y
的值,您可以使用interp1d
中的scipy
进行插值:
from scipy.interpolate import interp1d
fx = interp1d(np.arange(0,x.shape[0]), x.flatten())
fy = interp1d(np.arange(0,y.shape[1]), y.flatten())
for contour in contours:
contour[:,0] = fx(contour[:,0])
contour[:,1] = fy(contour[:,1])
简单的代码即可查看结果并进行验证:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
for contour in contours:
ax.plot(contour[:,0], contour[:,1])
fig.show()