【问题标题】:Matplotlib: how to remove just one contour element from axis with other plotted elements?Matplotlib:如何从轴上仅删除一个轮廓元素与其他绘制元素?
【发布时间】:2015-06-04 22:17:31
【问题描述】:

我正在尝试对高斯混合(高斯混合模型)的均值和协方差的估计进行动画处理,我需要在每次迭代时更新均值和协方差图。

重绘方法非常简单,因为我使用具有set_data 方法的行,我可以在每次更新时调用该方法。不幸的是,更新协方差是另一回事,因为 contour 元素表示为 QuadContourSet 对象并且没有 set_data 方法。

这是一个玩具示例:

import numpy as np
from matplotlib import mlab

# Toy data points (these are constant)
plt.plot(np.arange(-3,3,0.1), np.arange(-3,3,0.1))

x = np.arange(-5.0, 5.0, 0.1)
y = np.arange(-5.0, 5.0, 0.1)
X, Y = np.meshgrid(x, y)

# First toy iteration
Z1 = mlab.bivariate_normal(X, Y, 
                           1, 1, 
                           0, 0)

covariance1 = plt.contour(X, Y, Z1)

# Second toy iteration
Z2 = mlab.bivariate_normal(X, Y, 
                       1, 1, 
                       0, 3)

covariance2 = plt.contour(X, Y, Z2)

在实际问题中,我绘制均值、方差和数据点,我不想清除整个轴。

问题是如何在不删除其他元素的情况下删除第一个轮廓covariance1

【问题讨论】:

    标签: python matplotlib contour


    【解决方案1】:
    for coll in covariance1.collections:
        coll.remove()
    

    然后更新。

    【讨论】:

    • 非常简单!我试过for coll in plt.gca().collections: 谢谢!
    • 这似乎不适用于 3D 轮廓(即来自mplot3d 工具包的contourf):coll.remove() 给出:collection._remove_method = lambda h: self.collections.remove(h) ValueError: list.remove(x): x not in list 任何想法正确删除此类 3D 轮廓? (可以coll.set_visible(False),但元素仍然存在)
    • 对不起,我的错 - remove() 也适用于 3D 轮廓。我的问题是由于动画中的某个点没有创建轮廓线(水平平面没有水平轮廓!)
    • 如果你使用contourf,你如何让它工作?我可以删除轮廓线,但线条之间的阴影区域仍然存在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2012-08-17
    • 2012-08-01
    相关资源
    最近更新 更多