Cara membuat plotless notebook IPython matplotlib inline


831

Saya mencoba menggunakan notebook IPython di MacOS X dengan Python 2.7.2 dan IPython 1.1.0.

Saya tidak bisa mendapatkan grafik matplotlib untuk muncul inline.

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

Saya juga sudah mencoba %pylab inlinedan argumen ipython command line --pylab=inlinetetapi ini tidak ada bedanya.

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()

Alih-alih grafis sebaris, saya mendapatkan ini:

<matplotlib.figure.Figure at 0x110b9c450>

Dan matplotlib.get_backend()menunjukkan bahwa saya memiliki 'module://IPython.kernel.zmq.pylab.backend_inline'backend.


cuplikan kode Anda tidak boleh menghasilkan <matplotlib.figure.Figure at 0x110b9c450>tetapi <matplotlib.text.Text at 0x94f9320>(karena baris terakhir Anda mencetak judul). Bagaimanapun, kode Anda (dengan% matplotlib inline dan plt.show ()) berfungsi seperti yang diharapkan di windows
joaquin

Terima kasih atas saran itu, tetapi itu tidak berhasil untuk saya. Saya masih mendapatkan output di atas tanpa grafis inline. Apakah Anda memiliki saran pemecahan masalah?
Ian Fiske

tidak tahu. Python yang sama, ipython yang sama (dan backend yang sama) tetapi pada windows, dan itu berfungsi .... Saya kira plot bekerja untuk Anda ketika tidak inline, kan?
joaquin

2
tanpa %matplotlib inline, kernel tetap sibuk secara permanen dan saya tidak mendapatkan output. Itu harus dibunuh. Ini mencoba menggunakan MacOSXbackend tapi saya kira itu tidak bisa dibuka karena alasan tertentu. Ketika tidak menggunakan notebook ipython, backend MacOSX untuk matplotlib berfungsi dengan baik.
Ian Fiske

1
Saya memiliki gejala yang identik tetapi ternyata saya telah menginstal versi 32 bit Canopy pada OSX 10.8. Menginstal ulang dengan versi 64 bit memperbaikinya.
Vicky T

Jawaban:


1130

Saya digunakan %matplotlib inlinedi sel pertama notebook dan berfungsi. Saya pikir Anda harus mencoba:

%matplotlib inline

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

Anda juga dapat selalu memulai semua kernel IPython Anda dalam mode inline secara default dengan mengatur opsi-opsi konfigurasi berikut dalam file-file konfigurasi Anda:

c.IPKernelApp.matplotlib=<CaselessStrEnum>
  Default: None
  Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']
  Configure matplotlib for interactive use with the default matplotlib backend.

7
Saya akan menandai ini sebagai jawaban yang benar. Alternatif --pylab inlineberfungsi, tetapi menyambut Anda dengan peringatan berikut: Memulai semua kernel dalam mode pylab tidak dianjurkan, dan akan dinonaktifkan di rilis mendatang. Silakan gunakan% matplotlib magic untuk mengaktifkan matplotlib sebagai gantinya. pylab menyiratkan banyak impor, yang dapat memiliki efek samping yang membingungkan dan merusak kemampuan reproduksi notebook Anda.
mpavlov

1
@ eNord9 @mightwolf: Saya belajar menggunakan iPython (dan pemrograman Python alih-alih Matlab); apa import matplotlib' do versus impor matplotlib sebagai [nama] '? Maafkan untuk komentar sederhana
TSGM

