Python Plotly - 带有 if...else 的悬停模板中的数字格式
Python Plotly - number format in hovertemplate with if...else
我想像这样根据高度格式化悬停模板中的数字:
- 如果数字小于 10,则保留 2 位小数,
- 如果数字小于 100,则小数点后一位,
- 如果数字大于或等于 100,则保留 0 位小数
最接近我想要的是:
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}"
),
)
)
我想像这样根据高度格式化悬停模板中的数字:
- 如果数字小于 10,则保留 2 位小数,
- 如果数字小于 100,则小数点后一位,
- 如果数字大于或等于 100,则保留 0 位小数
最接近我想要的是:
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}"
),
)
)