Python中带有两个滑块的交互式轮廓图

时间:2019-07-08 15:09:56

标签: python matplotlib plot contour

我正在尝试使用Python绘制交互式轮廓图。我有一个依赖于两个参数ke和ki的函数,我想看看当我改变这两个值时轮廓图如何演变。

我想做的就是他们在这里取得的成就: Interactive matplotlib plot with two sliders

我已经修改了上面链接中的代码,以使其适用于我自己的示例。但是,由于我对制作交互式轮廓图感兴趣(与上面链接中的轮廓图一样,它只是常规图),所以我遇到了很多错误。

我找到了第二个链接,在那里他们正好解决了我的问题: Matplotlib: contour plot with slider widget

现在,我的代码是我在上面的链接中找到的两个代码的混合体,但仍然无法正常工作。这是代码:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as pyl
from matplotlib.contour import QuadContourSet
from matplotlib.widgets import Slider

# parameters of the system
parameters = {'ka':2, 'la':0, 'za':3, 'lr':6, 'kr':1, 'beta':2.0, 'e0':1.0, 's':1e-1, 'p':0}

ka, kr = parameters['ka'], parameters['kr']
la, lr = parameters['la'], parameters['lr']
za = parameters['za']

kar = ka + kr
lar = (ka*la + kr*lr)/(ka + kr)
car = - kar/2.0 *(za-lar)**2 + kr/2 * (za-lr)**2

parameters.update({'kar':kar})
parameters.update({'lar':lar})
parameters.update({'car':car})

# The function to plot:
# zi and le are two variables
# ke, ki are parameters
# 'parameters' is a dictionary containing more information
def cost_function(ke, ki, zi, le, parameters)

x = np.arange(0, 10, 100)
y = np.arange(0, 10, 100)

def compute_and_plot(ax, ke, ki):
    #Calculate grid values
    X, Y = np.meshgrid(x,y)
    Z = cost_function(ke, ki, X, Y, parameters)

    CS = QuadContourSet(ax, X, Y, Z, 20)
    pyl.clabel(CS, inline=1, fontsize=10)

ke = 100
ki = 10

# first plot
fig = pyl.figure()
ax = fig.add_subplot(111)
compute_and_plot(ax, ke, ki)

#Define slider for parameters
axcolor = 'lightgoldenrodyellow'
ke_axis  = pyl.axes([0.25, 0.15, 0.65, 0.03])
ke_slider = Slider(ke_axis, 'ke', 0, 1, valinit=100)

ki_axis  = pyl.axes([0.25, 0.15, 0.65, 0.03])
ki_slider = Slider(ki_axis, 'ki', 0, 1, valinit=10)

def update(ax, val1, val2):
    ke = ke_slider.val1
    ki = ki_slider.val2
    ax.cla()
    compute_and_plot(ax, ke, ki)
    pyl.draw()

ke_slider.on_changed(lambda val1: update(ax, val1, val2))
ki_slider.on_changed(lambda val2: update(ax, val1, val2))

pyl.show()

我不确定自己在每个步骤中都在做什么;我只是从上面的两个例子推断出来的。

创建了滑动条,但它们没有执行我希望它们执行的操作(修改轮廓图)。此外,等高线图本身看起来很小而且在角落,不太明显。

有人可以帮助我了解我似乎缺失或做错的事情吗?

0 个答案:

没有答案