2017-06-18 17 views
5

Tôi đang cố vẽ một số dữ liệu liên quan đến phút thay vì giây trong Matlab dưới dạng thời gian được định dạng, tức là min.sec.Vẽ theo phút như thời gian đã định dạng (min.sec)

Tôi có dữ liệu thời gian thực trực tuyến ở nơi có mọi mẫu nhận được, thời gian của nó tính bằng giây cũng được gửi. Sau đó tôi vẽ chúng theo thời gian. Bây giờ, kể từ khi phiên của tôi dài khoảng 15 phút, tôi không thể âm mưu theo thời gian. Do đó tôi muốn vẽ nó theo thời gian (min.sec). Tôi đã thử chia thời gian nhận được cho 60 nhưng điều này cho tôi phút với 100 phân mục thay vì 60 (số phút tăng sau 0,9999 thay vì 0,59). Làm thế nào để tôi chuyển đổi nó để tôi có thể âm mưu liên quan đến thời gian trong vài phút?

Dưới đây là ý tôi là 0,99 phân số của một phút thay vì 0,59. Một phút bình thường có 60 bộ phận không 100. enter image description here

EDIT: Tôi cố gắng gợi ý m7913d và đây là những gì tôi có.

  1. đầu tiên tôi vẽ tín hiệu liên quan đến thời gian trong vài giây mà không thay đổi ve (A bình thường plot(t,v))

  2. Các tôi thêm datetick('x', 'mm:ss'); để cốt truyện (định dạng Xtick không được hỗ trợ trong Matlab 2015b)

đây là một ảnh chụp màn hình của các kết quả enter image description here

thời gian trong vài giây đã lên đến 80 giây s, khi được dịch thành phút, nó sẽ cho tôi 1 phút và 20 giây là giới hạn trục x tối đa. Nhưng đây không phải là trường hợp. Tôi đã cố gắng để xây dựng một vector t (ví dụ như t=0:seconds(3):minutes(3)) nhưng tôi không thể liên kết nó với vector giây của tôi mà sẽ được cập nhật liên tục như các mẫu mới được nhận từ cổng nối tiếp. Cảm ơn

+0

Chỉnh sửa: Đọc câu hỏi sai. Bạn có thể vui lòng đăng mã cung cấp cho bạn 100 phân mục thay vì 60 không? Chỉ cần đặt vectơ thời gian của bạn để tăng sau 60 giây: 't = 0:60: (60 * 15)'. –

+0

Vectơ thời gian của tôi không được thiết lập bởi tôi, nó được ghi lại từ một vi điều khiển tiếp tục gửi mọi mẫu và thời gian tính bằng giây. Đó là lý do tại sao tôi không thể đặt t = 0: 60: (60 * 15). Ngoài ra, khoảng thời gian sẽ tối đa là 15 phút nhưng nó cũng có thể ít hơn.Cách tiếp cận hiện tại của tôi là chia mỗi lần đọc 60, nhưng điều này đã cho tôi số phút tăng mỗi 0,99 phân số của một phút (tôi sẽ cập nhật câu hỏi hiển thị hình) – Isra

+0

Đó là cốt truyện --- mẫu của bạn không thực sự xếp hàng với lưới đó (vì vậy mã của bạn là đúng nhưng khung nhìn không phải là thứ bạn muốn). Bạn chỉ cần thay đổi thuộc tính trục 'XTick' để đặt các dấu tick ở nơi bạn muốn và lưới sẽ thẳng hàng với nó. Ví dụ. 'set (gca, 'XTick', start: increment: end);'. –

Trả lời

1

Bạn có thể sử dụng xtickformat để xác định định dạng mong muốn của nhãn x của bạn như sau:

% generate a random signal (in seconds) 
t = 0:5:15*60; 
y = rand(size(t)); 

plot(seconds(t),y) % plot your signal, making it explicit that the t is expressed in seconds 
xtickformat('mm:ss') % specify the desired format of the x labels 

Lưu ý rằng tôi đã sử dụng seconds phương pháp, mà trả về một đối tượng duration, để chỉ cho Matlab rằng t là thể hiện bằng giây.

Đầu ra của kịch bản trên là (hình ảnh bên phải là một phiên bản thu nhỏ của hình ảnh trái):

enter image description here enter image description here

Pre R2016b

Người ta có thể sử dụng datetime thay vì xtickformat như sau:

datetimes = datetime(0,0,0,0,0,t); % convert seconds to datetime 
plot(datetimes,y) 
datetick('x', 'MM:SS'); % set the x tick format (Note that you should now use capital M and S in the format string 
xlim([min(datetimes) max(datetimes)]) 
+0

Tôi đã thử những gì bạn vừa giải thích và tôi có cùng một đầu ra, 0,99 bộ phận thay vì 0,59. thời gian của tôi đến từ cổng nối tiếp và không được đặt như (t = 0: 5: 15 * 60;). cho mỗi giây, tôi có 250 mẫu (tần số lấy mẫu 250Hz). – Isra

+0

Bạn có nhận được thông báo lỗi không? Việc cung cấp [mcve] để hiển thị sự khác biệt với mã của tôi có thể hữu ích. – m7913d

+0

Tôi đã chỉnh sửa câu hỏi với tất cả những gì bạn đã yêu cầu – Isra

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