From: Charles Sebold <[EMAIL PROTECTED]> X-axis is made up of a table column of org-mode timestamps.
This sends the data to gnuplot as time data (which gnuplot treats specially) --- "Eric Schulte" <[EMAIL PROTECTED]> writes: >> On 27 Oct 2008, Charles Sebold wrote: >> >>> 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. >> > Hi Charles, > The patch looks great, I vote we drop it 'as is' into org-plot.el. The > only enhancement that comes to mind would be to expose the `time-ind' > variable as a plot option. Allowing users to specify different time > formats, but really if they're that sophisticated in their use of > gnuplot, then they can do that on their own through the `set:' option. > Thanks for the addition! -- Eric I've added this patch to my org-mode repo so Carsten can just grab it if he likes it. git://git.norang.ca/org-mode on the branch cs/org-plot-timestamps -Bernt lisp/org-plot.el | 35 +++++++++++++++++++++++++++-------- 1 files changed, 27 insertions(+), 8 deletions(-) diff --git a/lisp/org-plot.el b/lisp/org-plot.el index db67257..d0d62f6 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) -- 1.6.0.3.523.g304d0 _______________________________________________ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode