繁体   English   中英

如何在python中使用plotly和make_subplot绘制不同类型的图表

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

我想绘制饼图和条形图的混合子图怎么做?

到目前为止,我可以绘制饼图,但如何添加条形图?

下面的代码执行groupby函数并迭代返回的对象,以便根据 groupby 对象的唯一值绘制多个饼图。

数据框:

   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

代码:

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

 

我们修改了代码,知道我们要添加第六个条形图。 不清楚您要添加哪种条形图,因此我已按照您认为合适的方式进行设置。 关键是您需要指定一个与子图结构匹配的图形。

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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM