2017-07-25 37 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

這可以關閉。 非常感謝您的幫助

相關問題