PyPlot - 使用选取器突出显示的点

时间:2018-01-09 15:34:15

标签: python matplotlib

我正在使用pick_event绘制时间序列,并希望在选中后突出显示一个点(使用import matplotlib.pyplot as plt class MyPlot(object): def __init__(self, parent=None): super(self.__class__, self).__init__() def makePlot(self): fig = plt.figure('Test', figsize=(10, 8)) ax = plt.subplot(111) x = range(0, 100, 10) y = (5,)*10 ax.plot(x, y, '-', color='red') ax.plot(x, y, 'o', color='blue', picker=5) plt.connect('pick_event', self.onPick) plt.show() def onPick(self, event=None): this_point = event.artist x_value = this_point.get_xdata() y_value = this_point.get_ydata() ind = event.ind print 'x:{0}'.format(x_value[ind][0]) print 'y:{0}'.format(y_value[ind][0]) if __name__ == '__main__': app = MyPlot() app.makePlot() )。发现了一个类似的问题here,但是无法理解它。这是我所做的基本例子:

# Show Word Cloud
mainPanel(
  plotOutput("plot",width = "500px", height="500px")
)

选中的点应标记(例如将其标记为黄色),但是当我选择另一个点时,它应重新设置为蓝色,并且只有新选择的点才会突出显示(没有注释,只有颜色变化)。我怎么能这样做?

1 个答案:

答案 0 :(得分:5)

您可以定义一个新的图表(以黄色显示),该图表在开头是空的。单击一个点后,将该图的数据更改为拾取点的数据并重绘画布。

import matplotlib.pyplot as plt

class MyPlot(object):

    def makePlot(self):
        self.fig = plt.figure('Test', figsize=(10, 8))
        ax = plt.subplot(111)
        x = range(0, 100, 10)
        y = (5,)*10
        ax.plot(x, y, '-', color='red')
        ax.plot(x, y, 'o', color='blue', picker=5)
        self.highlight, = ax.plot([], [], 'o', color='yellow')
        self.cid = plt.connect('pick_event', self.onPick)
        plt.show()

    def onPick(self, event=None):
        this_point = event.artist
        x_value = this_point.get_xdata()
        y_value = this_point.get_ydata()
        ind = event.ind
        self.highlight.set_data(x_value[ind][0],y_value[ind][0])
        self.fig.canvas.draw_idle()

if __name__ == '__main__':
    app = MyPlot()
    app.makePlot()