emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* `with` as a list.
@ 2020-05-22 16:07 Mario Frasca
  2020-05-28 13:34 ` [PATCH] [FEATURE] " Mario Frasca
  2020-05-30  6:22 ` Kyle Meyer
  0 siblings, 2 replies; 23+ messages in thread
From: Mario Frasca @ 2020-05-22 16:07 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1403 bytes --]

good day to you all

now and then I use emacs to make graphs.  now recently I was plotting 
point data, and a running average "fit", so I wanted to have points, and 
lines, which I know it's possible in `gnuplot` but now how do I do that 
from org-plot …

I wrote a small patch for org-plot.el, I'm not a Lisp programmer so I'm 
sure the patch looks terrible, but it does allow me to do this:

#+PLOT: ind:1 deps:(3 6 4 7) with:(points lines points lines)

it's two additions:

1. it lets me specify the order in which the dependent columns should be 
considered.

2. it lets me specify a different `with` for each column, in the same order.

if you leave the `with` away, you get "lines" for all columns.

if you specify only one `with` value, that value is used for all columns.

if you specify more `deps` than `with`, the ones not specified will get 
"lines".

if you specify more `with` than `deps`, they are ignored.

I ran the tests, and I get two failing ones, quite unrelated according 
to me:

2 unexpected results:
    FAILED  ob-exp/evaluate-all-executables-in-order
    FAILED  ob-exp/export-call-line-information

I have not defined test cases for the new behaviour, I'm willing to do 
that (learning the way this test environment works), but I don't find 
the location of the other tests related to the area of the program, 
which I'm tweaking.

best regards all,

Mario Frasca


[-- Attachment #2: with-as-a-list.patch --]
[-- Type: text/x-patch, Size: 3109 bytes --]

diff --git a/lisp/org-plot.el b/lisp/org-plot.el
index a23195d2a..87a415137 100644
--- a/lisp/org-plot.el
+++ b/lisp/org-plot.el
@@ -179,6 +179,28 @@ and dependent variables."
 	  (setf back-edge "") (setf front-edge ""))))
     row-vals))
 
+(defun org-plot/zip-deps-with (num-cols ind deps with)
+  "describe each column to be plotted as (col . with)"
+  ;; make 'deps explicit
+  (unless deps
+    (setf deps (let (r)
+		 (dotimes (i num-cols r)
+		   (unless (eq num-cols (+ ind i))
+		     (setq r (cons (- num-cols i) r)))))))
+  ;; make sure 'with matches 'deps
+  (unless with
+    (setf with "lines"))
+  (unless (listp with)
+    (setf with (mapcar (lambda (x) with) deps)))
+  ;; invoke zipping function on converted data
+  (org-plot/zip deps with))
+
+(defun org-plot/zip (xs ys)
+  (unless
+      (null xs)
+    (cons (cons (car xs) (or (car ys) "lines"))
+	  (org-plot/zip (cdr xs) (cdr ys)))))
+
 (defun org-plot/gnuplot-script (data-file num-cols params &optional preface)
   "Write a gnuplot script to DATA-FILE respecting the options set in PARAMS.
 NUM-COLS controls the number of columns plotted in a 2-d plot.
@@ -240,22 +262,22 @@ manner suitable for prepending to a user-specified script."
 			       "%Y-%m-%d-%H:%M:%S") "\"")))
     (unless preface
       (pcase type			; plot command
-	(`2d (dotimes (col num-cols)
-	       (unless (and (eq type '2d)
-			    (or (and ind (equal (1+ col) ind))
-				(and deps (not (member (1+ col) deps)))))
-		 (setf plot-lines
-		       (cons
-			(format plot-str data-file
-				(or (and ind (> ind 0)
-					 (not text-ind)
-					 (format "%d:" ind)) "")
-				(1+ col)
-				(if text-ind (format ":xticlabel(%d)" ind) "")
-				with
-				(or (nth col col-labels)
-				    (format "%d" (1+ col))))
-			plot-lines)))))
+	(`2d (dolist
+		 (col-with
+		  (org-plot/zip-deps-with num-cols ind deps with))
+	       (setf plot-lines
+		     (cons
+		      (format plot-str data-file
+			      (or (and ind (> ind 0)
+				       (not text-ind)
+				       (format "%d:" ind)) "")
+			      (car col-with)
+			      (if text-ind (format ":xticlabel(%d)" ind) "")
+			      (cdr col-with)
+			      (or (nth (1- (car col-with))
+				       col-labels)
+				  (format "%d" (car col-with))))
+		      plot-lines))))
 	(`3d
 	 (setq plot-lines (list (format "'%s' matrix with %s title ''"
 					data-file with))))
@@ -310,7 +332,8 @@ line directly before or after the table."
 				table data-file params)))
 		 (when y-labels (plist-put params :ylabels y-labels)))))
       ;; Check for timestamp ind column.
-      (let ((ind (1- (plist-get params :ind))))
+      (let ((ind (1- (plist-get params :ind)))
+	    (with (plist-get params :with)))
 	(when (and (>= ind 0) (eq '2d (plist-get params :plot-type)))
 	  (if (= (length
 		  (delq 0 (mapcar
@@ -320,7 +343,7 @@ line directly before or after the table."
 		 0)
 	      (plist-put params :timeind t)
 	    ;; Check for text ind column.
-	    (if (or (string= (plist-get params :with) "hist")
+	    (if (or (and (stringp with) (string= with "hist"))
 		    (> (length
 			(delq 0 (mapcar
 				 (lambda (el)

^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2020-06-03 22:16 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-22 16:07 `with` as a list Mario Frasca
2020-05-28 13:34 ` [PATCH] [FEATURE] " Mario Frasca
2020-05-30  6:22 ` Kyle Meyer
2020-05-30 14:23   ` Mario Frasca
2020-05-30 14:38     ` Mario Frasca
2020-05-30 20:23     ` Kyle Meyer
2020-05-30 21:29       ` Mario Frasca
2020-05-31 20:18         ` Mario Frasca
2020-06-01  0:19           ` Kyle Meyer
2020-06-01  1:47             ` Mario Frasca
2020-06-01  2:31               ` Kyle Meyer
2020-06-03 15:09                 ` Mario Frasca
2020-06-03 15:13                   ` Bastien
2020-06-03 15:18                     ` Mario Frasca
2020-06-03 15:29                       ` Bastien
2020-06-03 17:08                         ` Mario Frasca
2020-06-03 22:15                         ` Mario Frasca
2020-06-03 15:25                     ` Mario Frasca
2020-06-03 15:30                       ` Bastien
2020-05-30 16:01   ` Mario Frasca
2020-05-30 20:25     ` Kyle Meyer
2020-05-30 21:36       ` Mario Frasca
2020-05-31  0:36         ` Kyle Meyer

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).