Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置具有适当大小和间距的饼图子图_Python_Python 3.x_Pandas_Plotly - Fatal编程技术网

Python 设置具有适当大小和间距的饼图子图

Python 设置具有适当大小和间距的饼图子图,python,python-3.x,pandas,plotly,Python,Python 3.x,Pandas,Plotly,我正在努力设置具有适当大小和间距的饼图子图。 如果饼图的大小太小,则数据不可见,如果子图之间的间距不合适,则图形将被填满。 因此,子地块的布局如下3行:;2列。 请参见数据集中的以下代码片段: violent_main=pd.DataFrame({'Counts': crimes[crimes['Class Main Cathegory'].notnull()==True].groupby(['Police District Number'])['Class Main Cathegory'].v

我正在努力设置具有适当大小和间距的饼图子图。 如果饼图的大小太小,则数据不可见,如果子图之间的间距不合适,则图形将被填满。 因此,子地块的布局如下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
还附带了数据集的打印屏幕:

我正在使用以下代码进行绘图:

#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号地块上方。我希望该地块的大小与其他地块相同,但在1号地块和2号地块下方 请参见下图:

我希望我能找出逻辑,这样我就能画出饼图:3行:2列。
请建议

看看这个极好的答案:

为了获得相同大小的绘图,其
跨度需要相同。域从底部开始(例如,0向下,1向上)

值_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')

我想要的可以通过使用这样的布局字典来实现:

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的上限。因此,仅使用域无法获得子地块之间良好的详细程度和间距。 请参阅随附的打印屏幕

答案解决了你的问题吗?嗨,Maximilian,这不是我想要的,但我设法解决了问题。这是可以解决的。我们不会“关闭”回答的问题;相反,你应该这样做,以便将来对其他人有用。