PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Saturday, April 23, 2022

[FIXED] how to plot different types of charts using plotly and make_subplot in python

 April 23, 2022     bar-chart, pandas, pie-chart, plotly, python     No comments   

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()

enter image description here



Answered By - r-beginners
Answer Checked By - Gilberto Lyons (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing