plot dengan teks kustom untuk titik sumbu x

106

Saya menggambar plot menggunakan matplotlib dan python seperti kode contoh di bawah ini.

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

Karena ini adalah kode di atas pada sumbu x saya akan melihat nilai yang ditarik 0.0, 0.5, 1.0, 1.5yaitu nilai yang sama dari nilai x referensi saya.

Apakah ada cara untuk memetakan setiap titik x ke string yang berbeda? Jadi misalnya saya ingin sumbu x untuk menunjukkan nama bulan (string Jun, July,...) atau string lain seperti nama orang ( "John", "Arnold", ...) atau waktu jam ( "12:20", "12:21", "12:22", ..).

Apakah Anda tahu apa yang bisa saya lakukan atau fungsi apa yang harus dilihat?
Untuk tujuan saya, bisakah itu matplotlib.tickermembantu?

pengguna311906
sumber

Jawaban:

195

Anda dapat mengatur xticks (dan yticks) secara manual menggunakan pyplot.xticks :

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
sumber
44
rotationterkadang juga berguna:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe
4
Dan bagaimana cara menyebarkan item secara merata di sepanjang sumbu x? Katakanlah sumbu x saya memiliki 1 Juta poin secara internal dan saya hanya ingin menampilkan John, Arnold, Mavis, dan Matt di sepanjang sumbu yang didistribusikan secara merata?
Steve K
@SirBenBenji: Gunakan pengindeksan (misalnya x[idx]) untuk memilih hanya data yang ingin Anda tampilkan.
unutbu
Saya tidak mengerti mengapa Anda menulis pylab, jawaban itu sudah ketinggalan zaman dan salah menurut saya.
Mario Krenn
1

Ini berhasil untuk saya. Setiap bulan pada sumbu X.

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
sumber