带有 Plotly 后端和自定义悬停模板的 Pandas plot

问题描述 投票:0回答:1

我正在尝试在悬停模板中包含其他数据,类似于此Plotly:在 hovertemplate 中包含其他数据,但在 Pandas 上使用 Plotly 绘图后端。

我有两个 2D Pandas 数据框,第一个是国家和年份的人口,第二个是国家和年份的人口增长率,使用以下代码生成。

import pandas as pd
pd.options.plotting.backend = 'plotly'

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv')
df_pop = df.pivot_table(index='year', columns='country', values='pop').copy()
df_pct_growth = df_pop.pct_change().fillna(0) * 100

df_pop

df_pct_growth


我将每个国家的人口可视化如下。如您所见,悬停文本只有 countryyearpopulation。我想将 df_pct_growth 中的 % growth 添加到悬停文本中。有谁知道怎么做?

df_pop.plot(labels=dict(value='Population'))

python pandas plotly
1个回答
0
投票

我还没有看到任何将自定义数据与“Plotly”后端一起使用的示例。查看图形结构,我认为可以添加自定义数据并更新悬停模板。我添加的代码会将国家名称设置为 meta。 (可以提供与自定义数据相同的功能)并将按国家/地区的增长率列数据设置为自定义数据。悬停模板是通过添加增长率字段来完成的。

import plotly.express as px
import pandas as pd
pd.options.plotting.backend = 'plotly'

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv')
df_pop = df.pivot_table(index='year', columns='country', values='pop').copy()
df_pct_growth = df_pop.pct_change().fillna(0) * 100

fig = df_pop.plot(labels=dict(value='Population'))

for i,country in enumerate(df.country.unique()):
    fig.data[i]['meta'] = country
    fig.data[i]['customdata'] = df_pct_growth.loc[:,country].to_frame().values
    fig.data[i]['hovertemplate'] = 'country: %{meta}<br>year: %{x}<br>population: %{y:,}<br>growth: %{customdata[0]:.2f}<extra></extra>'

fig.show()

无需后端的 Plotly 代码

import plotly.graph_objects as go

fig = go.Figure()

for country in df.country.unique():
    dff = df.query('country == @country')
    fig.add_trace(go.Scatter(x=dff['year'],
                             y=dff['pop'],
                             mode='lines',
                             name=country,
                             meta=country,
                             customdata=df_pct_growth.loc[:,country].to_frame().values,
                             hovertemplate=
                             'country: %{meta}<br>' + 
                             'year: %{x}<br>' +
                             'population: %{y:,}<br>' +
                             'growth: %{customdata[0]:.2f}' + 
                             '<extra></extra>'
                         ))
fig.show()
© www.soinside.com 2019 - 2024. All rights reserved.