python Go.散射极坐标:尝试渲染雷达图与各种线颜色不工作

qnzebej0  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(159)

我试图建立一个雷达图,其中每一行是不同的颜色。
我觉得我已经按照文件密切,我现在面临着一个错误,我似乎无法解决,特别是因为没有错误的输出!
下面是我正在使用的一些虚拟数据:

r = [52,36,85]
theta = ["analytique", "analogique", "affectif"]

colors = ["blue", "red","yellow"]

下面是我的图表:

for i in range(len(theta)):
    fig_reception.add_trace(go.Scatterpolar(
        mode='lines+text',
        theta=[theta[i]],
        r=[r[i]],
     ,   line_color=text_colors[i],
        fillcolor='#d3d3d3',
        marker=dict(color=text_colors),
    ))

fig_reception.update_layout(autosize=False,
                            height=305,
                  polar=dict(radialaxis = dict(range=[0,100],visible = False),
                                          angularaxis=dict(rotation=180,direction="clockwise") )
                            )
fig_reception.update_layout(
    template=None,
    polar = dict(bgcolor = "rgba(255, 255, 255, 0.2)"),)

fig_reception.update_layout(
    font=dict(
        size=16,
        color="black",
        family="Courier New, monospace",

    ),
    title="Réception",
    title_font_family="Courier New, monospace",
    showlegend=False
)

奇怪的是,当我悬停在每一行上时,会显示一个具有正确颜色和值的框架。
这是x1c 0d1x的图片

rqqzpn5f

rqqzpn5f1#

我没有一个完整的解决方案给你,但我希望我的答案引导你在正确的方式。

简单开始

首先,让我们简化并使用默认颜色绘制雷达/spyder图:

import plotly.express as px
import pandas as pd

r = [52,36,85]
theta = ["analytique", "analogique", "affectif"]
types = ["one", "two","three"]
df = pd.DataFrame(dict(r=r, theta=theta, type=types))
df

| | r|θ|类型|
| - ------|- ------|- ------|- ------|
| 无|五十二|解析图|一|
| 1个|三十六|类比|二|
| 第二章|八十五|情感的|三|
plotly.express.line_polar绘制,得到:

fig = px.line_polar(df, r='r', theta='theta', line_close=True, markers=True)
fig.show()

每个边缘都有自己的颜色

现在,您希望每条边都有自己的颜色,在本例中,我假设您希望此颜色基于前面定义的列type
简单地直接画出来是行不通的,它只会给予你点,而不是线:

fig = px.line_polar(df, r='r', theta='theta', line_close=True, color='type', markers=True)
fig.show()

您需要复制这些行,并为连续数据点分配相同的type

# First append the df to itself, but only keep the r and theta columns
# This will make the type column NaN for the appended rows
df2 = pd.concat([df, df[['r', 'theta']]]).sort_values(by=['r', 'theta'])
# Now fill the NaN type value by taking the type value of the next row
df2.type.fillna(method='bfill', inplace=True)
# The last type value should be equal to the first type value to close the loop
# This needs to be set manually
df2.type.fillna(df2.type.iloc[0], inplace=True)
df2

| | r|θ|类型|
| - ------|- ------|- ------|- ------|
| 1个|三十六|类比|二|
| 1个|三十六|类比|一|
| 无|五十二|解析图|一|
| 无|五十二|解析图|三|
| 第二章|八十五|情感的|三|
| 第二章|八十五|情感的|二|
现在如果你把它画出来,你会得到一个三角形,每条边都有不同的颜色:

fig = px.line_polar(df2, r='r', theta='theta', color='type', line_close=True, markers=True)
fig.show()

不确定为什么类别改变了顺序,但是您可能可以通过对df2 DataFrame进行不同的排序来解决这个问题。

文本标签

如果您想在图表中使用文本标签,您需要find in the docs确保存在text参数:

fig = px.line_polar(df2, r='r', theta='theta', color='type', text='r', line_close=True, markers=True)
fig.update_traces(textposition='top center')

相关问题