Python 3.x 用Python更新绘图
我的情况是:我正在开发一个Jupyter实验室笔记本,以举例说明工程主题。我发现自己需要在图形中的Axis对象中绘制一些东西,然后使用滑块更改值来更新绘图 以下是一个MWE(或至少是一个较短的工作示例): 在本例中,我创建了图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而
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));