在matplotlib中绘图后调整标记的颜色、大小和类型

4 投票
1 回答
2091 浏览
提问于 2025-04-17 15:55

我画了一些散点图,然后重新绘制了画布:

self.display_points = ax.scatter(x,y)
wx.CallAfter(self.display.canvas.draw)

我有一个对象,它包含了颜色。如果用户在界面上改变了这个颜色,我想在不重新绘制数据的情况下,直接改变这些点的颜色。

def _color_changed(self):
    if hasattr(self, '_display_points'): 
        self._display_points.set_facecolors(self.color)
        wx.CallAfter(self.display.canvas.draw)

那要怎么做呢?比如说,如何改变标记的大小和类型……也就是说,X_display_points.set_X 中应该是什么,才能改变每个绘制的组件。这些属性在哪里可以找到呢?谢谢。

1 个回答

3

scatter 函数会返回一个叫做 PathCollection 的对象。这个对象在之后设置属性时功能比较有限。Collection 这个类的家族牺牲了后期更新的能力,以换取更高效的绘图速度。

如果你并没有利用 scatter 来单独设置每个点的大小和颜色,那么使用下面的代码会更好:

self.display_points, = ax.plot(x, y, marker='o', linestyle='none')

这样你会得到一个 Line2D 对象,它看起来和你的散点图一模一样。Line2D 有一个更灵活的 api,其中包括 set_markerset_markersize 这些功能。

撰写回答