是否有一种最佳方法来共享/服务只读 Jupyter 笔记本,其中隐藏输入代码单元,但连接到实时内核,以便用户可以与小部件交互?
我知道有多种方法可以为小部件嵌入数据,但小部件通常需要针对更大的数据集重新运行查询。
我最近开始学习使用小部件,它们对于与我们的非技术人员共享交互式数据非常有用,但我还没有找到一个好方法。
拥有此功能还可以减少对 Tableau 等昂贵工具的需求。
我正在尝试在 Jupyter 中创建一个 Popup 小部件,如此视频中所述:
from IPython.html import widgets
Run Code Online (Sandbox Code Playgroud)
这给出了以下警告:
ShimWarning:该
IPython.html软件包已被弃用。您应该从中导入notebook。IPython.html.widgets已移至ipywidgets. “IPython.html.widgets已经搬到了ipywidgets。”
但是,ipywidgets没有弹出窗口小部件,并且其 docs 中没有任何内容。(顺便说一句,IPython.html.widgets也没有弹出窗口小部件)
如何在 jupyter 中创建弹出窗口小部件?
版本:
Jupyter 1.0.0
IPython 5.1.0
我正在尝试创建一个 Jupyter Notebook 来帮助一些同事交互式访问一些数据。我想给他们一堆小部件,允许他们使用不同的标准来过滤数据。
主要是它工作得很漂亮,但我无法调整两个小部件之间的间距,这会让我发疯。
我已尝试按照此处的说明进行操作,但这两个按钮始终彼此相邻。
class Dashboard(object):
def __init__(self):
item_layout = Layout(flex='1 1 auto',
width='auto')
toggle = widgets.ToggleButtons(
options=["Foo", "Bar"],
value="Foo",
description="Foobar:",
disable=False,
layout=item_layout,
)
check = widgets.Checkbox(
value=True,
description="Checked",
disabled=False,
layout=item_layout,
)
box_layout = Layout(display='flex',
flex_flow='row',
justify_content='space around',
width='500px',
button_layout='solid',
)
buttons = widgets.Box(children=[
widgets.interactive(self._set_foobar, foobar=toggle, layout=item_layout),
widgets.interactive(self._set_checked, checked=check, layout=item_layout),
],
layout=box_layout)
display(buttons)
def _set_foobar(self, foobar):
self._foo = foobar == 'Foo'
def _set_checked(self, checked):
self._checked = bool(checked)
Run Code Online (Sandbox Code Playgroud)
如果我打开 Jupyter 笔记本并执行以下操作:
import dashboard
y = dashboard.Dashboard()
Run Code Online (Sandbox Code Playgroud)
它生产:
如果我不让小部件具有交互性,即 …
%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 不遵循更简单的小部件的方法,其中允许空值并显示占位符文本以提示用户选择某些内容。
有没有办法让小部件选择不需要?一些我不知道的属性设置?如果这是不可能的,那么最简单的解决方法是什么?
您好,我正在尝试在 Jupyter 笔记本中使用 ipywidgets 绘制一个图表,但我没有这样的运气。当更新按钮起作用时,我希望让小部件根据数据框进行更新。有人知道我哪里出错了吗?
#Import Libraries
import pandas as pd
import folium
import geocoder
import numpy as np
import plotly.plotly as py
from plotly.graph_objs import *
import plotly.offline as py
from ipywidgets import widgets, HBox, Output, interactive
py.offline.init_notebook_mode(connected=False)
#Load Dataset
df = pd.read_excel('LOAS_Biography data (feb 2018).xlsx', sheetname='concerts')
#Rename Columns In DataFrame
df.columns = ['Date', 'City', 'Country', 'Venue', 'Capacity', 'Ticket', 'Tour', 'Event', 'Sold Out', 'Champion']
#Summarises Data by Summing Data Per Country
df = df.groupby('Country', as_index= False).sum()
df = df.head(10) …Run Code Online (Sandbox Code Playgroud) 我正在使用 DatePicker 小部件来选择日期,我必须根据这些日期在 Jupyter 笔记本程序中执行一些任务。DatePicker 小部件是使用 ipywidget 库创建的。
我现在面临的问题是它显示了月份和年份的所有日期。
有什么方法可以禁用包含我的应用程序的所有有效日期的列表中不存在的日期。
例如,假设我有一个日期列表,其中包含 2018-12-25、2019-01-09 和 2019-01-13。所以现在,我只想在 DatePicker 小部件中启用这些日期,而应禁用其余日期。
请建议和帮助。!!!
Jupyter 小部件,如 HTML 进度条,会在笔记本浏览器窗口刷新时(或远程重新连接到笔记本时)消失。我正在尝试查看如何在刷新窗口时使它们持久化并重新呈现。
假设我为 Jupyter 设置了这样的小部件:
jupyter nbextension enable --py widgetsnbextension
Run Code Online (Sandbox Code Playgroud)
然后我启动一个这样的笔记本:
import time
import ipykernel
import ipywidgets
import IPython
import jupyter
import notebook
import tqdm
import tqdm.notebook
import widgetsnbextension
print('ipykernel version: ', ipykernel.__version__)
print('ipywidgets version: ', ipywidgets.__version__)
print('IPython version: ', IPython.__version__)
print('Jupyter version: ', jupyter.__version__)
print('Jupyter notebook version: ', notebook.__version__)
print('tqdm version: ', tqdm.__version__)
print('widgetsnbextension version: ', widgetsnbextension.__version__)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到的版本打印如下:
ipykernel version: 5.1.3
ipywidgets version: 7.5.1
IPython version: 7.9.0
Jupyter version: 1.0.0
Jupyter notebook version: 6.0.2
tqdm version: 4.40.0 …Run Code Online (Sandbox Code Playgroud) ipywidgets ×10
python ×7
jupyter ×5
matplotlib ×3
css ×1
ipython ×1
jupyterhub ×1
pandas ×1
popup ×1
python-3.x ×1
tqdm ×1
widget ×1