2017-07-25 63 views
0

我在努力设置具有适当大小和间距的饼图子图解。 如果饼图的大小很小,则数据不可见,如果子图之间的间距不合适,则该图将被挤满。 所以子图的布局是以下3行; 2列。 请参考下面从数据集片段:设置具有适当大小和间距的饼图子图解

violent_main=pd.DataFrame({'Counts': crimes[crimes['Class Main Cathegory'].notnull()==True].groupby(['Police District Number'])['Class Main Cathegory'].value_counts()}).reset_index() 
violent_main 

数据集还附有打印屏幕: dataset snippet

我用下面的代码绘制:

#PD_1D 
label_PD_1D=violent_main[violent_main['Police District Number']=='1D']['Class Main Cathegory'] 
values_PD_1D=violent_main[violent_main['Police District Number']=='1D']['Counts'] 

#PD_2D 
label_PD_2D=violent_main[violent_main['Police District Number']=='2D']['Class Main Cathegory'] 
values_PD_2D=violent_main[violent_main['Police District Number']=='2D']['Counts'] 

#PD_3D 
label_PD_3D=violent_main[violent_main['Police District Number']=='3D']['Class Main Cathegory'] 
values_PD_3D=violent_main[violent_main['Police District Number']=='3D']['Counts'] 

#PD_4D 
label_PD_4D=violent_main[violent_main['Police District Number']=='4D']['Class Main Cathegory'] 
values_PD_4D=violent_main[violent_main['Police District Number']=='4D']['Counts'] 

fig = { 
    "data": [ 
    { 
     "values": values_PD_1D, 
     "labels": label_PD_1D, 
     "domain": {'x': [0.0, 0.35], 'y': [2.22, 2.53]}, 
     "name": "PD_1D", 
     "hoverinfo":"label+percent+name", 
     "hole": .4, 
     "type": "pie" 
    },  
    { 
     "values": values_PD_2D, 
     "labels": label_PD_2D, 
     "text":"CO2", 
     "textposition":"inside", 
     "domain":{'x': [0.50, 0.85], 'y': [2.22, 2.53]}, 
     "name": "PD_2D", 
     "hoverinfo":"label+percent+name", 
     "hole": .4, 
     "type": "pie" 
    }, 
    { 
     "values": values_PD_3D, 
     "labels": label_PD_3D, 
     "text":"CO2", 
     "textposition":"inside", 
     'domain': {'x': [0.0, 0.35], 'y': [.9, 1.13]}, 
     "name": "CO2 Emissions", 
     "hoverinfo":"label+percent+name", 
     "hole": .4, 
     "type": "pie" 
    } 
    ], 
    "layout": { 
     "title":"Violent Crimes by main cathegory", 
     "annotations": [ 
      { 
       "font": { 
        "size": 20 
       }, 
       "showarrow": False, 
       "text": "PD_1D", 
       "x": 0.12, 
       "y": 0.5 
      }, 
      { 
       "font": { 
        "size": 20 
       }, 
       "showarrow": False, 
       "text": "PD_2D", 
       "x": 0.73, 
       "y": 0.5 
       }, 
      { 
       "font": { 
        "size": 20 
       }, 
       "showarrow": False, 
       "text": "PD_3D", 
       "x": 0.20, 
       "y": 0.25 
       } 
      ] 
     } 
    } 
iplot(fig, filename='donut') 

在这个代码中,我'试图使用“域”来操作布局:{x:[],y:[])但是我不能期望布局。因此,例如积3号较小,上述地块1和地块2,我想的是,情节是大小的其他地块,但低于然后 请参考下面的情节一样: plot

我希望我能弄清楚逻辑,以便我可以绘制饼图:3行:2列。 请告知

+0

答案解决了您的问题吗? –

+0

嗨马克西米利安这不是我正在寻找,但我设法解决这个问题。这可以关闭 – praslea

回答

0

看一看这个优秀的答案:How to plot pie charts as subplots with custom size with Plotly in Python

为了得到相同尺寸绘制的domain跨度必须是相同的。域从底部开始(例如,0下降,1上升)。

enter image description here values_PD_1D = [I为i的范围(30,100,10)] values_PD_2D = values_PD_1D [:: - 1] values_PD_3D = values_PD_1D [:: - 2]

label_PD_1D = ['Javascript', 'Python', 'R', 'Java', 'C#', 'C++', 'Perl'] 
label_PD_2D = label_PD_1D 
label_PD_3D = label_PD_1D[::-2] 

fig = { 
    "data": [ 
    { 
     "values": values_PD_1D, 
     "labels": label_PD_1D, 
     "domain": {'x': [0.0, 0.45], 'y': [0, 0.45]}, 
     "name": "PD_1D", 
     "hoverinfo":"label+percent+name", 
     "hole": .4, 
     "type": "pie" 
    },  
    { 
     "values": values_PD_2D, 
     "labels": label_PD_2D, 
     "textposition":"inside", 
     "domain":{'x': [0.55, 1], 'y': [0, 0.45]}, 
     "name": "PD_2D", 
     "hoverinfo":"label+percent+name", 
     "hole": .4, 
     "type": "pie" 
    }, 
    { 
     "values": values_PD_3D, 
     "labels": label_PD_3D, 
     'domain': {'x': [0.0, 0.45], 'y': [0.55, 1]}, 
     "hoverinfo":"label+percent+name", 
     "hole": .4, 
     "type": "pie" 
    } 
    ], 
    "layout": { 
     "title":"Programming languages", 
     "annotations": [ 
      { 
       "font": { 
        "size": 20 
       }, 
       "showarrow": False, 
       "text": "PD_1D", 
       "x": 0.12, 
       "y": 0.5 
      }, 
      { 
       "font": { 
        "size": 20 
       }, 
       "showarrow": False, 
       "text": "PD_2D", 
       "x": 0.73, 
       "y": 0.5 
       }, 
      { 
       "font": { 
        "size": 20 
       }, 
       "showarrow": False, 
       "text": "PD_3D", 
       "x": 0.12, 
       "y": 1.1 
       } 
      ] 
     } 
    } 

plotly.offline.iplot(fig, filename='donut') 
0

什么我想可以通过使用布局词典这样来实现:

layout = dict(height = 1200, 
       width = 1000, 
       autosize = False, 
       title = 'Violent Crimes/PD by main cathegory', 
       annotations= [{"font": {"size": 24},"showarrow": False,"text": "PD_1D","x": 0.14, "y": 0.82}, 
          {"font": {"size": 24},"showarrow": False,"text": "PD_2D","x": 0.86, "y": 0.82}, 
          {"font": {"size": 24},"showarrow": False,"text": "PD_3D","x": 0.14, "y": 0.48}, 
          {"font": {"size": 24},"showarrow": False,"text": "PD_4D","x": 0.86, "y": 0.48}, 
          {"font": {"size": 24},"showarrow": False,"text": "PD_5D","x": 0.14, "y": 0.13}, 
          {"font": {"size": 24},"showarrow": False,"text": "PD_6D","x": 0.86, "y": 0.13}] 

      ) 

在布局词典中的宽度,高度参数控制副区大小。 x,y域为每个子区域提供更多的起始点,并且绑定到1的上限。因此,只能使用域,不能在子图之间获得良好的细节和间距。 查看附件打印屏幕 Pie chart with appropriate size

这可以关闭。 非常感谢您的帮助