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.express
和 plotly.graph_objects
方法的类型
fig.update_polars(angularaxis_type="category") # chaining-friendly
或
fig.layout.polar.angularaxis.type="category" # more imperative style
我正在尝试制作雷达图,我希望 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.express
和 plotly.graph_objects
方法的类型
fig.update_polars(angularaxis_type="category") # chaining-friendly
或
fig.layout.polar.angularaxis.type="category" # more imperative style