Вы можете попробовать этот код:
import pandas as pd
from random import uniform as uni
import plotly.graph_objects as go
import plotly.express as px
from plotly.graph_objs import Data as Data
df = pd.DataFrame({"etiquetas":["a","b","c","d","e","f"],
"pesos":[uni(0.4,1) for i in range(6)]})
def rose_chart1(df):
traces = []
df_ = df.pivot(columns = "etiquetas",values="pesos")
for ind,meta in df_.iterrows():
trace = {
"name": meta.index[ind],
"r": meta.values,
"type": "barpolar",
"opacity": 1,
"theta": df_.columns.values,
"hoverinfo": "r+theta",
"opacity" : 0.68
}
traces.append(trace)
layout = {
"font": {
"size": 16,
"family": "Overpass"
},
"polar": {
"hole": 0.0,
"bargap": 0.05, ## % del total que no se toma en cada area
"radialaxis": {
"visible":True,
"type": "linear",
"title": {"text": "<br>"},
"tickmode": "auto",
"tickfont": {"size": 14},
"autorange": True,
"gridwidth": 2, # ancho de las lineas radiales
"linewidth": 0
},
"angularaxis": {
"type": "category",
"ticklen": 12,
"tickmode":"auto",
"tickfont": {"color": "rgb(22, 22, 22)"},
"direction": "counterclockwise",
"gridwidth": 2,
"tickwidth": 1,
"tickprefix": ""
}
},
"title": {"text": "Contribución en pesos de las variables"},
"xaxis": {
"range": [-1, 6],
"autorange": True
},
"yaxis": {
"range": [-1, 4],
"autorange": True
},
"legend": {
"x": 1,
"y": 1,
"font": {
"size": 14,
"family": "Roboto"
},
"title": {
"font": {
"size": 16,
"color": "rgb(67, 36, 167)",
"family": "Overpass"
},
"text": "Variables"
},
"xanchor": "auto",
"itemsizing": "trace",
"traceorder": "normal",
"borderwidth": 0,
"orientation": "v"
},
"modebar": {
"color": "rgba(68, 68, 68, 0.3)",
"bgcolor": "rgba(118, 6, 6, 0.5)",
"orientation": "h"
},
"autosize": True,
"template": {
"data": {
"bar": [
{
"type": "bar",
"marker": {"colorbar": {
"len": 0.2,
"ticks": "inside",
"ticklen": 6,
"tickcolor": "rgb(237,237,237)",
"outlinewidth": 0
}}
}
],
"carpet": [
{
"type": "carpet",
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"endlinecolor": "rgb(51,51,51)",
"minorgridcolor": "white",
"startlinecolor": "rgb(51,51,51)"
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"endlinecolor": "rgb(51,51,51)",
"minorgridcolor": "white",
"startlinecolor": "rgb(51,51,51)"
}
}
],
},
"layout": {
"geo": {
"bgcolor": "white",
"showland": True,
"lakecolor": "white",
"landcolor": "rgb(237,237,237)",
"showlakes": True,
"subunitcolor": "white"
},
"font": {"color": "rgb(51,51,51)","family": "Overpass"},
"polar": {
"bgcolor": "rgb(237,237,237)",
"radialaxis": {
"ticks": "outside",
"showgrid": True,
"gridcolor": "white",
"linecolor": "white",
"tickcolor": "rgb(51,51,51)"
},
},
"hovermode": "closest",
"plot_bgcolor": "rgb(237,237,237)",
"paper_bgcolor": "white",
"shapedefaults": {
"line": {"width": 0},
"opacity": 0.3,
"fillcolor": "black"},
"annotationdefaults": {
"arrowhead": 0,
"arrowwidth": 1}
}
},
"radialaxis": {"ticksuffix": "%"},
"separators": ", ",
"orientation": 0
}
data = Data(traces)
fig = go.Figure(data,layout)
fig.show()
тогда, если вы запустите
rose_chart1(df)
, вы получите: