2013-02-18 53 views
23

Tôi đang tìm cách chỉnh sửa định dạng ngày tháng trên trục x. Hình dưới đây cho thấy cách chúng xuất hiện trên biểu đồ thanh của tôi theo mặc định. Tôi muốn loại bỏ sự lặp lại của 'Dec' và '2012' và chỉ có số ngày thực tế dọc theo trục x.Chỉnh sửa định dạng ngày của nhãn đánh dấu trục x trong matplotlib

Bất kỳ đề xuất nào về cách tôi có thể thực hiện việc này?

enter image description here

+0

Câu trả lời ở đây làm việc cho tôi: http://stackoverflow.com/questions/30133280/pandas-bar-plot-changes-date -format – Mahdi

Trả lời

38

Nói tóm lại:

import matplotlib.dates as mdates 
myFmt = mdates.DateFormatter('%d') 
ax.xaxis.set_major_formatter(myFmt) 

Nhiều ví dụ trên trang web matplotlib. Điều tôi thường sử dụng nhất là here

+2

Có phương pháp thay thế nào mà không sử dụng 'ax.xaxis' nhưng sử dụng' plt. '? – 3kstc

+0

@ 3kstc Có lẽ, nhưng tôi không thể tưởng tượng một tình huống mà việc mơ hồ dựa vào máy trạng thái là thích hợp hơn với lệnh rõ ràng hơn. –

+0

Để xem nhanh tất cả các định dạng ngày giờ có thể, hãy sử dụng [strftime.org] (http://strftime.org). – ImportanceOfBeingErnest

3

Trong khi câu trả lời được đưa ra bởi Paul H cho thấy phần thiết yếu, nó không phải là một ví dụ hoàn chỉnh. Mặt khác, matplotlib example có vẻ khá phức tạp và không hiển thị cách sử dụng ngày.

Vì vậy, cho mọi người có nhu cầu ở đây là một ví dụ làm việc đầy đủ:

from datetime import datetime 
import matplotlib.pyplot as plt 
from matplotlib.dates import DateFormatter 

myDates = [datetime(2012,1,i+3) for i in range(10)] 
myValues = [5,6,4,3,7,8,1,2,5,4] 
fig, ax = plt.subplots() 
ax.plot(myDates,myValues) 

myFmt = DateFormatter("%d") 
ax.xaxis.set_major_formatter(myFmt) 

## Rotate date labels automatically 
fig.autofmt_xdate() 
plt.show() 
Các vấn đề liên quan