是否有一种最佳方法来共享/服务只读 Jupyter 笔记本,其中隐藏输入代码单元,但连接到实时内核,以便用户可以与小部件交互?
我知道有多种方法可以为小部件嵌入数据,但小部件通常需要针对更大的数据集重新运行查询。
我最近开始学习使用小部件,它们对于与我们的非技术人员共享交互式数据非常有用,但我还没有找到一个好方法。
拥有此功能还可以减少对 Tableau 等昂贵工具的需求。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from ipywidgets import interact, FloatSlider, RadioButtons
amplitude_slider = FloatSlider(min=0.1, max=1.0, step=0.1, value=0.2)
color_buttons = RadioButtons(options=['blue', 'green', 'red'])
# decorate the plot function with an environment from the UIs:
@interact(amplitude=amplitude_slider, color=color_buttons)
def plot(amplitude, color):
fig, ax = plt.subplots(figsize=(4, 3),
subplot_kw={'axisbg':'#EEEEEE',
'axisbelow':True})
ax.grid(color='w', linewidth=2, linestyle='solid')
x = np.linspace(0, 10, 1000)
ax.plot(x, amplitude * np.sin(x), color=color,
lw=5, alpha=0.4)
ax.set_xlim(0, 10)
ax.set_ylim(-1.1, 1.1)
Run Code Online (Sandbox Code Playgroud)
多次使用该小部件给了我多个输出:
我需要在代码中更新什么,以便每次使用小部件时都会清除绘图?
我制作了一个图形,其中包含分别基于随机正态分布、伽玛分布、指数分布和均匀分布的直方图的四个子图。我使用 matplotlib 和 Jupyter Notebook 制作的。它是通过 ipywidgets lib 生成的交互式图形。特别是,有四个滑动条控制每个直方图上的样本大小并相应地更新它们。然而,当更新直方图时,它会令人烦恼地闪烁。有什么办法可以避免这种情况吗?谢谢。
现在要在 jupyter 笔记本上运行的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib notebook
from ipywidgets import *
n = 1000
x1 = np.random.normal(-2.5, 1, n)
x2 = np.random.gamma(2, 1.5, n)
x3 = np.random.exponential(2, n)+7
x4 = np.random.uniform(14,20, n)
x = [x1, x2, x3, x4]
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(10,7))
axs = [ax1,ax2,ax3,ax4]
titles = ['x1\nNormal', 'x2\nGamma', 'x3\nExponential', 'x4\nUniform']
subplots_axes = [[-7,2,0,250], [0,4.5,0,250], [7,25,0,250], …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来更改 matplotlib 图右侧的垂直 IntSlider 的位置。这是代码:
from ipywidgets import interact, fixed, IntSlider
import numpy as np
from matplotlib import pyplot as plt
%matplotlib notebook
fig = plt.figure(figsize=(8,4))
xs = np.random.random_integers(0, 5000, 50)
ys = np.random.random_integers(0, 5000, 50)
ax = fig.add_subplot(111)
scat, = ax.plot(xs, ys, 'kx', markersize=1)
ax.grid(which='both', color='.25', lw=.1)
ax.set_aspect('equal'), ax.set_title('Rotate')
def rotate(theta, xs, ys):
new_xs = xs * np.cos(np.deg2rad(theta)) - ys * np.sin(np.deg2rad(theta))
new_xs -= new_xs.min()
new_ys = xs * np.sin(np.deg2rad(theta)) + ys * np.cos(np.deg2rad(theta))
new_ys -= new_ys.min()
return new_xs, …Run Code Online (Sandbox Code Playgroud) 没有问题了。问题是较旧的 ipywidgets 版本行为,似乎已在版本 7 中修复。
ipywidgets.Dropdown 本身会从选项列表中选取第一个值。
我想显示没有选择值的小部件。
列表中的第一个值是毫无意义的默认值,仍然需要在工作流程路径中反映出来。我读过一篇讨论,其中开发人员甚至将空字符串项添加到列表中。这修复了下拉列表的外观(在某种程度上,尽管占位符属性仍然被忽略),但向下拉列表添加了一个愚蠢的可选空项目。将虚拟“无”项添加到列表中并不是更好的解决方案。将值设置为“无”会导致“无效选择”异常。
我不明白为什么 ipywidgets.Dropdown 不遵循更简单的小部件的方法,其中允许空值并显示占位符文本以提示用户选择某些内容。
有没有办法让小部件选择不需要?一些我不知道的属性设置?如果这是不可能的,那么最简单的解决方法是什么?
我正在使用 aipywidgets.Label在笔记本中显示文本。基本问题,如何更改文本对齐方式Label?它似乎是左对齐的,我希望它是右对齐的。我确实在文档中寻找过它,但找不到它。
谢谢
在我的笔记本中,我有 7 个 FloatSlider 小部件。我希望始终显示这 7 个小部件的乘积,当用户移动滑块时,显示的值就会更新。目前我正在尝试在 Widgets.Text (n) 中显示 SliderWidgets 的产品,但我不确定这是否是最佳解决方案。
import ipywidgets as widgets
caption = widgets.Label(value='Play around with the variables to see how N changes!')
r = widgets.FloatSlider(value=1,
min=1.0,
max=3.0,
step=0.1,
description="R*")
fp = widgets.FloatSlider(value=1,
min=0.35,
max=1.0,
step=0.05,
description="fp")
ne = widgets.FloatSlider(value=1
min=0.2,
max=3.0,
step=0.1,
description="ne")
fl = widgets.FloatSlider(value=1,
min=1.0,
max=1.3,
step=0.05,
description="fl")
fi = widgets.FloatSlider(value=1,
min=0.5,
max=1.5,
step=0.05,
description="fi")
fc = widgets.FloatSlider(value=0.20,
min=0.10,
max=0.30,
step=0.05,
description="fi",)
l = widgets.FloatSlider(value=60000000.0,
min=5000000.0,
max=1000000000.0,
step=5000000,
description="fi")
n = widgets.Text( …Run Code Online (Sandbox Code Playgroud) 我想在 HBox 布局内显示 IPython.display.HTML 对象(即 html_bt)和小部件(即 bt)。我该如何实现这一目标?有可能吗?或者如何将 html_bt 转换为小部件对象?以下是我的代码:
from ipywidgets import widgets, Layout, HBox
from IPython.display import display, HTML
css_str = '<style>.foo{color:#F00;} )} </style>'
out = widgets.Output()
def OnClick():
with out:
print('QQQ')
html_bt=HTML(css_str + '<button class="button-style" onclick="IPython.notebook.kernel.execute(\'OnClick()\')"> <img src="https://www.fnordware.com/superpng/pnggrad16rgb.png" alt="Snow"></button>')
bt = widgets.Button(
description='Click me',
disabled=False,
button_style='', # 'success', 'info', 'warning', 'danger' or ''
tooltip='Click me',
icon='check' # (FontAwesome names without the `fa-` prefix)
)
h_box = HBox([bt, display(html_bt)])
h_box
Run Code Online (Sandbox Code Playgroud) 我有以下代码来生成一个简单的图表。
%matplotlib notebook
from ipywidgets import *
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
line, = ax.plot(x, np.sin(x))
def update(w = 1.0):
line.set_ydata(np.sin(w * x))
plt.show()
interact(update)
Run Code Online (Sandbox Code Playgroud)
代码生成的图很好 - 输出
但是当我拖动滑块时,图形不会更新。关于为什么会这样的任何想法吗?
python data-visualization matplotlib jupyter-notebook ipywidgets
我想使用ipywidgets库中的一些下拉菜单、组合框和其他复杂的小部件组合,这些是我在 jupyter 笔记本中开发的。然而,我被迫使用plotly Dash 进行部署。有没有一种方法可以ipywidgets在绘图 Dash 应用程序中显示,而无需将所有单独的小部件转换为它们的破折号等效项?