Tambahkan label x dan y ke plot panda


197

Misalkan saya memiliki kode berikut yang memplot sesuatu yang sangat sederhana menggunakan panda:

import pandas as pd
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10, 
         title='Video streaming dropout by category')

Keluaran

Bagaimana cara saya dengan mudah mengatur label x dan y sambil mempertahankan kemampuan saya untuk menggunakan colormaps tertentu? Saya perhatikan bahwa plot()pembungkus untuk panda DataFrames tidak mengambil parameter khusus untuk itu.

Jawaban:


329

The df.plot()mengembalikan fungsi matplotlib.axes.AxesSubplotobjek. Anda dapat mengatur label pada objek itu.

ax = df2.plot(lw=2, colormap='jet', marker='.', markersize=10, title='Video streaming dropout by category')
ax.set_xlabel("x label")
ax.set_ylabel("y label")

masukkan deskripsi gambar di sini

Atau, lebih ringkas: ax.set(xlabel="x label", ylabel="y label").

Atau, label sumbu-x indeks secara otomatis diatur ke nama Indeks, jika ada. begitu juga df2.index.name = 'x label'akan bekerja.


71
apakah ada alasan khusus mengapa label x dan y tidak dapat ditambahkan sebagai argumen pd.plot()? Mengingat keputusan tambahan pd.plot()atas plt.plot()tampaknya masuk akal untuk membuatnya lebih ringkas daripada harus menelepon ax.set_ylabel().
Chrispy

Ketika saya melakukannya ax.set_ylabel("y label"), ia mengembalikan kesalahan 'list' object is not callable. Ada ide?
Buku Besar Yu

Menarik. Saya tidak tahu apakah ini tergantung versi tetapi saya harus melakukannya ax.axes.set_ylabel("y label").
Buku Besar Yu

2
Saya pikir Anda bisa memberikan jawaban yang ax.set(xlabel='...)lebih tinggi karena mungkin terlewatkan melewati grafik. Ini benar-benar adalah pendekatan yang paling ringkas untuk mengatur kedua sumbu, yang merupakan kata kunci umum.
poulter7

Bagaimana Anda mengatur lokasi?
Odisseo

44

Anda dapat menggunakannya lakukan seperti ini:

import matplotlib.pyplot as plt 
import pandas as pd

plt.figure()
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10,
         title='Video streaming dropout by category')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.show()

Jelas Anda harus mengganti string 'xlabel' dan 'ylabel' dengan apa yang Anda inginkan.


Perhatikan juga, Anda harus menelepon plt.xlabel()dll. Setelah df.plot(), bukan sebelumnya, karena jika tidak, Anda akan mendapatkan dua plot - panggilan akan mengubah plot "sebelumnya". Hal yang sama berlaku untuk plt.title().
Tomasz Gandor

30

Jika Anda memberi label pada kolom dan indeks dari DataFrame Anda, panda akan secara otomatis memberikan label yang sesuai:

import pandas as pd
values = [[1, 2], [2, 5]]
df = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                  index=['Index 1', 'Index 2'])
df.columns.name = 'Type'
df.index.name = 'Index'
df.plot(lw=2, colormap='jet', marker='.', markersize=10, 
        title='Video streaming dropout by category')

masukkan deskripsi gambar di sini

Dalam hal ini, Anda masih perlu memasok label-y secara manual (mis. Via plt.ylabelseperti yang ditunjukkan pada jawaban lain).


Saat ini, 'pasokan otomatis dari DataFrame' tidak berfungsi. Saya baru saja mencobanya (versi panda 0.16.0, matplotlib 1.4.3) dan plot menghasilkan dengan benar, tetapi tanpa label pada sumbu.
szeitlin

1
@szeitlin bisakah Anda mengajukan laporan bug pada halaman github panda? github.com/pydata/pandas/issues
shoyer

Anda tahu, hari ini setidaknya xlabel berfungsi. mungkin ada sesuatu yang aneh tentang kerangka data yang saya gunakan kemarin (?). jika saya bisa mereproduksinya, saya akan mengajukannya!
szeitlin

20

Dimungkinkan untuk mengatur kedua label bersamaan dengan axis.setfungsinya. Lihat contohnya:

import pandas as pd
import matplotlib.pyplot as plt
values = [[1,2], [2,5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])
ax = df2.plot(lw=2,colormap='jet',marker='.',markersize=10,title='Video streaming dropout by category')
# set labels for both axes
ax.set(xlabel='x axis', ylabel='y axis')
plt.show()

masukkan deskripsi gambar di sini


3
Saya suka .set(xlabel='x axis', ylabel='y axis')solusinya karena memungkinkan saya meletakkan semuanya dalam satu baris, tidak seperti metode plot set_xlabel dan set_ylabel. Saya bertanya-tanya mengapa mereka semua (termasuk metode yang ditetapkan, omong-omong) tidak mengembalikan objek plot atau setidaknya sesuatu yang diwarisi darinya.
toleran terhadap kesalahan

14

Untuk kasus di mana Anda menggunakan pandas.DataFrame.hist:

plt = df.Column_A.hist(bins=10)

Perhatikan bahwa Anda mendapatkan ARRAY plot, bukan plot. Dengan demikian untuk mengatur label x Anda perlu melakukan sesuatu seperti ini

plt[0][0].set_xlabel("column A")

10

bagaimana dengan ...

import pandas as pd
import matplotlib.pyplot as plt

values = [[1,2], [2,5]]

df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])

(df2.plot(lw=2,
          colormap='jet',
          marker='.',
          markersize=10,
          title='Video streaming dropout by category')
    .set(xlabel='x axis',
         ylabel='y axis'))

plt.show()

2

pandasdigunakan matplotlibuntuk plot dataframe dasar. Jadi, jika Anda menggunakan pandasplot dasar, Anda dapat menggunakan matplotlib untuk kustomisasi plot. Namun, saya mengusulkan metode alternatif di sini menggunakan seabornyang memungkinkan lebih banyak kustomisasi plot tanpa masuk ke tingkat dasar matplotlib.

Kode Kerja:

import pandas as pd
import seaborn as sns
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
ax= sns.lineplot(data=df2, markers= True)
ax.set(xlabel='xlabel', ylabel='ylabel', title='Video streaming dropout by category') 

masukkan deskripsi gambar di sini

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.