#python #matplotlib #shapley
Вопрос:
Я успешно построил фигуру matplotlib, которая отображает объекты с несколькими развертываниями Шепли <shapely.readthedocs.io> на основе значения ползунка. Каждый раз, когда значение ползунка изменяется, при выполнении функций обновления(val) программа очищает свою единственную ось и перерисовывает заголовок, метки, линии сетки и все полигоны внутри Мультиполигона.
Это текущая рабочая версия (смотрите комментарии):
»’
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.2, bottom=0.2)
ax_slider = plt.axes([0.25, 0.1, 0.65, 0.03])
slider = Slider(
ax=ax_slider,
label="Epsilon",
valmin=min_epsilon,
valmax=max_epsilon,
valstep=precision,
valinit=max_epsilon-precision,
color='red'
)
def update(val):
#TITLES ONLY SHOW IF I RE-PLOT THEM IN UPDATE FUNCTION
ax.clear()
ax.set_facecolor('tab:gray')
ax.set_title("Freespace Diagram")
ax.set_xlabel(f2)
ax.set_ylabel(f1)
#GRIDLINES ONLY SHOW IF I RE-PLOT IN UPDATE FUNCTION
ax.set_xticks(self.__x_edges)
ax.set_yticks(self.__y_edges)
ax.set_yticklabels([])
ax.set_xticklabels([])
ax.grid(color='black', linewidth = 0.25, alpha = 0.4)
for geom in multipolygons[int(val)].geoms:
xs, ys = geom.exterior.xy
ax.fill(xs, ys, alpha=0.75, fc='w', ec='none')
fig.canvas.draw_idle()
update(max_epsilon-precision)
slider.on_changed(update)
plt.gca().set_aspect('equal', adjustable='datalim')
plt.show()
»’
Я не знаю, как это сделать, хотя я предполагаю, что возможно иметь две разные оси, где я могу очистить и перерисовать мультиполигоны отдельно.
Как эта концепция (посмотрите в комментариях):
»’
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.2, bottom=0.2)
ax_slider = plt.axes([0.25, 0.1, 0.65, 0.03])
slider = Slider(
ax=ax_slider,
label="Epsilon",
valmin=min_epsilon,
valmax=max_epsilon,
valstep=precision,
valinit=max_epsilon-precision,
color='red'
)
#SET TITLE AND LABLES ONLY ONCE
ax.set_facecolor('tab:gray')
ax.set_title("Freespace Diagram")
ax.set_xlabel(f2)
ax.set_ylabel(f1)
#SET GRIDLINES ONLY ONCE
ax.set_xticks(self.__x_edges)
ax.set_yticks(self.__y_edges)
ax.set_yticklabels([])
ax.set_xticklabels([])
ax.grid(color='black', linewidth = 0.25, alpha = 0.4)
#HAVE ANOTHER AXIS OR SOMETHING WHERE MULTIPOLYGONS CAN BE PLOTTED
ax_2 = some.axis.overlapping.first.axis.with.grid.and.title
def update(val):
ax_2.clear()
for geom in multipolygons[int(val)].geoms:
xs, ys = geom.exterior.xy
ax_2.fill(xs, ys, alpha=0.75, fc='w', ec='none')
fig.canvas.draw_idle()
update(max_epsilon-precision)
slider.on_changed(update)
plt.gca().set_aspect('equal', adjustable='datalim')
plt.show()
»’
The code directly above is only a concept. I am looking for any solution where I do not need to clear the title, labels and gridlines anytime the slider updates.
Thanks!