2012-12-09 19 views
9

Trong GnuPlot:Tháng tics, cách đặt

Cách đặt xtics cho 1 mỗi tháng?

đặt xtics sẽ không hoạt động đối với tôi vì số giây mỗi tháng thay đổi.

không hoạt động đối với tôi vì tháng được hiển thị không có năm và không được hiển thị cho năm nào trong tháng.

+0

Tôi rất muốn xem giải pháp cho chính bản thân mình; trong kinh nghiệm của tôi gnuplot là khá yếu ở định dạng x dữ liệu khi dữ liệu là thời gian. – andyras

Trả lời

17

Dường như với tôi rằng gnuplot xử lý thời gian một cách đáng ngạc nhiên. Tôi giả định dữ liệu của bạn theo định dạng sau (hoặc tương tự):

05/17/12 0.8188064359 
05/18/12 0.97297057 
05/21/12 0.9012782504 

Tôi đã sử dụng số ngẫu nhiên trải rộng trong năm rưỡi để kiểm tra điều này.

Vì vậy, trước hết bạn cần phải nói với gnuplot x phối hợp của bạn là thời gian và những gì đang định dạng nó được viết bằng:

set xdata time 
set timefmt "%m/%d/%y" 

Từ giờ trở đi, gnuplot được mong đợi tất cả các dãy trong định dạng cụ thể, bao gồm cả xticsxrange lệnh. Ngoại lệ duy nhất là số gia tăng trong số xtics chỉ mất vài giây.

set xrange ["05/01/12":"08/01/13"] 
set xtics "01/01/12",2592000,"08/01/18" 

Bây giờ bạn có thể tranh luận rằng số giây trong mỗi tháng khác nhau trong một ngày (thực tế là 2 ngày trong tháng 2). Tuy nhiên, các tác giả gnuplot dường như cũng nghĩ về điều này và họ giải quyết vấn đề theo ý thích của chúng tôi. Nói cách khác, ở trên sẽ đảm bảo tics mỗi 1 của một tháng. Ở đây, tôi chỉ có thể gợi ý để xác định các định dạng in ấn của xtics

set format x "%d %b %Y" 

mà sẽ dẫn đến "1 tháng 5 năm 2012", vv Sau này, plot dữ liệu của bạn. Oh, khi sử dụng thời gian trên trục x, gnuplot đòi hỏi using trong lệnh plot, vì vậy ngay cả với một tệp dữ liệu tầm thường như tôi đã có, tôi đã phải sử dụng

plot 'data.txt' using 1:2 

tôi đã sử dụng gnuplot phiên bản 4.6 patchlevel 0 và đầu ra để thiết bị đầu cuối postscript. Nếu bạn sẽ có trải nghiệm khác với phiên bản hoặc thiết bị đầu cuối của mình, hãy cho tôi biết trong phần nhận xét.

+0

Đây là sự kỳ diệu! Cảm ơn bạn! Điều này xứng đáng nhiều upvotes hơn ... – JohnC

1

set xtics sẽ hoạt động nếu bạn đặt số giây thành số giây trung bình trong một tháng.

tôi làm việc này ra bằng cách giả sử 365,2425 ngày trong năm trung bình, chia cho 12 để tìm ra ngày trung bình mỗi tháng (khoảng 30,4), nhân với giờ mỗi ngày sau đó giây mỗi giờ, ví dụ:

365.2425/12 * 24 * 3600 = 2629746 

Giả sử dữ liệu của bạn đã được định dạng như tháng năm và giá trị, ví dụ:

2016-01 10000 
2016-02 12000 
2016-03 10500 

Sau đó, bạn sẽ cần các lệnh như:

set xdata time 
set timefmt "%Y-%m" 
set format x "%b/%y" # Or some other output format you prefer 
set xtics "2016-01", 2629746, "2016-03" 
plot "mydata.dat" using 1:2 with linespoints 

Nếu bạn muốn đặt xtics theo bội số của các tháng thì chỉ cần thêm một số nhân trong dòng set xtics, e.g để đạt điểm quý:

set xtics "2016-01", 3*2629746, "2016-12" 

Tôi thấy rằng nếu tôi cho rằng số ngày trong một tháng là 30 hoặc 31 thì một số tại một số điểm trong bảng xếp hạng, tháng sẽ được thiếu xtics của họ.

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