Python Plotly - 带有 if...else 的悬停模板中的数字格式

Python Plotly - number format in hovertemplate with if...else

我想像这样根据高度格式化悬停模板中的数字:

最接近我想要的是:

fig.add_trace(
    go.Scatter(
        x= df.index, 
        y= df[line],
        hovertemplate= (
            '%{y:,.2f}' if '%{y:.0f}' <  '10' else
            '%{y:,.1f}' if '%{y:.0f}' < '100' else
            '%{y:,.0f}'
        )
    ) 
)

它运行没有错误,但它给了我所有数字的小数点后两位。

谁能帮帮我?

你可以在plotting之外做条件,然后一次性添加到hovertemplate中:

import plotly.graph_objects as go


y = [0.99, 10.02, 20.04, 130.65, 4.25]
customdata = []

for i in y:
    if i < 10:
        customdata.append("{:.2f}".format(i))
    elif i < 100:
        customdata.append("{:.1f}".format(i))
    else:
        customdata.append("{:.0f}".format(i))
        
        
fig.add_trace(
    go.Scatter(
        x =[0, 1, 2, 3, 4], 
        y = y,
        customdata=customdata,
        hovertemplate= ('%{customdata}')
    ) 
)

fig.show()

  • hovertemplate 可以是 array/list
  • 因此您可以构建一个适合值格式的数组
import pandas as pd
import numpy as np
import plotly.graph_objects as go

line = "a"
df = pd.DataFrame({line: np.random.uniform(0, 200, 200)})
fig = go.Figure()
fig.add_trace(
    go.Scatter(
        x=df.index,
        y=df[line],
        hovertemplate=np.select(
            [df[line] < 10, df[line] < 100], ["%{y:.2f}", "%{y:.1f}"], "%{y:.0f}"
        ),
    )
)