2017-02-04 15 views
9

Vì vậy, hiện đang học cách nhập dữ liệu và làm việc với nó trong matplotlib và tôi gặp rắc rối ngay cả tho tôi có mã chính xác từ cuốn sách.Làm thế nào tôi có thể thay đổi trục x trong matplotlib để không có khoảng trắng?

enter image description here

Đây là những gì cốt truyện có vẻ như, nhưng câu hỏi của tôi là làm thế nào tôi có thể lấy nó mà không có khoảng trắng giữa điểm bắt đầu và kết thúc của trục x.

Đây là mã:

import csv 

from matplotlib import pyplot as plt 
from datetime import datetime 

# Get dates and high temperatures from file. 
filename = 'sitka_weather_07-2014.csv' 
with open(filename) as f: 
    reader = csv.reader(f) 
    header_row = next(reader) 

    #for index, column_header in enumerate(header_row): 
     #print(index, column_header) 
    dates, highs = [], [] 
    for row in reader: 
     current_date = datetime.strptime(row[0], "%Y-%m-%d") 
     dates.append(current_date) 

     high = int(row[1]) 
     highs.append(high) 

# Plot data. 
fig = plt.figure(dpi=128, figsize=(10,6)) 
plt.plot(dates, highs, c='red') 


# Format plot. 
plt.title("Daily high temperatures, July 2014", fontsize=24) 
plt.xlabel('', fontsize=16) 
fig.autofmt_xdate() 
plt.ylabel("Temperature (F)", fontsize=16) 
plt.tick_params(axis='both', which='major', labelsize=16) 

plt.show() 
+0

Bạn đã thử sử dụng 'plt.xlim()' để đặt giới hạn x theo cách thủ công chưa? http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xlim – decvalts

Trả lời

11

Trong matplotlib 2.x có một biên độ tự động đặt ở các cạnh, đảm bảo các dữ liệu được độc đáo phù hợp trong gai trục. Trong trường hợp này, một lề có thể là mong muốn trên trục y. Theo mặc định, nó được đặt thành 0.05 theo đơn vị của nhịp trục. Để thiết lập lề để 0 trên trục x, sử dụng

plt.margins(x=0) 

hoặc

ax.margins(x=0) 

tùy thuộc vào ngữ cảnh. Xem thêm the documentation.

Trong trường hợp bạn muốn thoát khỏi lề trong toàn bộ kịch bản, bạn có thể sử dụng

plt.rcParams['axes.xmargin'] = 0 

vào đầu script của bạn (tương tự cho y tất nhiên). Nếu bạn muốn thoát khỏi lề hoàn toàn và mãi mãi, bạn có thể muốn thay đổi dòng theo trong matplotlib rc file.


Ngoài ra để thay đổi lề, sử dụng plt.xlim(..) hoặc ax.set_xlim(..) để tự thiết lập các giới hạn của các trục như vậy là không có khoảng trắng còn lại.

+0

Cảm ơn bạn đã làm việc rất nhiều, tôi đoán tôi đã bỏ lỡ .margins trên tài liệu. Cuốn sách tôi đang sử dụng không có chút mã trong văn bản và nó vẫn không có khoảng trắng nên tôi đã nhầm lẫn với lý do tại sao tôi có một khoảng trắng. – lmurdock12

+0

Chẵn lề lớn hơn 0 mới được giới thiệu với matplotlib 2.0, vì vậy trong các phiên bản trước, câu hỏi luôn ngược lại: "Làm thế nào để tôi đặt một số ký tự vào?". Tôi đoán bạn không bao giờ có thể làm hài lòng tất cả mọi người. ;-) Tôi đã cập nhật câu trả lời để bao gồm một số thông tin khác. – ImportanceOfBeingErnest

+0

Thông báo trong http://stackoverflow.com/questions/42713208/matplotlib-cancelling-the-offset-of-axis-introduced-in-matplotlib-2-0/42716384#42716384, để khôi phục lại thực sự matplotlib trước 2.0, bạn cũng cần 'plt.rcParams ['axes.autolimit_mode'] = 'round_numbers''. – cqcn1991

Các vấn đề liên quan