[英]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'}], [{ '类型':'极地'}]]
我该如何解决这个问题?
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.