Plotly:雷达图将 theta 误认为是 int 而不是字符串

Plotly: Radar plot mistaking theta as int instead of string

我正在尝试制作雷达图,我希望 theta 轴是字符串。他们应该是 ["01", "02", "03"]。但是,它们被 Plotly 读取为数字。

import pandas as pd
import plotly.express as px

df = pd.DataFrame(dict(
    r=[22, 6, 0],
    theta=["01", "02", "03"]))
fig = px.line_polar(df, r='r', theta='theta', line_close=True)
fig.update_traces(fill='toself')
fig.show()

但是,如果我向数组中添加一些文本,它会被读取为一个字符串,并且我会获得我正在寻找的数字。

df = pd.DataFrame(dict(r=[22, 6, 0],
                       theta=["Code: 01", "Code: 02", "Code: 03"]))
fig = px.line_polar(df, r='r', theta='theta', line_close=True)
fig.update_traces(fill='toself')
fig.show()

如何让 Plotly 将数组作为字符串读取而无需添加额外的文本? (实际地块要拥挤得多)

如果您不介意一点 html 格式,任何 html 格式似乎都会强制将您的输入解释为文本。

剧情:

如您所见,我使用了斜体 <i>yourtext</i> 但任何 html 都应该有效。事实上,span 标记将使您的文本保持未格式化状态。

代码:

import pandas as pd
import plotly.express as px

df = pd.DataFrame(dict(r=[22, 6, 0], theta=['01','02','03']))

df['thetaText'] = ['<i>'+elem+'</i>' for elem in df['theta']]

fig = px.line_polar(df, r='r', theta='thetaText', line_close=True)
fig.update_traces(fill='toself')
fig.show()

编辑:

如果您想使用 [1,2,3] 作为 theta 的输入,只需更改 df['thetaText'] = ['<i>'+elem+'</i>' for elem in df['theta']]df['thetaText'] = ['<i>'+str(elem)+'</i>' for elem in df['theta']]

所以这里发生的是 angular 轴的 type 被推断为 linear 而不是 category 因为所有的字符串只包含数字。如果您添加一个非数字字符串,这会以另一种方式诱导推理。

您可以使用

显式设置 plotly.expressplotly.graph_objects 方法的类型
fig.update_polars(angularaxis_type="category") # chaining-friendly

fig.layout.polar.angularaxis.type="category" # more imperative style