python - 使用面板时 Altair 绘图未显示
问题描述
我正在关注使用 Panel 和 Altair 的本教程[ github ]。
返回我的情节的函数如下:
@pn.depends(ticker.param.value, date_range_slider.param.value)
def get_plot(ticker, date_range):
df = data.stocks()
df['date'] = pd.to_datetime(df['date'])
start_date, end_date = date_range
mask = (df['date'] > start_date) & (df['date'] <= end_date)
dfm = df.loc[mask]
chart = (alt.Chart(dfm)
.mark_line()
.encode(
x='date', y='price',
tooltip=alt.Tooltip(['date', 'price']))
.transform_filter((datum.symbol == ticker))
)
return chart
我遇到了一个问题,如果直接执行,图表会正常显示:
但不是在使用 Panel 运行时:
似乎当我将工作chart
放入 apanel
时,它会丢失与数据的链接:
服务仪表板也有同样的问题,所以在我看来,Panel 和 Altair 之间存在兼容性问题。
有谁知道出了什么问题以及如何解决?
版本:
- 面板 - v0.6.0
- Altair - v3.2.0
- 熊猫 - v0.25.1
- JupyterLab - v1.0.2
- Python - v3.7.4
解决方案
这现在可以工作了,运行教程中的代码并在此问题中进行修改会显示绘图并响应小部件输入:
完整代码:
import panel as pn
import altair as alt
import pandas as pd
from vega_datasets import data
import datetime as dt
from altair import datum
alt.renderers.enable('default')
pn.extension('vega')
source = data.stocks()
source = pd.DataFrame(source)
source.head()
# set a title for your dashboard
title = '## Stock Price Dashboard'
subtitle = 'This dashboard allows you to select a company and date range to see stock prices.'
# create list of company names (tickers)
tickers = ['AAPL', 'GOOG', 'IBM', 'MSFT']
# this creates the dropdown widget
ticker = pn.widgets.Select(name='Company', options=tickers)
# this creates the date range slider
date_range_slider = pn.widgets.DateRangeSlider(
name='Date Range Slider',
start=dt.datetime(2001, 1, 1), end=dt.datetime(2010, 1, 1),
value=(dt.datetime(2001, 1, 1), dt.datetime(2010, 1, 1))
)
@pn.depends(ticker.param.value, date_range_slider.param.value)
def get_plot(ticker, date_range):
df = data.stocks()
df['date'] = pd.to_datetime(df['date'])
start_date, end_date = date_range
mask = (df['date'] > start_date) & (df['date'] <= end_date)
dfm = df.loc[mask]
chart = (alt.Chart(dfm)
.mark_line()
.encode(
x='date', y='price',
tooltip=alt.Tooltip(['date', 'price']))
.transform_filter((datum.symbol == ticker))
)
return chart
dashboard = pn.Row(
pn.Column(title, subtitle, ticker, date_range_slider),
get_plot # draw chart function!
)
dashboard
版本:
import session_info
session_info.show()
-----
altair 4.1.0
pandas 1.2.0
panel 0.10.3
vega_datasets 0.9.0
-----
IPython 7.19.0
jupyter_client 6.1.11
jupyter_core 4.7.0
推荐阅读
- office365 - 自定义函数批处理中的远程调用
- swift - 插入和删除时出现“NSInternalInconsistencyException”,第 0 节错误中的行数无效?
- vba - 如何在不覆盖 VBA 中的行的情况下将新行添加到另一个工作表?
- java - 如何在没有 setter 或公开变量的情况下将私有类实例变量设置为 unmarshaller 使用的 File 对象?
- java - 使用 DataFlow (Apache Beam) 将 ISO-8859-1 加载到 BigQuery 时出现问题
- c++ - c++中opencv puttext函数的问题
- json - Flutter:如何映射字典?通过字典制作下拉选项
- json - 使用 Moshi 处理可能是列表或自定义对象的 JSON 响应
- javascript - 点击时如何从表单中获取数据?
- amazon-web-services - api 网关与 aws 批处理集成