当调用 plot_home() 时,我最初渲染了 2 个图。但是,当我单击每个绘图时,我希望它调用一个python函数plot_parameter(),该函数将根据单击的绘图呈现另一个绘图。
我尝试编写此代码,但我不知道如何检测是单击第一个绘图还是单击第二个绘图。如果单击第一个图,我想绘制一个图形,如果单击第二个绘图,我想绘制另一个图形。如何使这些绘图可点击,以便在单击时打开另一个绘图?
from flask import Flask
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import mpld3
app = Flask(__name__)
@app.route('/')
def home():
return plot_home()
def onclick(event):
print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(event.button, event.x, event.y, event.xdata, event.ydata)
return plot_parameter()
@app.route('/')
def plot_home():
fig = plt.figure()
fig.set_size_inches(5,5)
parameter_values = [1,2,3,4]
axis = fig.add_subplot(211)
axis.plot(parameter_values,'g')
fig.canvas.mpl_connect('button_press_event', onclick)
parameter_values = [5,6,7,8]
axis = fig.add_subplot(212)
axis.plot(parameter_values,'g')
fig.tight_layout()
fig.canvas.mpl_connect('button_press_event', onclick)
mpld3.show()
@app.route('/')
def plot_parameter():
fig = plt.figure()
fig.set_size_inches(5,5)
if(first plot is clicked plot this graph)
parameter_values = [9,10,11,12]
axis = fig.add_subplot(211)
axis.plot(parameter_values,'g')
if(second plot was clicked plot this graph)
parameter_values = [13,14,15,16]
axis = fig.add_subplot(212)
axis.plot(parameter_values,'g')
mpld3.show()
if __name__ == '__main__':
app.run(debug=True)
mpld3 库目前不支持图像的事件处理。Matplotlib 通常支持图像的事件处理。但是,当与烧瓶一起使用时,我们需要将画布上的matplotlib图写为图像,因为无法处理事件。最好的解决方案是使用 d3js 和 javascript。我们可以从 python 返回要绘制的值 t html,然后使用 d3js 绘制它,它支持绘图的事件处理。