繁体   English   中英

如何使用 plotly 制作具有多条迹线的 Scatterpolar 子图

[英]How do I made a Scatterpolar subplot with multiple traces using plotly

这是我的代码。

fig = make_subplots(rows=3, cols=1,specs=[[{'type': 'polar'}],[{'type': 'polar'}],[{'type': 'polar'}],[{'type': 'polar'}]])

fig.add_trace(go.Scatterpolar(
      r = [df_wy['Successful defensive actions per 90'].mean(),df_wy['Duels per 90'].mean(),df_wy['Passes per 90'].mean(),df_wy['Short / medium passes per 90'].mean()],
      theta = ['Successful defensive actions per 90','Duels per 90','Passes per 90','Short / medium passes per 90'],
      fill = 'toself',
      name = 'Average Statistics of Position CB Player'),row=1, col=1)

fig.add_trace(go.Scatterpolar(
      r = [x['Successful defensive actions per 90'].values[0],x['Duels per 90'].values[0],x['Passes per 90'].values[0],x['Short / medium passes per 90'].values[0]],
      theta = ['Successful defensive actions per 90','Duels per 90','Passes per 90','Short / medium passes per 90'],
      fill = 'toself',
      name = x.Player.values[0]),row=1, col=1)

fig.add_trace(go.Scatterpolar(
      r = [df_wy['Duels won, %'].mean(),df_wy['Accurate passes, %'].mean(),df_wy["Accurate short / medium passes, %"].mean()],
      theta = ['Duels won, %','Accurate passes, %','Accurate short / medium passes, %'],
      fill = 'toself',
      name = 'Average Statistics of Position CB Player'),row=1, col=2)

fig.add_trace(ggo.Scatterpolar(
      r = [x['Duels won, %'].values[0],x['Accurate passes, %'].values[0],x["Accurate short / medium passes, %"].values[0]],
      theta = ['Duels won, %','Accurate passes, %','Accurate short / medium passes, %'],
      fill = 'toself',
      name = x.Player.values[0]),row=1, col=2)

fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
#offline.plot(fig,filename="subplots.html")
fig.show()

我收到这样的错误。

make_subplots 的“specs”参数必须是维度为 (3 x 1) 的二维字典列表。 接收到类型 <class 'list'> 的值:[[{'type': 'polar'}], [{'type': 'polar'}], [{'type': 'polar'}], [{ '类型':'极地'}]]

我该如何解决这个问题?

  • 具有合成数据以使您的代码运行
  • 两个问题
    1. specs参数需要匹配rowscols参数的维度。 已使用列表推导式构建 3x2 列表。
    2. 您的add_trace()参数有row=1, col=2但您已将它们定义为 3 和 1。已更改为 3 和 2 以使您的代码正常工作
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import pandas as pd
import numpy as np

df_wy = pd.DataFrame(
    {
        c: np.random.uniform(1, 20, 20)
        for c in [
            "Successful defensive actions per 90",
            "Duels per 90",
            "Passes per 90",
            "Short / medium passes per 90",
            "Duels won, %",
            "Accurate passes, %",
            "Accurate short / medium passes, %",
        ]
    }
).assign(Player=np.random.choice(list("ABCD"), 20))
x = df_wy.select_dtypes(include=np.number) * 1.1
x["Player"] = df_wy["Player"]

fig = make_subplots(
    rows=3,
    cols=2,
    specs=[[{"type": "polar"} for _ in range(2)] for _ in range(3)],
)

fig.add_trace(
    go.Scatterpolar(
        r=[
            df_wy["Successful defensive actions per 90"].mean(),
            df_wy["Duels per 90"].mean(),
            df_wy["Passes per 90"].mean(),
            df_wy["Short / medium passes per 90"].mean(),
        ],
        theta=[
            "Successful defensive actions per 90",
            "Duels per 90",
            "Passes per 90",
            "Short / medium passes per 90",
        ],
        fill="toself",
        name="Average Statistics of Position CB Player",
    ),
    row=1,
    col=1,
)

fig.add_trace(
    go.Scatterpolar(
        r=[
            x["Successful defensive actions per 90"].values[0],
            x["Duels per 90"].values[0],
            x["Passes per 90"].values[0],
            x["Short / medium passes per 90"].values[0],
        ],
        theta=[
            "Successful defensive actions per 90",
            "Duels per 90",
            "Passes per 90",
            "Short / medium passes per 90",
        ],
        fill="toself",
        name=x.Player.values[0],
    ),
    row=1,
    col=1,
)

fig.add_trace(
    go.Scatterpolar(
        r=[
            df_wy["Duels won, %"].mean(),
            df_wy["Accurate passes, %"].mean(),
            df_wy["Accurate short / medium passes, %"].mean(),
        ],
        theta=[
            "Duels won, %",
            "Accurate passes, %",
            "Accurate short / medium passes, %",
        ],
        fill="toself",
        name="Average Statistics of Position CB Player",
    ),
    row=1,
    col=2,
)

fig.add_trace(
    go.Scatterpolar(
        r=[
            x["Duels won, %"].values[0],
            x["Accurate passes, %"].values[0],
            x["Accurate short / medium passes, %"].values[0],
        ],
        theta=[
            "Duels won, %",
            "Accurate passes, %",
            "Accurate short / medium passes, %",
        ],
        fill="toself",
        name=x.Player.values[0],
    ),
    row=1,
    col=2,
)

fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
# offline.plot(fig,filename="subplots.html")
fig.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM