调用轮廓而不绘制它,python,pylab内联

时间:2015-05-21 14:36:08

标签: python matplotlib contour

对于算法我使用轮廓,但我只对其路径集合感兴趣。因为我已经打电话了

pylab inline

从一开始就没有内联来重写代码现在太痛苦了(许多函数必须更仔细地声明,比如np.something()而不是某些东西()等...),我是想知道是否有办法调用轮廓而不绘制等高线图? 像

这样的东西
contour(image_matrix, 'No Show')? 

此致

3 个答案:

答案 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)

这将沿轮廓使用(行,列)坐标的轮廓,而不是xy的值。要转换为xy的值,您可以使用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()

Figure of the extracted contours