Plotten mit benutzerdefiniertem Text für x Achsenpunkte

106

Ich zeichne einen Plot mit Matplotlib und Python wie im folgenden Beispielcode.

x = array([0,1,2,3])
y = array([20,21,22,23])
plot(x,y)
show()

Da es sich um den obigen Code auf der x-Achse handelt, werden gezeichnete Werte angezeigt, 0.0, 0.5, 1.0, 1.5dh dieselben Werte wie bei meinen Referenz-x-Werten.

Gibt es überhaupt eine Möglichkeit, jeden Punkt von x einer anderen Zeichenfolge zuzuordnen? So möchte ich zum Beispiel, dass die x-Achse Monatsnamen (Zeichenfolgen Jun, July,...) oder andere Zeichenfolgen wie Personennamen ( "John", "Arnold", ...) oder Uhrzeit ( "12:20", "12:21", "12:22", ..) anzeigt .

Wissen Sie, was ich tun kann oder welche Funktion Sie sich ansehen müssen?
Könnte es für meinen Zweck matplotlib.tickerhilfreich sein?

user311906
quelle

Antworten:

195

Sie können xticks (und yticks) manuell mit pyplot.xticks festlegen :

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0,1,2,3])
y = np.array([20,21,22,23])
my_xticks = ['John','Arnold','Mavis','Matt']
plt.xticks(x, my_xticks)
plt.plot(x, y)
plt.show()

unutbu
quelle
44
rotationist auch manchmal nützlich:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe
4
Und wie verteilt man die Gegenstände gleichmäßig entlang der x-Achse? Angenommen, meine x-Achse hat intern 1 Million Punkte und ich möchte nur John, Arnold, Mavis und Matt entlang der Achse gleichmäßig verteilt anzeigen.
Steve K
@ SirBenBenji: Verwenden Sie die Indizierung (z. B. x[idx]), um nur die Daten auszuwählen, die Sie anzeigen möchten.
Unutbu
Ich verstehe nicht, warum Sie Pylab schreiben, dass die Antwort meiner Meinung nach veraltet und falsch ist.
Mario Krenn
1

Das hat bei mir funktioniert. Jeden Monat auf der X-Achse

str_month_list = ['January','February','March','April','May','June','July','August','September','October','November','December']
ax.set_xticks(range(0,12))
ax.set_xticklabels(str_month_list)
Tajni
quelle