从字典中绘制饼图?
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()
我正在尝试构建一个指数中某些行业权重的饼图。
给出这个示例数据框。
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()