Giter VIP home page Giter VIP logo

eplot's Introduction

eplot is an Emacs package for generating time series charts, plots and bar charts interactively.

This is a work in progress and is probably not very useful generally yet, but here's the documentation so far:

movie-plot.plt

Here's an example...

chart-legend.plt

And here's another.

But let's start from the start. Here's a trivial example, trivial-very-short.plt:

41
42.1
44.7

Then say `M-x eplot' in this buffer, and you'll get this displayed:

trivial-very-short.plt

If you have the pcsv package installed, you can also do CSV files.

Year,explore,investigate
2000,1834.6246923361425,3314.978325069512
2001,1973.1940690964868,3484.9536191658754
2002,2128.9463492787686,3671.1459598826505
...

Just say `M-x eplot' in a buffer with values like that, and eplot will do its best to display the data.

To tweak the look of the chart, there are three possibilities:

  • You can use the c' command in the eplot buffer or the C-c C-v' command in the plt buffer. This command prompts you for values using a Transient interface.

  • You can use the `l' command in the eplot buffer. This pops up an auxiliary "Controls" buffer that lists all the default different things that can be changed. Hit the Return key after changing anything to see an updated chart.

  • Finally, you can put headers into the file that describes the look of the chart.

Below, this final method is used in all the examples, because that's convenient when going through lots of different settings in the manual, but I'm guessing most users might want to use one of the two first methods (which can be mixed -- you can do some settings via Transient and some via the Controls buffer).

In most of the examples below, the following header lines are present, and are not included in the code examples:

Layout: compact
Width: 300
Height: 200

By default, eplot uses a more spacious layout, and the width/heights are automatically calculated based on the window size. But for these examples in this manual, it's more convenient to show smaller, more compact charts.

You don't need to have the actual chart data in the .plt file -- instead you can specify the location with a Data-File: plot header:

Data-File: data1.txt

chart-simple.plt

This is the basic, default look of that data set.

OK, let's go through all the various options you have to change the look of the charts.

First of all, several different plotting styles are available. The default is the "line" Style.

Style: square

chart-square.plt

Style: curve

chart-curve1.plt

This uses a Bezier curve to draw a smooth line between points. It takes a Bezier-Factor. If you up this too much, you get amusing results:

Style: curve
Gradient: red black
Bezier-Factor: 0.8

chart-curve2.plt

And you can add a gradient to curve plots, too.

Style: triangle
Fill-Color: #c0c0c0

chart-triangle.plt

Some styles also take a Fill parameter to specify the fill color.

Style: rectangle

chart-rectangle.plt

Size: 3
Color: red black green blue brown
Style: impulse

chart-impulse-wide.plt

Style: point

chart-point.plt

Style: cross

chart-cross.plt

Style: circle
Size: 8

chart-circle.plt

That's all the basic plotting styles.

Data-File: data1.txt

Style: impulse
Color: blue
Data-File: data2.txt

chart-two-plots.plt

You can have several plots in one chart, with their own styles and colors.

Y-Label-Format: %s%%
X-Label-Format: $%s
Data-File: data1.txt

chart-format.plt

You can specify a format string for the X and Y labels.

There's a special color spec called "vary", and it results in choosing between some pre-defined legible colors:

Style: circle
Fill-Color: vary
Color: none
Size: 8

chart-circle-colors.plt

The "vary" isn't useful on all plot styles:

Color: vary
Data-File: data1.txt

chart-segment.plt

You can also specify colors/sizes on a per-data point basis. Here's an excerpt from a plt file that demonstrates that:

Style: circle
Fill-Color: none
41
42.1
42.1
44.1
43.6 # Size: 10, Fill-Color: red
43.6
42.9
43
43.2
44.4
44.5
45.4
45.9
52   # Size: 10, Fill-Color: blue
53

chart-circle-sizes.plt

It's sometimes useful to be able to single out certain values with a text or a special mark.

Style: curve
Color: black
41
42.1
42.1
...
53   # Text: New Model, Mark: cross, Size: 3
52.5
51
...

chart-texts.plt

And as you can see, you can combine the text and the mark.

Bar charts are somewhat special.

Format: bar-chart

Color: vary
33
20
24

chart-bar.plt

Each bar is displayed separately, and the labels on the X axis are displayed in the middle of the bars -- this is quite different from the box plot on the same data set:

Format: normal
Min: 0

Style: square
33
20
24

chart-bar-box.plt

Anyway, the first bar box demonstrated the "vary" color again, but you can specify the colors yourself:

Format: bar-chart

Color: green gray
33 # Label: Apples
20 # Label: Oranges
24 # Label: Appanges

chart-color-list.plt

When it runs out of colors, it starts anew. And another feature demonstrated here is that you can specify the labels on a per-item basis.

You can also have plots with two values per item, and eplot then fills the data in between:

Data-Format: two-values
Style: square
Fill-Color: lightblue
Fill-Border-Color: black
Data-File: data-between.txt

chart-between2.plt

Mode: dark
Border-Width: 1

Data-Format: two-values
Style: square
Gradient: red black
Data-File: data-between.txt

chart-between1.plt

This is the same data set, but in "dark mode", and with a gradient between the values. Oh, and a border, because why not.

Data-Column: 2
41     57.551391
42.1    59.88006
42.1    59.88006
...

chart-second-column.plt

It can sometimes be convenient to have several data sets in the same file, but in different columns. You can use the Data-Column header to specify which column to plot.

OK, there's a lot of details about the plot you can specify. Here's an example:

Border-Color: yellow
Border-Width: 3
Frame-Color: red
Surround-Color: green
Background-Color: blue
Grid-Color: black
Chart-Color: white
Title: Title, background and border
Axes-Color: black
Title-Color: red

Data-File: data1.txt

chart-color.plt

Go wild! But preferably not that wild.

Gradient: black red
Data-File: data1.txt

chart-gradient1.plt

You can also plot the data using gradients.

Gradient: black red
Style: square
Data-File: data1.txt

chart-gradient-square.plt

You can put the gradient above the chart instead:

Gradient: black red top-down above
Data-File: data1.txt

chart-gradient2.plt

Gradient: black red bottom-up
Data-File: data1.txt

chart-gradient3.plt

You can specify the direction -- this one is basically just swapping the order of the colors.

Gradient: black red right-left above
Data-File: data1.txt

chart-gradient4.plt

But also right-left...

Gradient: black red left-right below
Data-File: data1.txt

chart-gradient6.plt

... and left-right.

Gradient: black red bottom-up above
Data-File: data1.txt

Gradient: black red top-down below
Data-File: data1.txt

chart-gradient5.plt

And below the plot.

Gradient: black red left-right above
Data-File: data1.txt

chart-two-gradient1.plt

You can plot the same data set twice with different gradients to get interesting results.

Gradient: black red left-right above
Data-File: data1.txt

Gradient: black red bottom-up
Data-File: data1.txt

chart-two-gradient2.plt

Grid-Position: top
Grid-Color: black

Gradient: #000030 blue left-right above
Data-File: data1.txt

Gradient: black red top-down below
Data-File: data1.txt

chart-two-gradient3.plt

When using filled/gradient plots, it's often useful to put the grid on top of the charts.

Grid-Position: top
Grid-Color: #803030

Gradient: green blue top-down above
Data-File: data1.txt

Gradient: yellow red top-down below
Data-File: data1.txt

chart-two-gradient4.plt

Craazy.

Grid-Position: top
Grid-Color: black
Grid-Opacity: 0.2

Gradient: #000030 blue left-right above
Data-File: data1.txt

Gradient: black red top-down below
Data-File: data1.txt

chart-two-gradient5.plt

But when putting the grid on top like this, it's usually more visually pleasant to make the grid non-opaque.

Gradient: black 25-purple-50-white-75-purple-black
Data-File: data1.txt

chart-gradient-more-stops.plt

You can also have more stops. In that case, the second element specifies the percentage points of where each color ends, so the above starts with black, then at 25% it's purple, then at 50% it's white, then it's back to purple again at 75%, before ending up at black at a 100% (but you don't have to include the 100% here -- it's understood).

X-Label: Day
Y-Label: Money
Margin-Left: 40
Margin-Bottom: 40
Grid-Position: top

Data-File: data1.txt

chart-labels.plt

You can put labels on the axes. If you're using the compact layout (as we are in these examples), you have to open up some space for the labels manually -- in the normal layout, there's already space for labels.

Data-Format: date
Smoothing: moving-average
20090101 157
20090102 156
20090103 152
20090104 152
...

date-chart2.plt

You can also use the date format to plot date series. And another feature demonstrated here is that you can have eplot smooth the data before plotting.

Data-Format: time
144000 78.0
145003 170.1
150014 212.9
...

time-chart-long.plt

Similarly, you can also do intra-day time plots -- this takes a HHMMSS format.

Data-Format: xy
Data-File: data-circle.txt

chart-xy-circle.plt

eplot isn't really geared towards doing 2D plots -- it's for time series and bar charts. But it can do rudimentary 2D plots, but it lacks some of the control you'd expect.

Background-Image-File: background.jpg
Grid-Color: #333
Color: white
Data-File: data1.txt

chart-background1.plt

You can put lovely wood grain images in the background to simulate being back in the 70s.

Background-Color: #888
Background-Image-File: background2.jpg
Background-Image-Cover: plot
Background-Image-Opacity: 0.6
Grid-Color: #333
Color: white
Data-File: data1.txt

chart-background2.plt

And you can put the background image over the entire chart, just behind the plot, or just in the frame. And also adjust the opacity.

Chart-Color: white
Grid-Color: #444
Background-Gradient: blue black right-left
Data-File: data1.txt
Gradient: red black

chart-gradient-background.plt

You can also have a gradient over the entire background, of course.

Header-File: external-headers.plt

If you're plotting a lot of charts, you usually want to have the same basic parameters. So you can put those in one file, and then include them like this. You can also use the `M-x eplot-with-headers' command, which will plot using the data in the current buffer, but taking the headers from that file.

