Python 3.x 用Python更新绘图

Python 3.x 用Python更新绘图,python-3.x,matplotlib,ipywidgets,Python 3.x,Matplotlib,Ipywidgets,我的情况是:我正在开发一个Jupyter实验室笔记本,以举例说明工程主题。我发现自己需要在图形中的Axis对象中绘制一些东西,然后使用滑块更改值来更新绘图 以下是一个MWE(或至少是一个较短的工作示例): 在本例中,我创建了图fig及其轴ax1声明为全局变量(以便它们在函数h中可用)。然后使用RAD和ANG创建散点图c 之后,使用interact小部件,我希望通过使用滑块更改rh的值,使三个十字沿r轴改变位置 我没有得到任何错误,但我也没有得到任何交叉 在实际代码中,我使用pcolormesh而

我的情况是:我正在开发一个Jupyter实验室笔记本,以举例说明工程主题。我发现自己需要在图形中的Axis对象中绘制一些东西,然后使用滑块更改值来更新绘图

以下是一个MWE(或至少是一个较短的工作示例):

在本例中,我创建了图
fig
及其轴
ax1
声明为全局变量(以便它们在函数
h
中可用)。然后使用
RAD
ANG
创建散点图
c

之后,使用
interact
小部件,我希望通过使用滑块更改
rh
的值,使三个十字沿
r
轴改变位置

我没有得到任何错误,但我也没有得到任何交叉

在实际代码中,我使用
pcolormesh
而不是散点

我希望我说的很清楚。每次调用函数时,我都创建了图形和ax1,让ti工作,但后来我添加了一些不需要每次绘制的suff


感谢您花时间阅读!

一个非常有限的答案是您的函数应该返回
fig
而不是
rh

还请注意,您不需要带有
global
plt.show()的行


我之所以说“有限”,是因为我认为您想要更新而不是添加点?

一个非常有限的答案是,您的函数应该返回
fig
而不是
rh

还请注意,您不需要带有
global
plt.show()的行


我说“有限”,是因为我认为您希望更新而不是添加点?

一个希望更符合您需要的版本

关键是使用
set_offset
方法更新位置

将IPyWidget作为小部件导入
从ipywidgets导入交互
将numpy作为np导入
将matplotlib.pyplot作为plt导入
图(ax1)=plt.子批次(ncols=1,子批次_kw=dict(投影=极坐标))
RAD=np.数组([0.85,0.85,0.85])
ANG=np.array([np.pi/2,np.pi*(2/3+1/2),np.pi*(1/2-2/3)])
c=ax1.散射(ANG,RAD)
ax1.set_ylim([0,1])
ax1.设置标签([])
def h(右侧):
新=[
[-np.pi/2,rh],
[np.pi*(2/3-1/2),右],
[np.pi*(-1/2-2/3),相对湿度],
]
c、 设置偏移(新)
返回图
交互(h,rh=widgets.FloatSlider(最小值=0,最大值=1,步长=0.001,值=1));

希望更符合您需求的版本

关键是使用
set_offset
方法更新位置

将IPyWidget作为小部件导入
从ipywidgets导入交互
将numpy作为np导入
将matplotlib.pyplot作为plt导入
图(ax1)=plt.子批次(ncols=1,子批次_kw=dict(投影=极坐标))
RAD=np.数组([0.85,0.85,0.85])
ANG=np.array([np.pi/2,np.pi*(2/3+1/2),np.pi*(1/2-2/3)])
c=ax1.散射(ANG,RAD)
ax1.set_ylim([0,1])
ax1.设置标签([])
def h(右侧):
新=[
[-np.pi/2,rh],
[np.pi*(2/3-1/2),右],
[np.pi*(-1/2-2/3),相对湿度],
]
c、 设置偏移(新)
返回图
交互(h,rh=widgets.FloatSlider(最小值=0,最大值=1,步长=0.001,值=1));

谢谢您的回复!是的,在实际代码中,我有一个colormesh,我想随着滑块值的变化而更新。我将实施您的建议。谢谢您的回复!是的,在实际代码中,我有一个colormesh,我想随着滑块值的变化而更新。我将实施您的建议。
import ipywidgets as widgets
from ipywidgets import interact
import numpy as np
import matplotlib.pyplot as plt

global ax1
global fig
fig, (ax1) = plt.subplots(ncols=1, subplot_kw=dict(projection='polar'))

RAD = np.array([0.85, 0.85, 0.85])
ANG = np.array([np.pi/2, np.pi*(2/3+1/2), np.pi*(1/2-2/3)])
c = ax1.scatter(ANG, RAD)

ax1.set_ylim([0, 1])
ax1.set_yticklabels([])

def h(rh):   
    RADp = np.array([rh, rh, rh])
    ANGp = np.array([-np.pi/2, np.pi*(2/3-1/2), np.pi*(-1/2-2/3)])
    cp = ax1.scatter(ANGp, RADp)
    ax1.add_artist(cp)
    plt.show()

    return (rh)

interact(h, rh = widgets.FloatSlider(min=0, max=1, step=0.001, value=1));
import ipywidgets as widgets
from ipywidgets import interact
import numpy as np
import matplotlib.pyplot as plt


fig, (ax1) = plt.subplots(ncols=1, subplot_kw=dict(projection='polar'))

RAD = np.array([0.85, 0.85, 0.85])
ANG = np.array([np.pi/2, np.pi*(2/3+1/2), np.pi*(1/2-2/3)])
c = ax1.scatter(ANG, RAD)

ax1.set_ylim([0, 1])
ax1.set_yticklabels([])


def h(rh):   
    RADp = np.array([rh, rh, rh])
    ANGp = np.array([-np.pi/2, np.pi*(2/3-1/2), np.pi*(-1/2-2/3)])
    cp = ax1.scatter(ANGp, RADp)
    ax1.add_artist(cp)
    # plt.show()

    return fig

interact(h, rh = widgets.FloatSlider(min=0, max=1, step=0.001, value=1));