代码段看起来像这样
#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
它生成一个如下的饼图:
正如你所看到的,厨房和厨房行业娱乐很小。我想让每个扇区的最小值都为10度(1/36%)。
这实际上意味着将数据拟合超过300度(每个扇区10度,我们有6个 - 照明,娱乐,厨房,冷却,冰箱,其他)
答案 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)