我有一个数据框(df),显示与各种业务类别相关的情绪:
我的任务是创建饼图,以显示每种业务的情绪百分比。因此,我需要在matplotlib中创建一个读取“业务”列的函数,然后针对数据框中的每一行使用每种情感类别构建一个饼图。
我已经建立了一个条形图,但是饼形图没有运气。编辑:这是我的条形图代码:
import pandas as pd
import csv
import matplotlib.pyplot as plt
GraphData = open("barGraph.csv")
df = pd.read_csv('barGraph.csv')
ax = df.plot(kind='bar', title ="Emotions at Various Businesses", figsize=(15, 10), legend=True, fontsize=12)
ax.set_xlabel("Business Type",fontsize=12)
ax.set_ylabel("Strength of Emotion",fontsize=12)
ax.set_xticklabels(['Beauty & Spas', 'Burgers-Restaurants', 'Pizza', 'Mexican Restaurants', 'Modern European-Restaurants', 'Chinese'])
plt.show()
我已经阅读了饼状图上的文档,但对我来说没有任何意义,至少因为它涉及从数据框而非系列中提取数据。
有什么建议?
考虑数据框 df
df = pd.DataFrame(dict(
Business='Beauty & Spas;Burgers-Restaurants;Pizza;Mexican Restaurants;Modern European-Restaurants;Chineese'.split(';'),
aniticipation=[0] * 6,
enjoyment=[6., 1., 6., 33.,150., 19.5],
sad=[1., 2., 1., 3., 13.5, 0.],
disgust=[1, 1, 0, 3, 37, 3],
anger=[1.5, 2., 4., 9., 19., 3.],
surprise=[3, 0, 0, 2, 12, 1],
fear=[0, 1, 1, 9, 22, 1],
trust=[0] * 6
))
您可以像这样创建饼图
fig, axes = plt.subplots(2, 3, figsize=(10, 6))
for i, (idx, row) in enumerate(df.set_index('Business').iterrows()):
ax = axes[i // 3, i % 3]
row = row[row.gt(row.sum() * .01)]
ax.pie(row, labels=row.index, startangle=30)
ax.set_title(idx)
fig.subplots_adjust(wspace=.2)
谢谢,piRSquared。我真的很感激。
@AndrewSmith您可能正在使用jupyter笔记本,需要运行'%matplotlib inline'
对,就是这样。为什么Jupyter需要内联格式?
@piRSquared,这是不错的代码,谢谢。如果我也想在每个饼图中显示值。我们该怎么做?例如:Beauty&Spas,我们要显示的乐趣是6,它是红色。有什么帮助吗?