matplotlib Python Plotly Radar Chart with Style

odopli94  于 2023-05-07  发布在  Python
关注(0)|答案(1)|浏览(174)

我正在尝试下图所示的图像,我认为python是一个好主意,但我不确定。我想随机化很多足球运动员的统计数据,为每个人制作一个雷达图,并将图表保存为图像。

但plotly雷达图表不是那么时尚,我真的想做一些时尚。如何将下面的演示代码转换为参考图像,是否可能?
下面是一个演示代码:

import plotly.graph_objects as go

categories = ['Defending','Speed','Attacking',
              'Technical', 'Team play']

fig = go.Figure()

fig.add_trace(go.Scatterpolar(
      r=[1, 5, 2, 2, 3],
      theta=categories,
      fill='toself',
      name='Alice'
))
fig.add_trace(go.Scatterpolar(
      r=[4, 3, 2.5, 1, 2],
      theta=categories,
      fill='toself',
      name='Bob'
))

fig.update_layout(
  polar=dict(
    radialaxis=dict(
      visible=True,
      range=[0, 5]
    )),
  showlegend=False
)

fig.show()
yb3bgrhw

yb3bgrhw1#

polar layout的文档来看,Plotly在网格形状本身方面似乎没有提供太多的选项。但是,Plotly允许您创建自己的模板/主题或检查内置主题。
作为一个起点,你可能应该分析plotly_dark主题,因为它有一些类似于你的图片的功能。

内置模板简单示例

dataset.csv

categories,player,points
Defending,alice,1
Speed,alice,5
Attacking,alice,2
Technical,alice,2
Team play,alice,3
Defending,bob,4
Speed,bob,3
Attacking,bob,2.5
Technical,bob,1
Team play,bob,2
代码
import plotly.express as px
import pandas as pd

df = pd.read_csv("dataset.csv")
fig = px.line_polar(df, r="points",
                    theta="categories",
                    color="player",
                    line_close=True,
                    color_discrete_sequence=["#00eb93", "#4ed2ff"],
                    template="plotly_dark")

fig.update_polars(angularaxis_showgrid=False,
                  radialaxis_gridwidth=0,
                  gridshape='linear',
                  bgcolor="#494b5a",
                  radialaxis_showticklabels=False
                  )

fig.update_layout(paper_bgcolor="#2c2f36")
fig.show()

使用上面的代码,我认为不可能修改每个嵌套形状的颜色。要做到这一点,您可能需要创建自己的模板,并分别为每个嵌套形状着色。

创建网格形状

您可能需要尝试类似于下面代码的方法来创建所需的网格形状。

import plotly.graph_objects as go

bgcolors = ["#353841", "#3f414d", "#494b5a", "#494b5a", "#58596a"]
fig = go.Figure(go.Scatterpolar(
    r=[42]*8,
    theta=[0, 45, 90, 135, 180, 225, 270, 315],
    marker_line_width=2,
    opacity=0.8,
    marker=dict(color=bgcolors[0])
))

for i in range(1, 5):
    fig.add_trace(go.Scatterpolar(
        r=[44-6*i]*8,
        theta=[0, 45, 90, 135, 180, 225, 270, 315],
        marker_line_width=2,
        marker=dict(color=bgcolors[i])
    ))

fig.update_polars(angularaxis_dtick='')
fig.update_traces(fill='toself')
fig.update_polars(angularaxis_showgrid=False,
                  radialaxis_showgrid=False,
                  radialaxis_gridwidth=0,
                  gridshape='linear',
                  radialaxis_showticklabels=False,
                  angularaxis_layer='above traces'

                  )
fig.show()

颜色不好,但总体形状不错。

相关问题