So there's a lot of different headers you can use to influence the look of the chart and the individual plots. To get a list of them all, and their possible values, use the `M-x eplot-list-chart-headers' command.

You can have comments in a .plt buffer -- all lines that start with a # are comments.

eplot-mode

The major mode for editing .plt files is very simple. It does some font-locking and then provides the following commands:

C-c C-c: Display a buffer with the rendered image. C-c C-e: List all the different headers and document them. TAB: Autocomplete headers.

eplot-view-mode

The buffer used to display the charts uses another simple major mode with some convenient commands.

C-c C-s: Save the image to a file. C-c C-w: Specify an image width and then save the file.

If saving to a different format than SVG, the "convert" or "rsvg-convert" external programs are needed to do the conversion.

The C-c C-w command needs "rsvg-convert", because it renders the SVG chart at a specific size. This avoids scaling artefacts (blurring, etc), and you get a crisp, nice chart at any size you require.

Installation

If you're installing this manually (I guess it'll be on an ELPA after it's finished), put something like the following in your Emacs init file:

(push "~/src/eplot/" load-path) (autoload 'eplot "eplot" nil t) (autoload 'eplot-mode "eplot" nil t) (unless (assoc "\.plt" auto-mode-alist) (setq auto-mode-alist (cons '("\.plt" . eplot-mode) auto-mode-alist)))

Adjust the path you're pushing to load-path depending on where you put eplot.el.

API

(Probably more to come here...)

All the headers can have defaults set programmatically so that you can define an overall look that you prefer (and then override with explicit headers when you want).

This is done with the eplot-set function:

(eplot-set 'width 600) 
(eplot-set 'height 300)
(eplot-set 'font "arial")
(eplot-set 'background-color "#ffe0e0")
(eplot-set 'grid-color "#c0c0c0")

chart-simple.plt

You can put this in your Emacs init file or somewhere, but then you also need a

(require 'eplot)

first.

eplot's People

Contributors

dmolina avatar larsmagne avatar sri avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

eplot's Issues

text to display on chart

Is it possible to display a text on the chart for certain data points? (I went through the eplot help, but can't see a related option.)
I think it would be an useful feature.

unbound-slot error when invoking `eplot`

After doing as you say instead of producing a display I get the following error after invoking eplot.

These are what I use.
GNU Emacs 29.3 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.41, cairo version 1.18.0)
Arch Linux x86_64

Then say `M-x eplot' in this buffer, and you'll get this displayed:

Debugger entered--Lisp error: (unbound-slot eplot-chart "#<eplot-chart eplot-chart-172392d189f2>" print-format oref)
  signal(unbound-slot (eplot-chart "#<eplot-chart eplot-chart-172392d189f2>" print-format oref))
  #f(compiled-function (object class slot-name fn) "Slot unbound is invoked during an attempt to reference an unbound slot.\nOBJECT is the instance of the object being reference.  CLASS is the\nclass of OBJECT, and SLOT-NAME is the offending slot.  This function\nthrows the signal `unbound-slot'.  You can overload this function and\nreturn the value to use in place of the unbound value.\nArgument FN is the function signaling this error.\nUse `slot-boundp' to determine if a slot is bound or not.\n\nIn CLOS, the argument list is (CLASS OBJECT SLOT-NAME), but\nEIEIO can only dispatch on the first argument, so the first two are swapped." #<bytecode 0x4937b270e59b868>)(#<eplot-chart eplot-chart-172392d189f2> #s(eieio--class :name eplot-chart :docstring nil :parents nil :slots [#s(cl-slot-descriptor :name plots :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name xs :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name ys :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-values :initform nil :type t :props nil) #s(cl-slot-descriptor :name x-type :initform nil :type t :props nil) #s(cl-slot-descriptor :name x-min :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-max :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-ticks :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name y-ticks :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name stride :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name print-format :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-tick-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-label-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-step-map :initform nil :type t :props nil) #s(cl-slot-descriptor :name y-tick-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name y-label-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name inhibit-compute-x-step :initform nil :type t :props nil) #s(cl-slot-descriptor :name set-min :initform nil :type t :props nil) #s(cl-slot-descriptor :name set-max :initform nil :type t :props nil) #s(cl-slot-descriptor :name axes-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name background-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name border-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name border-width :initform nil :type t :props nil) #s(cl-slot-descriptor :name chart-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name font :initform nil :type t :props nil) #s(cl-slot-descriptor :name font-size :initform nil :type t :props nil) #s(cl-slot-descriptor :name format :initform nil :type t :props nil) #s(cl-slot-descriptor :name frame-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name frame-width :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-opacity :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-position :initform nil :type t :props nil) #s(cl-slot-descriptor :name height :initform nil :type t :props nil) #s(cl-slot-descriptor :name label-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name layout :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend-color :initform nil :type t :props nil) ...] :index-table #<hash-table eq 54/65 0x172391f153e3> :children nil :initarg-tuples ((:plots . plots) (:axes-color . axes-color) (:background-color . background-color) (:border-color . border-color) (:border-width . border-width) (:chart-color . chart-color) (:font . font) (:font-size . font-size) (:format . format) (:frame-color . frame-color) (:frame-width . frame-width) (:grid . grid) (:grid-color . grid-color) (:grid-opacity . grid-opacity) (:grid-position . grid-position) (:height . height) (:label-color . label-color) (:layout . layout) (:legend . legend) (:legend-color . legend-color) (:legend-background-color . legend-background-color) (:legend-border-color . legend-border-color) (:margin-bottom . margin-bottom) (:margin-left . margin-left) (:margin-right . margin-right) (:margin-top . margin-top) (:mode . mode) (:surround-color . surround-color) (:title . title) (:title-color . title-color) (:width . width) (:x-axis-label-space . x-axis-label-space) (:x-label . x-label) (:y-label . y-label) (:max . max) (:min . min)) :class-slots [] :class-allocation-values [] :default-object-cache #<eplot-chart eplot-chart-172391f15734> :options (:custom-groups nil)) print-format oref)
  apply(#f(compiled-function (object class slot-name fn) "Slot unbound is invoked during an attempt to reference an unbound slot.\nOBJECT is the instance of the object being reference.  CLASS is the\nclass of OBJECT, and SLOT-NAME is the offending slot.  This function\nthrows the signal `unbound-slot'.  You can overload this function and\nreturn the value to use in place of the unbound value.\nArgument FN is the function signaling this error.\nUse `slot-boundp' to determine if a slot is bound or not.\n\nIn CLOS, the argument list is (CLASS OBJECT SLOT-NAME), but\nEIEIO can only dispatch on the first argument, so the first two are swapped." #<bytecode 0x4937b270e59b868>) #<eplot-chart eplot-chart-172392d189f2> (#s(eieio--class :name eplot-chart :docstring nil :parents nil :slots [#s(cl-slot-descriptor :name plots :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name xs :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name ys :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-values :initform nil :type t :props nil) #s(cl-slot-descriptor :name x-type :initform nil :type t :props nil) #s(cl-slot-descriptor :name x-min :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-max :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-ticks :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name y-ticks :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name stride :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name print-format :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-tick-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-label-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-step-map :initform nil :type t :props nil) #s(cl-slot-descriptor :name y-tick-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name y-label-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name inhibit-compute-x-step :initform nil :type t :props nil) #s(cl-slot-descriptor :name set-min :initform nil :type t :props nil) #s(cl-slot-descriptor :name set-max :initform nil :type t :props nil) #s(cl-slot-descriptor :name axes-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name background-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name border-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name border-width :initform nil :type t :props nil) #s(cl-slot-descriptor :name chart-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name font :initform nil :type t :props nil) #s(cl-slot-descriptor :name font-size :initform nil :type t :props nil) #s(cl-slot-descriptor :name format :initform nil :type t :props nil) #s(cl-slot-descriptor :name frame-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name frame-width :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-opacity :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-position :initform nil :type t :props nil) #s(cl-slot-descriptor :name height :initform nil :type t :props nil) #s(cl-slot-descriptor :name label-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name layout :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend-color :initform nil :type t :props nil) ...] :index-table #<hash-table eq 54/65 0x172391f153e3> :children nil :initarg-tuples ((:plots . plots) (:axes-color . axes-color) (:background-color . background-color) (:border-color . border-color) (:border-width . border-width) (:chart-color . chart-color) (:font . font) (:font-size . font-size) (:format . format) (:frame-color . frame-color) (:frame-width . frame-width) (:grid . grid) (:grid-color . grid-color) (:grid-opacity . grid-opacity) (:grid-position . grid-position) (:height . height) (:label-color . label-color) (:layout . layout) (:legend . legend) (:legend-color . legend-color) (:legend-background-color . legend-background-color) (:legend-border-color . legend-border-color) (:margin-bottom . margin-bottom) (:margin-left . margin-left) (:margin-right . margin-right) (:margin-top . margin-top) (:mode . mode) (:surround-color . surround-color) (:title . title) (:title-color . title-color) (:width . width) (:x-axis-label-space . x-axis-label-space) (:x-label . x-label) (:y-label . y-label) (:max . max) (:min . min)) :class-slots [] :class-allocation-values [] :default-object-cache #<eplot-chart eplot-chart-172391f15734> :options (:custom-groups nil)) print-format oref))
  slot-unbound(#<eplot-chart eplot-chart-172392d189f2> #s(eieio--class :name eplot-chart :docstring nil :parents nil :slots [#s(cl-slot-descriptor :name plots :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name xs :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name ys :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-values :initform nil :type t :props nil) #s(cl-slot-descriptor :name x-type :initform nil :type t :props nil) #s(cl-slot-descriptor :name x-min :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-max :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-ticks :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name y-ticks :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name stride :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name print-format :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-tick-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-label-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name x-step-map :initform nil :type t :props nil) #s(cl-slot-descriptor :name y-tick-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name y-label-step :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name inhibit-compute-x-step :initform nil :type t :props nil) #s(cl-slot-descriptor :name set-min :initform nil :type t :props nil) #s(cl-slot-descriptor :name set-max :initform nil :type t :props nil) #s(cl-slot-descriptor :name axes-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name background-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name border-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name border-width :initform nil :type t :props nil) #s(cl-slot-descriptor :name chart-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name font :initform nil :type t :props nil) #s(cl-slot-descriptor :name font-size :initform nil :type t :props nil) #s(cl-slot-descriptor :name format :initform nil :type t :props nil) #s(cl-slot-descriptor :name frame-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name frame-width :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-opacity :initform nil :type t :props nil) #s(cl-slot-descriptor :name grid-position :initform nil :type t :props nil) #s(cl-slot-descriptor :name height :initform nil :type t :props nil) #s(cl-slot-descriptor :name label-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name layout :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend-background-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name legend-border-color :initform nil :type t :props nil) #s(cl-slot-descriptor :name margin-bottom :initform nil :type t :props nil) #s(cl-slot-descriptor :name margin-left :initform nil :type t :props nil) #s(cl-slot-descriptor :name margin-right :initform nil :type t :props nil) #s(cl-slot-descriptor :name margin-top :initform nil :type t :props nil) ...] :index-table #<hash-table eq 54/65 0x172391f153e3> :children nil :initarg-tuples ((:plots . plots) (:axes-color . axes-color) (:background-color . background-color) (:border-color . border-color) (:border-width . border-width) (:chart-color . chart-color) (:font . font) (:font-size . font-size) (:format . format) (:frame-color . frame-color) (:frame-width . frame-width) (:grid . grid) (:grid-color . grid-color) (:grid-opacity . grid-opacity) (:grid-position . grid-position) (:height . height) (:label-color . label-color) (:layout . layout) (:legend . legend) (:legend-color . legend-color) (:legend-background-color . legend-background-color) (:legend-border-color . legend-border-color) (:margin-bottom . margin-bottom) (:margin-left . margin-left) (:margin-right . margin-right) (:margin-top . margin-top) (:mode . mode) (:surround-color . surround-color) (:title . title) (:title-color . title-color) (:width . width) (:x-axis-label-space . x-axis-label-space) (:x-label . x-label) (:y-label . y-label) (:max . max) (:min . min)) :class-slots [] :class-allocation-values [] :default-object-cache #<eplot-chart eplot-chart-172391f15734> :options (:custom-groups nil)) print-format oref)
  eieio-barf-if-slot-unbound(eieio--unbound #<eplot-chart eplot-chart-172392d189f2> print-format oref)
  slot-value(#<eplot-chart eplot-chart-172392d189f2> print-format)
  eplot--adjust-chart(#<eplot-chart eplot-chart-172392d189f2>)
  eplot--render(nil)
  eplot-update()
  eplot-update-view-buffer()
  eplot()
  funcall-interactively(eplot)
  call-interactively(eplot record nil)
  command-execute(eplot record)
  execute-extended-command(nil "eplot" nil)
  funcall-interactively(execute-extended-command nil "eplot" nil)
  call-interactively(execute-extended-command nil nil)
  command-execute(execute-extended-command)

data source: org-table

I'm not sure how big this request is, but I have data in the format of an org-table:

|       date |value |
|------------+------|
| 2020-07-04 | 2054 |
| 2020-10-30 | 2064 |
| 2020-11-02 | 2065 |
| 2020-11-11 | 2111 |
| 2020-11-20 | 2215 |
| 2020-11-23 | 2258 |
| 2020-11-27 | 2333 |
| 2020-11-30 | 2390 |
| 2020-12-05 | 2483 |
| 2020-12-08 | 2541 |
| 2020-12-12 | 2606 |
| 2020-12-13 | 2617 |
| 2020-12-15 | 2647 |

Is it possible to use it as a data source? I can convert it to a plt if needed easily, but it would make plotting from org easier if we could just call eplot on a table.

Moving between fields in eplot-controls

What is the recommended way to move between input fields in the eplot-controls buffer? I use C-n, C-p, M-f, M-b, TAB, but it's kind of cumbersome. Would it be possible to jump to the next / previous field with, say, C-<tab> / <backtab>?

(eplot-control-next-input does not jump to the next input when the point is in an input field and there is no eplot-control-previous-input.)

Thank you.

Great package!

Great package!
Could you just, if possible, to write a Readme.md showing how to install it on Emacs?
And also submitting it to MELPA for them to see if they approve it to be in the MELPA repository?

multiple data series

Is there a possibility to draw multiple series on a single chart, from different data sources perhaps? I couldn't find any examples for this besides the in-between filling which is not exactly what I want.

Transient for configuration

Currently, configuring the plot requires adding a header to the file, which is not ideal if one already has code set to parse that file elsewhere, and requires knowledge of how to actually configure the file.
Would be awesome if the configuration could come up with a transient menu instead.

Not suggesting you take it upon yourself to implement this, but figured I'd share the thought here.

Thank you for sharing!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.