พล็อตด้วยข้อความที่กำหนดเองสำหรับจุดแกน x


106

ฉันกำลังวาดพล็อตโดยใช้ matplotlib และ python เหมือนโค้ดตัวอย่างด้านล่าง

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

เนื่องจากเป็นรหัสด้านบนบนแกน x ฉันจะเห็นค่าที่วาดไว้0.0, 0.5, 1.0, 1.5นั่นคือค่าเดียวกันของค่า x อ้างอิงของฉัน

มีการแมปจุด x แต่ละจุดกับสตริงอื่นหรือไม่? ตัวอย่างเช่นฉันต้องการให้แกน x แสดงชื่อเดือน (สตริงJun, July,...) หรือสตริงอื่น ๆ เช่นชื่อคน ( "John", "Arnold", ...) หรือเวลานาฬิกา ( "12:20", "12:21", "12:22", ..)

คุณรู้หรือไม่ว่าฉันสามารถทำอะไรได้บ้างหรือมีหน้าที่อะไรบ้าง?
เพื่อจุดประสงค์ของฉันมันจะmatplotlib.tickerช่วยได้หรือไม่?

คำตอบ:


195

คุณสามารถตั้งค่า xticks (และ yticks) ด้วยตนเองโดยใช้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()


45
rotationยังมีประโยชน์ในบางครั้ง:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe

4
แล้วจะกระจายของให้เท่ากันตามแกน x ได้อย่างไร? สมมติว่าแกน x ของฉันมี 1 ล้านจุดภายในและฉันต้องการแสดงเฉพาะ John, Arnold, Mavis และ Matt ตามแกนที่กระจายเท่า ๆ กัน?
Steve K

@SirBenBenji: ใช้การจัดทำดัชนี (เช่นx[idx]) เพื่อเลือกเฉพาะข้อมูลที่คุณต้องการแสดง
unutbu

ฉันไม่เข้าใจว่าทำไมคุณถึงเขียน pylab คำตอบนั้นล้าสมัยและผิดในความคิดของฉัน
Mario Krenn

2

สิ่งนี้ได้ผลสำหรับฉัน ในแต่ละเดือนบนแกน 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.