Radar Chart
In [1]:
Copied!
# !pip install pycirclizely
# !pip install pycirclizely
In [2]:
Copied!
import plotly.io as pio
from IPython.display import HTML
import plotly.io as pio
from IPython.display import HTML
pyCirclize can plot a Radar Chart(wiki) from table dataframe.
Default Style¶
In [3]:
Copied!
import pandas as pd
from pycirclizely import Circos
# Create RPG jobs parameter dataframe (3 jobs, 6 parameters)
df = pd.DataFrame(
data=[
[80, 80, 80, 80, 80, 80],
[90, 95, 95, 30, 30, 80],
[60, 20, 20, 100, 90, 50],
],
index=["Hero", "Warrior", "Wizard"],
columns=["HP", "ATK", "DEF", "SP.ATK", "SP.DEF", "SPD"],
)
print(df)
# Initialize Circos instance for radar chart plot
circos = Circos.radar_chart(df)
# Plot figure
fig = circos.plotfig()
HTML(pio.to_html(fig, include_plotlyjs="cdn"))
import pandas as pd
from pycirclizely import Circos
# Create RPG jobs parameter dataframe (3 jobs, 6 parameters)
df = pd.DataFrame(
data=[
[80, 80, 80, 80, 80, 80],
[90, 95, 95, 30, 30, 80],
[60, 20, 20, 100, 90, 50],
],
index=["Hero", "Warrior", "Wizard"],
columns=["HP", "ATK", "DEF", "SP.ATK", "SP.DEF", "SPD"],
)
print(df)
# Initialize Circos instance for radar chart plot
circos = Circos.radar_chart(df)
# Plot figure
fig = circos.plotfig()
HTML(pio.to_html(fig, include_plotlyjs="cdn"))
HP ATK DEF SP.ATK SP.DEF SPD Hero 80 80 80 80 80 80 Warrior 90 95 95 30 30 80 Wizard 60 20 20 100 90 50
Out[3]:
With Marker & Legend¶
In [4]:
Copied!
import pandas as pd
from pycirclizely import Circos
# Create RPG jobs parameter dataframe (3 jobs, 7 parameters)
df = pd.DataFrame(
data=[
[80, 80, 80, 80, 80, 80, 80],
[90, 20, 95, 95, 30, 30, 80],
[60, 90, 20, 20, 100, 90, 50],
],
index=["Hero", "Warrior", "Wizard"],
columns=["HP", "MP", "ATK", "DEF", "SP.ATK", "SP.DEF", "SPD"],
)
print(df)
# Initialize Circos instance for radar chart plot
circos = Circos.radar_chart(
df,
vmax=100,
marker_size=6,
circular=True,
cmap="Set2",
grid_interval_ratio=0.25,
)
fig = circos.plotfig()
HTML(pio.to_html(fig, include_plotlyjs="cdn"))
import pandas as pd
from pycirclizely import Circos
# Create RPG jobs parameter dataframe (3 jobs, 7 parameters)
df = pd.DataFrame(
data=[
[80, 80, 80, 80, 80, 80, 80],
[90, 20, 95, 95, 30, 30, 80],
[60, 90, 20, 20, 100, 90, 50],
],
index=["Hero", "Warrior", "Wizard"],
columns=["HP", "MP", "ATK", "DEF", "SP.ATK", "SP.DEF", "SPD"],
)
print(df)
# Initialize Circos instance for radar chart plot
circos = Circos.radar_chart(
df,
vmax=100,
marker_size=6,
circular=True,
cmap="Set2",
grid_interval_ratio=0.25,
)
fig = circos.plotfig()
HTML(pio.to_html(fig, include_plotlyjs="cdn"))
HP MP ATK DEF SP.ATK SP.DEF SPD Hero 80 80 80 80 80 80 80 Warrior 90 20 95 95 30 30 80 Wizard 60 90 20 20 100 90 50
Out[4]:
Custom Style¶
In [5]:
Copied!
import pandas as pd
from pycirclizely import Circos
# Create RPG jobs parameter dataframe (4 jobs, 8 parameters)
df = pd.DataFrame(
data=[
[80, 80, 80, 80, 80, 80, 80, 80],
[90, 20, 95, 95, 30, 30, 80, 70],
[60, 90, 20, 20, 100, 90, 50, 70],
[70, 50, 60, 40, 60, 40, 100, 60],
],
index=["Hero", "Warrior", "Wizard", "Assassin"],
columns=["HP", "MP", "ATK", "DEF", "SP.ATK", "SP.DEF", "SPD", "LUK"],
)
print(df)
# Define line keyword arguments handler
def line_kws_handler(col_name: str):
"""Function to deal with line aesthestics."""
if col_name == "Hero":
return dict(line=dict(dash="dot", width=2.0))
else:
return dict(line=dict(dash="solid", width=1.5))
# Initialize Circos instance for radar chart plot
circos = Circos.radar_chart(
df,
vmax=100,
fill=False,
marker_size=6,
bg_color=None,
cmap=dict(Hero="salmon", Warrior="skyblue", Wizard="lime", Assassin="magenta"),
grid_interval_ratio=0.1,
grid_label_formatter=lambda v: f"{v:.1f}pt",
label_kws_handler=lambda _: dict(font=dict(style="italic")),
line_kws_handler=line_kws_handler,
marker_kws_handler=lambda _: dict(
marker=dict(symbol="square", line=dict(color="grey", width=0.5))
),
)
circos.text("RPG Jobs Radar Chart", r=125, font=dict(size=15, weight=18))
# Plot figure & set legend on upper right
fig = circos.plotfig()
HTML(pio.to_html(fig, include_plotlyjs="cdn"))
import pandas as pd
from pycirclizely import Circos
# Create RPG jobs parameter dataframe (4 jobs, 8 parameters)
df = pd.DataFrame(
data=[
[80, 80, 80, 80, 80, 80, 80, 80],
[90, 20, 95, 95, 30, 30, 80, 70],
[60, 90, 20, 20, 100, 90, 50, 70],
[70, 50, 60, 40, 60, 40, 100, 60],
],
index=["Hero", "Warrior", "Wizard", "Assassin"],
columns=["HP", "MP", "ATK", "DEF", "SP.ATK", "SP.DEF", "SPD", "LUK"],
)
print(df)
# Define line keyword arguments handler
def line_kws_handler(col_name: str):
"""Function to deal with line aesthestics."""
if col_name == "Hero":
return dict(line=dict(dash="dot", width=2.0))
else:
return dict(line=dict(dash="solid", width=1.5))
# Initialize Circos instance for radar chart plot
circos = Circos.radar_chart(
df,
vmax=100,
fill=False,
marker_size=6,
bg_color=None,
cmap=dict(Hero="salmon", Warrior="skyblue", Wizard="lime", Assassin="magenta"),
grid_interval_ratio=0.1,
grid_label_formatter=lambda v: f"{v:.1f}pt",
label_kws_handler=lambda _: dict(font=dict(style="italic")),
line_kws_handler=line_kws_handler,
marker_kws_handler=lambda _: dict(
marker=dict(symbol="square", line=dict(color="grey", width=0.5))
),
)
circos.text("RPG Jobs Radar Chart", r=125, font=dict(size=15, weight=18))
# Plot figure & set legend on upper right
fig = circos.plotfig()
HTML(pio.to_html(fig, include_plotlyjs="cdn"))
HP MP ATK DEF SP.ATK SP.DEF SPD LUK Hero 80 80 80 80 80 80 80 80 Warrior 90 20 95 95 30 30 80 70 Wizard 60 90 20 20 100 90 50 70 Assassin 70 50 60 40 60 40 100 60
Out[5]:
In [ ]:
Copied!