Giả sử tập tin dữ liệu của bạn có định dạng đưa ra ở trên, bạn có thể sử dụng TEXTSCAN để đọc dữ liệu:
fid = fopen('data.txt','rt');
C = textscan(fid,'%s %s %s %d','Delimiter','.','CollectOutput',1);
fclose(fid);
Các tế bào đầu tiên của C
sẽ chứa một mảng di động N-by-3 của chuỗi (những phần của ngày) và ô thứ hai của C
sẽ chứa vectơ N-by-1 của các phép đo dữ liệu. Bạn có thể tạo ra một số ngày cho mỗi lần đo bằng cách đầu tiên concatenating 3 dây nhỏ thành một chuỗi ngày và sau đó sử dụng DATENUM chức năng:
t = datenum(strcat(C{1}(:,3),'-',C{1}(:,2),'-',C{1}(:,1)));
data = C{2};
Một khi bạn có một vector số ngày t
đi với vector của bạn đo lường data
, sau đó bạn có thể vẽ chúng:
plot(t,data,'*'); %# Plot the points as asterisks
Bây giờ, bạn có thể thay đổi nhãn trục x để hiển thị ngày thực tế. Một lựa chọn là sử dụng hàm DATETICK, một giải pháp dễ dàng và thanh lịch được đưa ra trong steven's answer. Một lựa chọn khác là sử dụng các chức năng DATESTR để tạo ra các nhãn chính mình, sau đó sửa đổi XTick và XTickLabel thuộc tính của các trục hiện tại:
xpts = min(t):max(t); %# Make a full vector, filling in missing dates
set(gca,'XTick',xpts,'XTickLabel',datestr(xpts)); %# Set axes properties
LƯU Ý: Cho dù tùy chọn mà bạn chọn để thay đổi trục x nhãn cho các chuỗi ngày tháng, bạn có thể gặp rắc rối với các nhãn trùng nhau nếu các dấu tick quá gần nhau. Bạn có thể sửa lỗi này bằng cách giảm hoặc định vị lại các dấu tick dọc theo trục x (bằng cách thay đổi thuộc tính XTick) hoặc bằng cách điều chỉnh các trục FontSize thuộc tính. Nếu bạn muốn xoay các nhãn để làm cho chúng phù hợp, bạn sẽ phải xóa các nhãn và tạo mới text objects được xoay cho chúng.Việc nộp sau trên The MathWorks File Exchange không chỉ rằng:
+1: Nice find. Tôi không biết về chức năng đó. – gnovice
Đây là lỗi thời. Bây giờ bạn nên sử dụng datetime http://www.mathworks.com/help/matlab/matlab_prog/plot-dates-and-durations.html – hyprfrcb