Plot Garis Matplotlib tidak menunjukkan Label

Sep 25 2020

Saya memiliki Set Data berikut dari mana saya ingin mendapatkan plot garis. Plotnya benar tetapi labelnya hilang meskipun saya memberikan nama label di kode. Beri saya metode untuk menyertakan label. Juga jika saya mencoba untuk memasukkan xlabel dan ylabel dalam kode itu memberi saya kesalahanAttributeError: 'Line2D' object has no property 'xlabel'

Res Dataframe

UserId     |   date                 |-7|-6|-5|-4|-3|-2|-1|0 |1 |2 |3 |4 |5 |6 |7
     1      2009-10-17 17:38:32.590 |0 |0 |0 |0 |0 |0 |1 |0 |1 |0 |0 |0 |0 |0 |0  
     2      2009-10-19 00:37:23.067 |0 |0 |0 |0 |0 |1 |1 |0 |1 |0 |0 |0 |0 |0 |0    
     3      2009-10-20 08:37:14.143 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0 
     4      2009-10-21 18:07:51.247 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0 
     5      2009-10-22 21:25:24.483 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0

Kode

badges = ["A", "B", "C"]

for badge in badges:
  res.iloc[:,2:].mean().plot(kind='line', label = badge)

Keluaran

Ini adalah keluaran yang diperoleh dari kode ini. Saya ingin label untuk ketiga garis tersebut ada di grafik. Bersamaan dengan itu saya ingin menambahkan xlabel = "Week" dan ylabel = "Mean Posts" pada sumbu.

Jawaban

JakeLevi Sep 25 2020 at 20:59

Fungsi dasar yang dibutuhkan legenda layar dan sumbu label plt.legend, plt.xlabeldan plt.ylabel. Lihat di bawah untuk contoh mandiri. Sulit untuk menjadi lebih spesifik tanpa melihat semua bagian yang relevan dari kode Anda.

import matplotlib.pyplot as plt

x = [1, 2, 3]
y1 = [4, 5, 6]
y2 = [7, 8, 9]

plt.plot(x, y1, "b", label="y1")
plt.plot(x, y2, "r", label="y2")
plt.legend()
plt.xlabel("x")
plt.ylabel("y")
plt.savefig("temp")

Grayrigel Sep 25 2020 at 21:07

Anda dapat menyimpan semua parameter seperti plt.legend(), plt.xlabel, plt.ylabel, plt.xticksdll di luar forlingkaran.

Coba ini:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style('darkgrid')
badges = ["A", "B", "C"]

for badge in badges:
  res.iloc[:,2:].mean().plot(kind='line', label = badge)

plt.ylabel('y',size=20,weight='bold') 
plt.xlabel('x',size=20,weight='bold')
plt.legend(frameon=False, prop={'size':15})
plt.show()      

Selain itu, jika Anda menyukai 3 plot terpisah untuk masing-masing, badgepindahkan bagian tersebut dari dalam plt.ylabel()ke plt.show()dalam loop.

AjayVerma Sep 25 2020 at 21:36

Argumen xlabel atau ylabel hanya tersedia di pandas versi 1.1.0. atau diatas. lihat Dokumentasihttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html#pandas.DataFrame.plot

Alasan Anda mendapatkan AttributeError: objek 'Line2D' tidak memiliki properti 'xlabel' adalah karena Anda mungkin memiliki versi panda yang lebih rendah.

Anda dapat memeriksa versi pandas dengan menjalankan perintah berikut

import pandas as pd
print(pd.__version__)

Sekarang untuk meletakkan x_label / y_label Anda dapat melakukan hal berikut:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
for badge in badges:
  res.iloc[:,2:].mean().plot(kind='line', label = badge, ax=ax)
ax.set_ylabel('y') 
ax.set_xlabel('x')
ax.legend()
plt.show()