Pandas: ValueError memplot plot batang dari DataFrame dengan Sumbu yang ada

Dibuat pada 24 Agu 2016  ·  3Komentar  ·  Sumber: pandas-dev/pandas

Contoh Kode, contoh copy-paste jika memungkinkan

Kode berikut berfungsi, dan ketika ditempel di Notebook Jupyter atau konsol QT menghasilkan plot batang yang diharapkan:

%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)

Namun, segera setelah saya mencoba menyediakan instance kustom Axes (sehingga plot diletakkan di tempat yang saya inginkan), itu membuat kesalahan. Menjalankan kode berikut setelah contoh di atas membuat kesalahan:

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

Berikut traceback-nya:

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

Output yang Diharapkan

Saya berharap plot kedua bekerja sama dengan plot pertama dalam contoh ini.

keluaran 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, saya baru saja membuat dan mencoba panda versi terbaru dan mendapatkan perilaku yang sama:

pandas: 0.18.1+391.g6645b2b

)

Usage Question

Komentar yang paling membantu

Anda ingin menggunakan ax=ax , bukan axes .

Sayangnya, menurut saya tidak banyak yang bisa kami lakukan untuk menangkap kesalahan semacam ini. Kami menerima **kwargs dalam metode .plot , dan meneruskannya ke metode matplotlib yang mendasarinya (misalnya .ax.bar ). Saya tidak begitu yakin mengapa matplotlib axes.bar menerima kata kunci axes , mungkin untuk kompatibilitas dengan antarmuka pylab?

Semua 3 komentar

Anda ingin menggunakan ax=ax , bukan axes .

Sayangnya, menurut saya tidak banyak yang bisa kami lakukan untuk menangkap kesalahan semacam ini. Kami menerima **kwargs dalam metode .plot , dan meneruskannya ke metode matplotlib yang mendasarinya (misalnya .ax.bar ). Saya tidak begitu yakin mengapa matplotlib axes.bar menerima kata kunci axes , mungkin untuk kompatibilitas dengan antarmuka pylab?

Saya akan menutup ini untuk saat ini; kami berpotensi menerima axes sebagai alias untuk ax (tidak yakin mengapa ax awalnya dipilih), tetapi saya akan mengatakan tunda untuk saat ini dan lihat apakah lebih banyak orang yang menjalankan ke dalam ini.

Ack. Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat