Pandas: ValueError تخطيط شريط الرسم من DataFrame مع المحاور الموجودة

تم إنشاؤها على ٢٤ أغسطس ٢٠١٦  ·  3تعليقات  ·  مصدر: pandas-dev/pandas

نموذج التعليمات البرمجية ، مثال يمكن نسخه ولصقه إن أمكن

تعمل التعليمات البرمجية التالية ، وعند لصقها في Jupyter Notebook أو وحدة تحكم QT ، ينتج عن مخطط الشريط المتوقع:

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

# Create some data to plot
df = pd.DataFrame(
        dict(Feature1=[10, 20, 30, 20, 10], Feature2=[3, 2, 3, 2, 3]),
        index=['a', 'b', 'c', 'd', 'e']
)
_ = df.plot(kind='bar', legend=False, y='Feature1', yerr='Feature2', rot=0)

ومع ذلك ، بمجرد أن أحاول توفير مثيل Axes مخصص (بحيث يتم وضع الحبكة في المكان الذي أريده) ، فإنها تلقي بخطأ. يؤدي تشغيل الكود التالي بعد المثال أعلاه إلى حدوث خطأ:

fig = plt.figure(0)
ax = fig.add_subplot(111)
_ = df.plot(kind='bar', legend=False, y='Feature1', yerr='Feature2', rot=0, axes=ax)

هنا هو traceback:

Traceback (most recent call last):
  File "<stdin>", line 12, in <module>
  File "/usr/local/miniconda3/lib/python3.5/site-packages/pandas/tools/plotting.py", line 3740, in __call__
    sort_columns=sort_columns, **kwds)
  File "/usr/local/miniconda3/lib/python3.5/site-packages/pandas/tools/plotting.py", line 2614, in plot_frame
    **kwds)
  File "/usr/local/miniconda3/lib/python3.5/site-packages/pandas/tools/plotting.py", line 2441, in _plot
    plot_obj.generate()
  File "/usr/local/miniconda3/lib/python3.5/site-packages/pandas/tools/plotting.py", line 1028, in generate
    self._make_plot()
  File "/usr/local/miniconda3/lib/python3.5/site-packages/pandas/tools/plotting.py", line 1971, in _make_plot
    log=self.log, **kwds)
  File "/usr/local/miniconda3/lib/python3.5/site-packages/pandas/tools/plotting.py", line 1918, in _plot
    return ax.bar(x, y, w, bottom=start, log=log, **kwds)
  File "/usr/local/miniconda3/lib/python3.5/site-packages/matplotlib/__init__.py", line 1812, in inner
    return func(ax, *args, **kwargs)
  File "/usr/local/miniconda3/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 2134, in bar
    self.add_patch(r)
  File "/usr/local/miniconda3/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 1780, in add_patch
    self._set_artist_props(p)
  File "/usr/local/miniconda3/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 865, in _set_artist_props
    a.axes = self
  File "/usr/local/miniconda3/lib/python3.5/site-packages/matplotlib/artist.py", line 237, in axes
    raise ValueError("Can not reset the axes.  You are "
ValueError: Can not reset the axes.  You are probably trying to re-use an artist in more than one Axes which is not supported

الناتج المتوقع

أتوقع أن تعمل الحبكة الثانية بشكل مماثل للحبكة الأولى في هذا المثال.

الناتج pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.5.2.final.0
python-bits: 64
OS: Linux
OS-release: 4.4.6-gentoo
machine: x86_64
processor: Intel(R) Core(TM) i3-3240 CPU @ 3.40GHz
byteorder: little
LC_ALL: None
LANG: en_US.utf8

pandas: 0.18.1
nose: 1.3.7
pip: 8.1.2
setuptools: 25.1.6
Cython: None
numpy: 1.11.1
scipy: 0.18.0
statsmodels: 0.6.1
xarray: None
IPython: 5.1.0
sphinx: 1.4.1
patsy: 0.4.1
dateutil: 2.5.3
pytz: 2016.6.1
blosc: None
bottleneck: None
tables: 3.2.3.1
numexpr: 2.6.1
matplotlib: 1.5.1
openpyxl: None
xlrd: 1.0.0
xlwt: None
xlsxwriter: None
lxml: None
bs4: None
html5lib: None
httplib2: None
apiclient: None
sqlalchemy: 1.0.13
pymysql: None
psycopg2: 2.6.1 (dt dec pq3 ext)
jinja2: 2.8
boto: None
pandas_datareader: None

(FWIW ، لقد قمت للتو ببناء أحدث إصدار من الباندا وجربته وحصلت على نفس السلوك:

pandas: 0.18.1+391.g6645b2b

)

Usage Question

التعليق الأكثر فائدة

تريد استخدام ax=ax وليس axes .

لسوء الحظ ، لا أعتقد أن هناك الكثير مما يمكننا القيام به للقبض على هذا النوع من الأخطاء. نحن نقبل **kwargs في طرق .plot ، ونمررها إلى طريقة matplotlib الأساسية (على سبيل المثال ، .ax.bar ). لست متأكدًا حقًا من سبب قبول matplotlib axes.bar لكلمة رئيسية axes ، على الأرجح للتوافق مع واجهة pylab؟

ال 3 كومينتر

تريد استخدام ax=ax وليس axes .

لسوء الحظ ، لا أعتقد أن هناك الكثير مما يمكننا القيام به للقبض على هذا النوع من الأخطاء. نحن نقبل **kwargs في طرق .plot ، ونمررها إلى طريقة matplotlib الأساسية (على سبيل المثال ، .ax.bar ). لست متأكدًا حقًا من سبب قبول matplotlib axes.bar لكلمة رئيسية axes ، على الأرجح للتوافق مع واجهة pylab؟

سأغلق هذا الآن ؛ من المحتمل أن نقبل axes كاسم مستعار لـ ax (لست متأكدًا من سبب اختيار ax في الأصل) ، لكنني سأقول الانتظار الآن ومعرفة ما إذا كان المزيد من الأشخاص يجرون في هذا.

أك. شكرا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات