如何使用matplotlib为饼图的每个楔形添加恒定百分比

时间:2016-09-01 04:36:33

标签: python pandas matplotlib

代码段看起来像这样

#df is dataframe with 6 rows, with each row index being the label of the sector
plt.pie(df.iloc[:,0], labels= df.index) #plot the first column of dataframe as a pie chart 

它生成一个如下的饼图:

Pie Chart with the 6 sectors.

正如你所看到的,厨房和厨房行业娱乐很小。我想让每个扇区的最小值都为10度(1/36%)。

这实际上意味着将数据拟合超过300度(每个扇区10度,我们有6个 - 照明,娱乐,厨房,冷却,冰箱,其他)

2 个答案:

答案 0 :(得分:2)

  

我想让每个部门的最小值都为10度

对于一般情况解决这个问题很困难,需要进一步定义。这会在结果中引入偏差,并且要在不同算法之间做出决定,您需要指定一个度量标准,用于定义某些偏差结果与原始结果的接近程度。

但是,您可以做一件非常简单的事情来保证您的要求。假设您的DataFrame的长度是 n ,其元素的总和是 s ,并且您希望结果不小于α(在您的情况下,α= 1./36 )。如果您只是将 x 添加到所有元素,那么新的总和将是

s + nx

假设没有元素为负数,则最小元素的权重至少为 x /(s + nx)

解决

x /(s + nx)=α

给出

x =sα/(1 - αn)

所以,如果你希望饼图的系列是df.a,你可以做

x = max(df.a.sum() * alpha / (1 - alpha * len(df)), 0)

然后改为df.a + x

示例

df = pd.DataFrame({'a': [1, 2, 3, 40, 40, 50, 50, 500]})

x = max(df.a.sum() * alpha / (1 - alpha * len(df)), 0)

您可以检查df.a + x

的最小相对权重
(df.a + x).min() / (df.a + x).sum()

确实大于α

答案 1 :(得分:1)

免责声明:这是我自己的问题。

Ami Tavory回答的是正确的方法。我从绘图的角度思考它(将数据拟合到300度而不是360度)而不是操纵数据(由于熊猫,这更简单)。

我只是发布了一个更简单的答案形式:

Initializing tablesorter

Built headers: (3 ms)
[th.tablesorter-header.tablesorter-headerUnSorted, th.tablesorter-header.tablesorter-headerDesc, th.tablesorter-header.sorter-false.tablesorter-headerUnSorted]
  0: th.tablesorter-header.tablesorter-headerUnSorted
  1: th.tablesorter-header.tablesorter-headerUnSorted
  2: th.tablesorter-header.sorter-false.tablesorter-headerUnSorted
  length: 3__proto__: Object[0]

Detecting parsers for each column
Building cache for 29 rows (showing 5 rows in log) and 3 columns (3 ms)
Start initializing widgets
Completed initializing 1 widget (2 ms)
Start applying widgets
Completed applying 1 widget (2 ms)
Overall initialization time:  (28 ms)



Initializing tablesorter

Built headers: (3 ms)
[th.tablesorter-header, th.tablesorter-header, th.tablesorter-header.sorter-false]
  0: th.tablesorter-header.tablesorter-headerUnSorted
  1: th.tablesorter-header.tablesorter-headerDesc
  2: th.tablesorter-header.sorter-false.tablesorter-headerUnSorted
  length: 3__proto__: Object[0]

Detecting parsers for each column
Building cache for 29 rows (showing 5 rows in log) and 3 columns (2 ms)
Start initializing widgets
Completed initializing 1 widget (2 ms)
Applying sort 1,1 (1 ms)
Rebuilt table (3 ms)
Start applying widgets
Completed applying 1 widget (2 ms)
Start applying widgets
Completed applying 1 widget (2 ms)
Overall initialization time:  (28 ms)