Matplotlib-Liniendiagramm ohne Beschriftung

Sep 25 2020

Ich habe den folgenden Datensatz, aus dem ich das Liniendiagramm erhalten möchte. Die Darstellung ist korrekt, aber die Beschriftungen fehlen, obwohl ich den Beschriftungsnamen im Code angegeben habe. Bitte geben Sie mir eine Methode zum Einfügen der Etiketten. Auch wenn ich versuche, xlabel und ylabel in den Code aufzunehmen, wird mir ein Fehler angezeigtAttributeError: 'Line2D' object has no property 'xlabel'

Datenrahmen res

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

Code

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

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

Ausgabe

Dies ist die Ausgabe dieses Codes. Ich möchte, dass die Beschriftungen für alle drei Linien in der Grafik vorhanden sind. Außerdem möchte ich xlabel = "Week" und ylabel = "Mean Posts" auf der Achse hinzufügen.

Antworten

JakeLevi Sep 25 2020 at 20:59

Die Grundfunktionen erforderlich ist, um Display - Legende und Achsenbeschriftungen sind plt.legend, plt.xlabelund plt.ylabel. Unten finden Sie ein eigenständiges Beispiel. Es ist schwierig, genauer zu sein, ohne alle relevanten Teile Ihres Codes zu sehen.

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

Sie können alle Parameter halten wie plt.legend(), plt.xlabel, plt.ylabel, plt.xticksusw. außerhalb der forSchleife.

Versuche dies:

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

Außerdem, wenn Sie 3 separate Plots wie für jeden badgedann den Abschnitt bewegen sich von plt.ylabel()zu plt.show()innerhalb der Schleife.

AjayVerma Sep 25 2020 at 21:36

Das Argument xlabel oder ylabel ist nur in pandas Version 1.1.0 verfügbar. oder höher. Siehe Dokumentationhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html#pandas.DataFrame.plot

Der Grund, warum Sie AttributeError erhalten: Das Objekt 'Line2D' hat keine Eigenschaft 'xlabel', liegt darin, dass Sie möglicherweise eine niedrigere Version von Pandas haben.

Sie können die Pandas-Version überprüfen, indem Sie den folgenden Befehl ausführen

import pandas as pd
print(pd.__version__)

Zum Setzen von x_label / y_label können Sie nun Folgendes tun:

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