python - 如何在新选项卡中打开 Altair 图表中的 url (href)

标签 python iframe altair streamlit

我制作了一个带有链接的 Altair 分散图表。 它在我的 Jupyter Notebook 上完美运行。 当 Altair 处于 Streamlit 环境中时,就会出现问题。据我调查,我的带有 Altair 图表的应用程序由 iframe 显示。 链接目标无法在 iframe 中显示(服务器拒绝这些连接)。

当我按住 Ctrl 键并单击链接并在新选项卡中打开时,一切正常。 如何在此处默认打开新选项卡? 我看到这里讨论这个话题: https://github.com/altair-viz/altair/issues/1661 但我不知道如何使用其中包含的说明:-(

我应该如何更改我的图表规范?

我的图表代码:

    import pandas as pd
import altair as alt

#Analyzed data is here:
URL='https://dl.dropboxusercontent.com/s/blk95gc1bf8errv/Car_Prices_Poland_BS4_1_0.csv'

tabela = pd.read_csv(URL)
tabela['calymodel'] = tabela['mark'] + ' ' + tabela['model']
calymodelunique = tabela['calymodel'].unique()
domyslny_model = calymodelunique.tolist().index('volkswagen passat')



auto = 'volkswagen passat'
auto_wiersze = tabela[tabela['calymodel']==auto]
marka_wybrana = auto.split()[0]
model_wybrany = auto.split()[1]


quant_cen = auto_wiersze['price'].quantile(q=0.99)
quant_mil = auto_wiersze['mileage'].quantile(q=0.99)

scattered = alt.Chart(auto_wiersze).mark_point().encode(
    x=alt.X('price',scale=alt.Scale(domain=(0,quant_cen),clamp=True), title='Cena [zł]'),
    y=alt.Y('mileage',scale=alt.Scale(domain=(0,quant_mil),clamp=True), title='Przebieg [km]'),
    color=alt.Color('year', scale=alt.Scale(scheme='tableau10'),bin=alt.Bin(maxbins=6),legend=alt.Legend(title="Przedziały roczników")),
    tooltip=[alt.Tooltip('year',title='Rocznik'),
            alt.Tooltip('mileage',title='Przebieg'),
            alt.Tooltip('price',title='Cena'),
            alt.Tooltip('link',title='Link')],
     href='link:N',
     
        
                       
).properties(title="Porównanie ceny w zależności od rocznika i przebiegu",     
    height=600)

scattered

目前我使用 Ctrl+Click 来访问链接,但我认为这不是用户友好的选项。

我的应用程序可在此处获取: https://share.streamlit.io/napierajpl/streamlit/bs4/streamlit1.py

当您单击第一个图表上的链接时,您会发现它崩溃了:-( Otomoto.pl 服务器回复是:连接被拒绝

最佳答案

您可以按照链接问题中的说明手动更改usermeta:

import altair as alt
from vega_datasets import data
from urllib.parse import urlencode


def make_google_query(name):
    return "https://www.google.com/search?" + urlencode({'q': '"{0}"'.format(name)})


cars = data.cars()
cars['url'] = cars['Name'].apply(make_google_query)

chart = alt.Chart(cars).mark_circle(size=60).encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
    href='url',
    tooltip=['Name', 'url']
)

chart['usermeta'] = {
    "embedOptions": {
        'loader': {'target': '_blank'}
    }
}

关于python - 如何在新选项卡中打开 Altair 图表中的 url (href),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72238350/

相关文章:

css - Vimeo 嵌入 CSS : override default text styles?

jquery从iframe内容访问iframe id

python - Altair 中的垂直多面图表

python-3.x - Altair 通过绑定(bind)范围 slider 对日期时间值进行选择和转换过滤器似乎不适用于相等条件或选择器本身

python - 如何使用 nbconvert 将交互式 Jupyter 笔记本转换为 html

python - 尝试在 sklearn 中使用点->列表拟合

python - Heroku:安装 Pytorch 后 slug 尺寸太大

html - 如何在谷歌表格侧边栏插件中添加超链接到单元格

python - 组织 GUI 应用程序

python - : how-to launch for a standard terminal (to solve an issue with curses)