1
@ eNord9 @mightwolf: dan juga bagaimana ini dibandingkan dengan `dari matplotlib import mpl '.
TSGM

2
@TSGM Penjelasan terbaik yang pernah saya lihat untuk pertanyaan Anda adalah: effbot.org/zone/import-confusion.htm
mpavlov

Terima kasih @ eNord9. Saya baru saja menguji perintah Anda karena sudah lama dengan pembaruan dan semua. Sekarang semuanya berfungsi dengan baik di Python 2.7.9 dan IPython 3.1.0.
Ian Fiske

216

Jika versi matplotlib Anda di atas 1.4, Anda juga dapat menggunakannya

IPython 3.x dan di atasnya

%matplotlib notebook

import matplotlib.pyplot as plt

versi yang lebih lama

%matplotlib nbagg

import matplotlib.pyplot as plt

Keduanya akan mengaktifkan backend nbagg , yang memungkinkan interaktivitas.

Contoh plot dengan backend nbagg


Ini sepertinya tidak berhasil %config InlineBackend.figure_format='retina'. Adakah yang tahu bagaimana cara mendapatkan angka Retina interaktif?
orome

Hmm ... Saya tidak benar-benar memiliki terlalu banyak keahlian dengan angka retina. Satu-satunya hal yang saya temukan adalah tautan ini , tetapi mungkin sudah usang. Jika lebih banyak orang bertanya-tanya tentang hal yang sama, saya menghubungkan pertanyaan SO Anda di sini , dan semoga Anda beruntung dengan jawaban di sana. Terbaik
Løiten

31
Jawaban ini diremehkan. %matplotlib notebookmemberikan visualisasi yang lebih baik daripada %matplotlib inline.
Hieu

9
menggunakan %matplotlib notebooktidak bekerja (semacam menunjukkan sesuatu, kemudian kosong) pada jupyter notebook 4.1.1 / ubuntu 16.04 / chrome, %matplotlib inlinememang menunjukkan gambar, tetapi mereka datang setelah teks penurunan harga, tidak secara harfiah "inline".
michael

6
Jika Anda mencoba %matplotlib inlinedulu dan kemudian beralih ke %matplotlib notebook, Anda mungkin mendapatkan hasil kosong. Mulai ulang kernel dan jalankan kembali.
Czechnology


24

Gunakan %pylab inlineperintah ajaib.


14
Tidak lagi: "ipython notebook --pylab inline [E 15: 01: 18.182 NotebookApp] Dukungan untuk menentukan --pylab pada baris perintah telah dihapus. [E 15: 01: 18.182 NotebookApp] Silakan gunakan %pylab inlineatau %matplotlib inlinedi notebook itu sendiri. "
Dave X

14

Untuk membuat matplotlib inline secara default di Jupyter (IPython 3):

  1. Edit file ~/.ipython/profile_default/ipython_config.py

  2. Tambahkan baris c.InteractiveShellApp.matplotlib = 'inline'

Harap perhatikan bahwa menambahkan baris ini ke ipython_notebook_config.pytidak akan berfungsi. Kalau tidak, ia bekerja dengan baik dengan Jupyter dan IPython 3.1.0




5

Saya melakukan instalasi anaconda tetapi matplotlib tidak merencanakan

Itu mulai merencanakan ketika saya melakukan ini

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

2

Anda dapat mensimulasikan masalah ini dengan kesalahan sintaksis, namun, %matplotlib inlinetidak akan menyelesaikan masalah.

Pertama, contoh cara yang tepat untuk membuat plot. Semuanya berfungsi seperti yang diharapkan dengan impor dan sihir yang disediakan eNord9 .

df_randNumbers1 = pd.DataFrame(np.random.randint(0,100,size=(100, 6)), columns=list('ABCDEF'))

df_randNumbers1.ix[:,["A","B"]].plot.kde()

Namun, dengan meninggalkan ()ujung tipe plot Anda menerima kesalahan yang agak ambigu.

Kode tidak senonoh:

df_randNumbers1.ix[:,["A","B"]].plot.kde

Kesalahan contoh:

<bound method FramePlotMethods.kde of <pandas.tools.plotting.FramePlotMethods object at 0x000001DDAF029588>>

Selain pesan satu baris ini, tidak ada jejak tumpukan atau alasan jelas lainnya untuk berpikir Anda membuat kesalahan sintaksis. Plotnya tidak dicetak.


Ini bukan kesalahan sintaksis - tanpa ()harus memohon kde , iPython memberi tahu Anda apa yang kde disebut metode terikat. Jadi sebenarnya dari perspektif iPython, ini sama sekali bukan "kesalahan", karenanya mengapa tidak ada jejak tumpukan.
Kyle Strand

1
@KyleStrand Terima kasih. Setelah membaca kembali posting saya, apa yang seharusnya saya katakan adalah: "Saya pikir saya punya masalah tidak mendapatkan plot saya untuk menunjukkan inline menggunakan %matplotlib inlineperintah. Sungguh saya hanya lupa untuk meletakkan () pada akhir jenis plot. Jadi jika semuanya gagal, lihat tanda kurung Anda untuk kesalahan. "
Blake M

1

Saya memiliki masalah yang sama ketika saya menjalankan perintah plotting di sel-sel terpisah di Jupyter:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         <Figure size 432x288 with 0 Axes>                      #this might be the problem
In [4]:  ax = fig.add_subplot(1, 1, 1)
In [5]:  ax.scatter(x, y)
Out[5]:  <matplotlib.collections.PathCollection at 0x12341234>  # CAN'T SEE ANY PLOT :(
In [6]:  plt.show()                                             # STILL CAN'T SEE IT :(

Masalahnya dipecahkan dengan menggabungkan perintah plotting ke dalam sel tunggal:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         ax = fig.add_subplot(1, 1, 1)
         ax.scatter(x, y)
Out[3]:  <matplotlib.collections.PathCollection at 0x12341234>
         # AND HERE APPEARS THE PLOT AS DESIRED :)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.