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?

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


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