From mboxrd@z Thu Jan 1 00:00:00 1970 From: Charles Sebold Subject: Re: org-plot and timestamps Date: Mon, 27 Oct 2008 15:11:43 -0500 Message-ID: References: <87prlm83pl.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KuYRL-0000YO-QZ for emacs-orgmode@gnu.org; Mon, 27 Oct 2008 16:11:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KuYRK-0000Xt-Fj for emacs-orgmode@gnu.org; Mon, 27 Oct 2008 16:11:51 -0400 Received: from [199.232.76.173] (port=59298 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KuYRK-0000Xo-A4 for emacs-orgmode@gnu.org; Mon, 27 Oct 2008 16:11:50 -0400 Received: from qw-out-1920.google.com ([74.125.92.144]:33325) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KuYRJ-00022g-BR for emacs-orgmode@gnu.org; Mon, 27 Oct 2008 16:11:50 -0400 Received: by qw-out-1920.google.com with SMTP id 4so972522qwk.24 for ; Mon, 27 Oct 2008 13:11:46 -0700 (PDT) In-Reply-To: <87prlm83pl.fsf@gmail.com> (Eric Schulte's message of "Mon\, 27 Oct 2008 08\:20\:22 -0700") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org On 27 Oct 2008, Eric Schulte wrote: > Great idea, please do share if you get anything working. I second > that time data can be a pain in gnuplot, but then all the more reason > to add support to org-plot to avoid having to deal with gnuplot > directly. > > If you get something working with org-mode dates, I think it would > certainly make sense to include it in org-plot, so that it handles > timestamps "out of the box". How's this for a first pass? Not a git user before I started with org-mode so any pointers on how to generate these would be appreciated. Changes in origin/HEAD Modified lisp/org-plot.el diff --git a/lisp/org-plot.el b/lisp/org-plot.el index db67257..74ad817 100644 --- a/lisp/org-plot.el +++ b/lisp/org-plot.el @@ -101,10 +101,16 @@ will be added. Returns the resulting property list." (org-plot/add-options-to-plist params (match-string 1 line)) params))) +(defun org-plot-quote-timestamp-field (s) + "Convert field S from timestamp to Unix time and export to gnuplot." + (format-time-string "%Y-%m-%d-%H:%M:%S" (org-time-string-to-time s))) + (defun org-plot-quote-tsv-field (s) "Quote field S for export to gnuplot." (if (string-match org-table-number-regexp s) s - (concat "\"" (mapconcat 'identity (split-string s "\"") "\"\"") "\""))) + (if (string-match org-ts-regexp3 s) + (org-plot-quote-timestamp-field s) + (concat "\"" (mapconcat 'identity (split-string s "\"") "\"\"") "\"")))) (defun org-plot/gnuplot-to-data (table data-file params) "Export TABLE to DATA-FILE in a format readable by gnuplot. @@ -180,6 +186,7 @@ NUM-COLS controls the number of columns plotted in a 2-d plot." (title (plist-get params :title)) (file (plist-get params :file)) (ind (plist-get params :ind)) + (time-ind (plist-get params :timeind)) (text-ind (plist-get params :textind)) (deps (if (plist-member params :deps) (plist-get params :deps))) (col-labels (plist-get params :labels)) @@ -217,6 +224,9 @@ NUM-COLS controls the number of columns plotted in a 2-d plot." (mapconcat (lambda (pair) (format "\"%s\" %d" (cdr pair) (car pair))) y-labels ", ")))) + (when time-ind ;; timestamp index + (add-to-script "set xdata time") + (add-to-script "set timefmt \"%Y-%m-%d-%H-%M-%S\"")) (case type ;; plot command ('2d (dotimes (col num-cols) (unless (and (equal type '2d) @@ -284,16 +294,24 @@ line directly before or after the table." ('grid (let ((y-labels (org-plot/gnuplot-to-grid-data table data-file params))) (when y-labels (plist-put params :ylabels y-labels))))) - ;; check for text ind column + ;; check for timestamp ind column (let ((ind (- (plist-get params :ind) 1))) - (when (and (>= ind 0) (equal '2d (plist-get params :plot-type))) - (if (> (length - (delq 0 (mapcar + (when (and (>= ind 0) (equal '2d (plist-get params :plot-type))) + (if (= (length + (delq 0 (mapcar (lambda (el) - (if (string-match org-table-number-regexp el) + (if (string-match org-ts-regexp3 el) 0 1)) (mapcar (lambda (row) (nth ind row)) table)))) 0) - (plist-put params :textind t)))) + (plist-put params :timeind t) + ;; check for text ind column + (if (> (length + (delq 0 (mapcar + (lambda (el) + (if (string-match org-table-number-regexp el) + 0 1)) + (mapcar (lambda (row) (nth ind row)) table)))) 0) + (plist-put params :textind t))))) ;; write script (with-temp-buffer (if (plist-get params :script) ;; user script @@ -307,7 +325,8 @@ line directly before or after the table." (gnuplot-mode) (gnuplot-send-buffer-to-gnuplot)) ;; cleanup - (bury-buffer (get-buffer "*gnuplot*"))(delete-file data-file)))) + (bury-buffer (get-buffer "*gnuplot*")) + (delete-file data-file)))) (provide 'org-plot) -- Charles Sebold http://merbc.invigorated.org/ http://triablogue.blogspot.com/