Issue
I want to plot mixed subplots of pie chart and bar chart how to do it ?
Until now I am able to plot the pie charts but how to add the bar chart ?
The code below is perform a groupby function and iterate over the returned object in order to subplot several pie charts based on unique values of the groupby object.
dataframe:
event_type date event_mohafaza number_person groups
0 watch movie 2020-08-14 loc1 25 group1
1 stay at home 2020-08-14 loc3 32 group1
2 watch movie 2020-08-14 loc2 45 group2
3 swimming 2020-08-14 loc4 12 group1
4 stay at home 2020-08-14 loc2 45 group3
5 watch movie 2019-06-14 loc5 22 group1
6 watch movie 2020-08-14 loc2 10 group4
7 watch movie 2020-08-14 loc1 44 group1
8 stay at home 2020-08-14 loc3 22 group3
9 swimming 2020-08-14 loc2 32 group2
10 watch movie 2019-09-14 loc1 17 group1
11 camping 2020-08-14 loc4 27 group1
12 watch movie 2020-08-14 loc5 43 group3
13 meeting 2019-06-14 loc2 33 group2
14 camping 2020-08-14 loc1 21 group4
code:
import plotly.graph_objs as go
from plotly.subplots import make_subplots
# data for this example
import plotly.express as px
lst = list(df.groupby('event_mohafaza '))
# here we want our grid to be 2 x 3
rows = 2
cols = 3
# continents are the first element in l
subplot_titles = [l[0] for l in lst]
# a compact and general version of what you did
specs = [[{'type':'domain'}]* cols] * rows
fig = make_subplots(
rows=rows,
cols=cols,
subplot_titles=subplot_titles,
specs=specs,
print_grid=True)
for i, l in enumerate(lst):
# basic math to get col and row
row = i // cols + 1
col = i % (rows + 1) + 1
# this is the dataframe for every continent
d = l[1]
fig.add_trace(
go.Pie(labels=d["event_type"],
values = d["number_person"],
hovertemplate = "%{label}: <br>Value: %{value} ",
showlegend=True,
textposition='inside',
rotation=90
),
row=row,
col=col
)
# fig.add_trace(go.Bar(y=df.event_type, opacity=0.3), 1, 1)
fig.update_layout(title="Population by Continent", title_x=0.5)
fig.show()
Solution
We modified the code with the understanding that we were adding a sixth bar chart. It's not clear what kind of bar chart you want to add, so I've set it up as you see fit. The point is that you need to specify a graph that matches the subplot structure.
import plotly.graph_objs as go
from plotly.subplots import make_subplots
# data for this example
import plotly.express as px
lst = list(df.groupby('event_mohafaza'))
# here we want our grid to be 2 x 3
rows = 2
cols = 3
# continents are the first element in l
subplot_titles = [l[0] for l in lst]
# a compact and general version of what you did
# specs = [[{'type':'domain'}]* cols] * rows
specs = [[{"type": "pie"},{"type": "pie"},{"type": "pie"}],[{"type": "pie"},{"type": "pie"},{"type": "bar"}]]
fig = make_subplots(
rows=rows,
cols=cols,
subplot_titles=subplot_titles,
specs=specs,
print_grid=True)
for i, l in enumerate(lst):
# basic math to get col and row
row = i // cols + 1
col = i % (rows + 1) + 1
# this is the dataframe for every continent
d = l[1]
fig.add_trace(go.Pie(labels=d["event_type"],
values = d["number_person"],
hovertemplate = "%{label}: <br>Value: %{value} ",
showlegend=True,
textposition='inside',
rotation=90),
row=row,
col=col
)
fig.add_trace(go.Bar(x=df.groups, y=df.number_person, opacity=0.3, showlegend=False), row=2, col=3)
fig.update_layout(title="Population by Continent", title_x=0.5)
fig.show()
Answered By - r-beginners Answer Checked By - Gilberto Lyons (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.