从字典中绘制饼图?

Plotting a Pie chart from a dictionary?

我正在尝试构建一个指数中某些行业权重的饼图。

给出这个示例数据框。

Data = { 'Company': ['Google', 'Nike', 'Goldman', 'Tesla'], 'Ticker': ['GOOG', 'NKE', 'GGG', 'TSA'], 'Sector': ['Tech', 'Consumer', 'Financial', 'Auto'], 'Weighting': ['10', '20', '40', '30']

df = pd.DataFrame(Data)

我尝试按部门创建权重字典。

Weight_Sector = df.groupby('Sector')['Weighting'].apply(list).to_dict()

我查了字典,一切都很好。但是,当我继续使用以下代码绘制饼图时,出现错误“ValueError:使用序列设置数组元素。请求的数组在 1 维后具有不均匀的形状。检测到的形状是(9,)+不均匀部分。

plt.pie(Weight_Sector.values(), startangle=90, autopct='%.1f%%')

在我的实际数据框和字典中,有更多的值,而且大多数字典部门都有超过 1 个项目作为权重,对应于不同的公司。

感谢任何帮助!!

有两个问题:

  • 值需要是数字,现在是字符串
  • 不应将单个值放入列表中,它们只能是一个数字,例如对属于同一类别的所有值求和

由于原始数据每个类别只有一个条目,下面的示例额外添加了一个 'Tech'.

from matplotlib import pyplot as plt
import pandas as pd

Data = {'Company': ['Microsoft', 'Google', 'Nike', 'Goldman', 'Tesla'], 'Ticker': ['MSFT', 'GOOG', 'NKE', 'GGG', 'TSA'],
        'Sector': ['Tech', 'Tech', 'Consumer', 'Financial', 'Auto'], 'Weighting': ['1', '10', '20', '40', '30']}

df = pd.DataFrame(Data)
df['Weighting'] = df['Weighting'].astype(float)  # make numeric

Weight_Sector = df.groupby('Sector')['Weighting'].sum().to_dict()

plt.pie(Weight_Sector.values(), labels=Weight_Sector.keys(),
        startangle=90, autopct='%.1f%%', colors=plt.cm.Set2.colors)

plt.show()