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 在groupby中为唯一结果生成饼图子批次?_Python_Matplotlib_Pie Chart - Fatal编程技术网

Python 在groupby中为唯一结果生成饼图子批次?

Python 在groupby中为唯一结果生成饼图子批次?,python,matplotlib,pie-chart,Python,Matplotlib,Pie Chart,为数据帧中的唯一值生成饼图的最佳方法是什么 我有一个数据框,它按县显示服务的数量。我想为每个县制作一组饼图,显示该县的服务数量。我尝试过各种不同的方法,但都没有成功 这是我的数据 打印(mdfgroup) 因此,阿拉芒将有一个图表,其中包括识字、技术、职业的切片;查塔姆、达勒姆等的图表。切片大小将基于ServiceCt 我已经尝试了很多不同的方法,但我不确定最有效的方法是什么。我试过了,但在下面,它并没有按县进行细分,也没有生成任何图表 for i, row in enumerate(mdfgr

为数据帧中的唯一值生成饼图的最佳方法是什么

我有一个数据框,它按县显示服务的数量。我想为每个县制作一组饼图,显示该县的服务数量。我尝试过各种不同的方法,但都没有成功

这是我的数据

打印(mdfgroup)

因此,阿拉芒将有一个图表,其中包括识字、技术、职业的切片;查塔姆、达勒姆等的图表。切片大小将基于ServiceCt

我已经尝试了很多不同的方法,但我不确定最有效的方法是什么。我试过了,但在下面,它并没有按县进行细分,也没有生成任何图表

for i, row in enumerate(mdfgroup.itertuples(),1):
       plt.figure()
       plt.pie(row.ServiceCt,labels=row.Service,
       startangle=90,frame=True, explode=0.2,radius=3)
plt.show()
这会引发一个错误:

TypeError: len() of unsized object
然后生成一个空白的打印框

(我还不能嵌入图像,所以这里有链接)

理想情况下,我希望它们都是子地块,但在这个阶段,我会选择一系列单独的地块。我发现的其他示例没有处理键(县)的唯一值

使用matplotlib 一种常见的方法是迭代列的
groupby
。这里要迭代的列是
“国家”
。您可以首先创建一个子地块栅格,其子地块的数量至少与您具有唯一国家/地区的子地块数量相同。然后您可以同时迭代子批次和组。
最后可能会有一些空的子批次;这些可以设置为不可见

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"Country" : list("AAACCCDDDOWW"),
                   "Service" : list("LTV")*4,
                   "ServiceCt" : list(map(int, "114321111122"))})

cols = 3
g = df.groupby("Country")
rows = int(np.ceil(len(g)/cols))

fig, axes = plt.subplots(ncols=cols, nrows=rows)

for (c, grp), ax in zip(g, axes.flat):
    ax.pie(grp.ServiceCt, labels=grp.Service)
    ax.set_title(c)

if len(g) < cols*rows:    
    for ax in axes.flatten()[len(g):]:
        ax.axis("off")
        
plt.show()

使用熊猫 最后,使用熊猫可以在一条线上完成所有工作

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"Country" : list("AAACCCDDDOWW"),
                   "Service" : list("LTV")*4,
                   "ServiceCt" : list(map(int, "114321111122"))})


df.pivot("Service", "Country", "ServiceCt").plot.pie(subplots=True, legend=False)
        
plt.show()

使用matplotlib 一种常见的方法是迭代列的
groupby
。这里要迭代的列是
“国家”
。您可以首先创建一个子地块栅格,其子地块的数量至少与您具有唯一国家/地区的子地块数量相同。然后您可以同时迭代子批次和组。
最后可能会有一些空的子批次;这些可以设置为不可见

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"Country" : list("AAACCCDDDOWW"),
                   "Service" : list("LTV")*4,
                   "ServiceCt" : list(map(int, "114321111122"))})

cols = 3
g = df.groupby("Country")
rows = int(np.ceil(len(g)/cols))

fig, axes = plt.subplots(ncols=cols, nrows=rows)

for (c, grp), ax in zip(g, axes.flat):
    ax.pie(grp.ServiceCt, labels=grp.Service)
    ax.set_title(c)

if len(g) < cols*rows:    
    for ax in axes.flatten()[len(g):]:
        ax.axis("off")
        
plt.show()

使用熊猫 最后,使用熊猫可以在一条线上完成所有工作

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"Country" : list("AAACCCDDDOWW"),
                   "Service" : list("LTV")*4,
                   "ServiceCt" : list(map(int, "114321111122"))})


df.pivot("Service", "Country", "ServiceCt").plot.pie(subplots=True, legend=False)
        
plt.show()

这就是你的想法吗

Ncounties = len(mdfgroup.County.unique())
fig, axs = plt.subplots(1, Ncounties, figsize=(3*Ncounties,3), subplot_kw={'aspect':'equal'})
for ax,(groupname,subdf) in zip(axs,mdfgroup.groupby('County')):
    ax.pie(subdf.ServiceCt, labels=subdf.Service)
    ax.set_title(groupname)

这就是你的想法吗

Ncounties = len(mdfgroup.County.unique())
fig, axs = plt.subplots(1, Ncounties, figsize=(3*Ncounties,3), subplot_kw={'aspect':'equal'})
for ax,(groupname,subdf) in zip(axs,mdfgroup.groupby('County')):
    ax.pie(subdf.ServiceCt, labels=subdf.Service)
    ax.set_title(groupname)

什么是
mdfgroup
?你可能想看看。哎呀
mdfgroup
是列出的数据帧。更新帖子以澄清。什么是
mdfgroup
?你可能想看看。哎呀
mdfgroup
是列出的数据帧。更新后的帖子来澄清。德拉特,又被揍了一顿!好的,我添加了一些其他选项,让这些答案仍然不同。该死的,又被揍了一顿!好的,我添加了一些其他选项,仍然让这些答案不同。是的!谢谢看到它被写出来,现在完全有道理了。确定有多少个独特的县,使许多子地块,然后通过循环和图表。在我的情况下,数据点有一个公平的分布在不同的群体。由于aspect:equal参数,它确实能够保持散点图的可读性,但是与其他两个子图相比,它将子图的大小更改为一个小矩形。怎么解决这个问题?是的!谢谢看到它被写出来,现在完全有道理了。确定有多少个独特的县,使许多子地块,然后通过循环和图表。在我的情况下,数据点有一个公平的分布在不同的群体。由于aspect:equal参数,它确实能够保持散点图的可读性,但是与其他两个子图相比,它将子图的大小更改为一个小矩形。如何解决这个问题?