Как я могу динамически нарисовать сюжет kaborn kde? - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь показать график kde поверх некоторого фонового изображения. Для этого я показываю фоновое изображение на сюжете matplotlib, а затем накладываю на него участок seaborn kde. В конце я хочу, чтобы этот график работал в интерактивном режиме, всякий раз, когда пользователь изменяет значение ползунка или нажимает кнопку исчезновения / яркости, я хочу перерисовывать график морского KDE только вместо того, чтобы рисовать всю фигуру с нуля.
В настоящее время я реализовал некоторую логику, в которой всякий раз, когда пользователь нажимает кнопку исчезновения / яркости или изменяет значение ползунка, он рисует весь график с нуля, а также требует времени, потому что данные огромны.

Это функция построения графика:

def draw_heatmap_on_floor_plan(self, slider_value=4, img_alpha=None, valinit=4):
    #self.trans_point is pandas dataframe which read value from csv
    new_points = self.trans_point[self.trans_point["hours"].between(slider_value,
                                                                    slider_value, inclusive=True)]
    img = plt.imread(os.path.join("input", "level_2.png"))
    fig, ax = plt.subplots()
    ax.imshow(img, alpha=img_alpha)
    sns.kdeplot(new_points["x"], new_points["y"], cmap="jet", shade=True, ax=ax,
              alpha=0.8, beta=0.4)
    ax.collections[0].set_alpha(0)
    #axis for vivid button
    axnext = plt.axes([0.81, 0.05, 0.1, 0.040])
    #axis for fade button
    axprev = plt.axes([0.81, 0.1, 0.1, 0.040])
    #axis for heatmap slider
    ax_slider = plt.axes([0.2, 0.05, 0.49, 0.040])
    heatmap_slider = Slider(ax=ax_slider, label='hours', valmin=4, valmax=11, valinit=valinit, valstep=1)
    ax.set_xticks([])
    ax.set_yticks([])
    ax.set_xlabel('')
    ax.set_ylabel('')
    heatmap_slider.on_changed(self.heatmap_change)
    vivid_button = Button(axnext, 'Vivid Map')
    fade_button = Button(axprev, 'Fade Map')
    vivid_button.on_clicked(self.vivid_image)
    fade_button.on_clicked(self.fade_image)
    mng = plt.get_current_fig_manager()
    mng.window.state('zoomed')
    plt.show()

Код события щелчка исчезающей кнопки:

def fade_image(self, event):
    plt.close()
    self.draw_heatmap_on_floor_plan(slider_value=self.slider_value, img_alpha=0.3, valinit=self.slider_value)

Код для яркого нажатия кнопки evnt:

def vivid_image(self, event):
    plt.close()
    self.draw_heatmap_on_floor_plan(slider_value=self.slider_value, img_alpha=None, valinit=self.slider_value)

Код события смены ползунка:

def heatmap_change(self, slider_value):
    plt.close()
    self.slider_value = slider_value
    self.draw_heatmap_on_floor_plan(self.slider_value, img_alpha=None, valinit=slider_value)
...