尝试使用 matplotlib 绘图时出现奇怪的错误
Posted
技术标签:
【中文标题】尝试使用 matplotlib 绘图时出现奇怪的错误【英文标题】:Weird error when trying to plot with matplotlibs 【发布时间】:2020-12-27 08:01:42 【问题描述】:我有一个试图在条形图中绘制的数据框,但我遇到了一个奇怪的错误。
import pandas
import matplotlib.pyplot as plot
.... a bunch of code that combines two different data frames to get one data frame
df = df.groupby(['title']).sum()
df.reindex()
print(df)
df.plot('bar', df['title'], df['number'])
打印语句给出:
Action 1.159667e+10
Adventure 7.086050e+09
Animation 1.159219e+10
Comedy 2.071842e+10
Crime 3.525629e+09
Drama 8.479182e+09
Family 3.705357e+09
Fantasy 3.613503e+10
History 1.261357e+09
Horror 1.034400e+09
Music 1.963180e+09
Romance 1.273498e+10
Sci-Fi 2.586427e+10
Sport 6.863091e+08
Thriller 2.245254e+10
War 1.699709e+09
然后剧情代码:df.plot('bar', df['title'], df['number'])
给出以下错误:
----------------------------------- ---------------------------- KeyError Traceback(最近一次调用 最后的) ~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py 在 get_loc(self, key, method, tolerance) 2645 中尝试: -> 2646 返回 self._engine.get_loc(key) 2647 除了 KeyError:
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'Main_Genre'
在处理上述异常的过程中,又发生了一个异常:
KeyError Traceback(最近调用 最后)在 30 打印(df) 31 ---> 32 df.plot('bar', df['Main_Genre'], df['worldwide_gross'])
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py 在 getitem(self, key) 2798 if self.columns.nlevels > 1: 2799 return self._getitem_multilevel(key) -> 2800 indexer = self.columns.get_loc(key) 2801 if is_integer(indexer): 2802 indexer = [indexer]
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py 在 get_loc(self、key、method、tolerance) 2646 返回 self._engine.get_loc(key) 2647 除了 KeyError: -> 2648 返回 self._engine.get_loc(self._maybe_cast_indexer(key)) 2649 indexer = self.get_indexer([key],method=method,tolerance=tolerance) 2650 如果 indexer.ndim > 1 或 indexer.size > 1:
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item()
我做错了什么?任何帮助将不胜感激。
谢谢
【问题讨论】:
试试:df.plot.bar('title', 'number')
。
发生同样的错误。
【参考方案1】:
我必须编写代码来生成 DataFrame。为了方便起见,下次请确保在问题中包含此内容。
df = pd.DataFrame([
['Action', 1.159667e+10],
['Adventure', 7.086050e+09],
['Animation', 1.159219e+10],
['Comedy', 2.071842e+10],
['Crime', 3.525629e+09],
['Drama', 8.479182e+09],
['Family', 3.705357e+09],
['Fantasy', 3.613503e+10],
['History', 1.261357e+09],
['Horror', 1.034400e+09],
['Music', 1.963180e+09],
['Romance', 1.273498e+10],
['Sci-Fi', 2.586427e+10],
['Sport', 6.863091e+08],
['Thriller', 2.245254e+10],
['War', 1.699709e+09]
], columns=['title', 'number'])
有几种方法可以做到这一点。最简单的一种是您尝试做的方式,但它应该是这样的:
df.plot.bar('title', 'number')
还有另一种做同样事情的方法,更明确。
df.plot(kind='bar', x='title', y='number')
最后,如果你想使用matplotlib
,你可以绘制如下。这是一种标准方式,可以为您提供最大的灵活性,因为您可以调整大部分元素。
import matplotlib.pyplot as plt
plt.figure(figsize=(12,8))
plt.bar(df['title'], df['number'])
plt.xticks(rotation='vertical')
plt.show()
【讨论】:
非常感谢,克里斯托弗。创建数据框的方式的原因是因为我必须结合其他两个数据框才能得到这个最终的数据框,然后将所有相同“标题”的数字相加,所以我不能简单地写数据手动,抱歉我之前没有提供。有什么办法可以更改我必须能够绘制的当前数据框?谢谢 @tommy,我创建的数据框不是和你的一样吗?那有什么区别呢? 我对python还很陌生,但我相信它应该与我正在使用的分组和sun函数有关,就像我分组的列不能用作轴什么的。因为当我在正确分组之前尝试您提到的方式时。是否有任何与会导致此错误的分组数据框相关的内容?分组和求和后我应该对我的数据框进行任何更改吗? @tommy,我想我大概明白你的意思了,但如果我不知道你的原始数据框长什么样,我就无能为力了。以上是关于尝试使用 matplotlib 绘图时出现奇怪的错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 SolidWorks VBA 发出 HTTP 请求时出现奇怪的错误
关闭控制台时出现 Python Matplotlib 运行时错误