Skip to main content

pygrace: Python bindings to xmgrace

About Pygrace

pygrace was designed to enable the construction and use of xmgrace projects from Python. pygrace provides a collection of classes that serve as editable templates for elements of a xmgrace project. The inheritance structure of pygrace mirrors the structure of xmgrace.

pygrace Project objects are used to construct and save xmgrace project files (.agr). Project files capture the state of a xmgrace session, including the figures, settings, and current variables.

pygrace project

A more detailed diagram of all the attributes of pygrace template objects can be found at https://github.com/uqfoundation/pygrace/blob/master/docs/diagrams/diagram.pdf, while a handy cheatsheet of the methods and attributes of each pygrace template class can be found at https://github.com/uqfoundation/pygrace/blob/master/docs/diagrams/cheatsheet.pdf. This cheatsheet can be dynamically generated through use of the write_cheatsheet method, available from the Project class.

pygrace is in active development, so any user feedback, bug reports, comments, or suggestions are highly appreciated. A list of issues is located at https://github.com/uqfoundation/pygrace/issues, with a legacy list maintained at https://github.com/pygrace/pygrace/issues.

Major Features

pygrace provides an object-oriented Python interface for the efficient construction of xmgrace projects (e.g. highly-customizable publication-quality single and multi-figure plots). pygrace provides:

  • an object-relational mapping from Python objects to a xmgrace project

  • an interactive Python-based grace> prompt for xmgrace commands

  • a set of high-level Python functions for drawing xmgrace Graphs

Current Release

The latest released version of pygrace is available from:

https://pypi.org/project/pygrace

pygrace is distributed under a 3-clause BSD license.

Development Version

You can get the latest development version with all the shiny new features at:

https://github.com/uqfoundation

If you have a new contribution, please submit a pull request.

Installation

pygrace can be installed with pip:

$ pip install pygrace

It is assumed xmgrace is already installed and on the user’s $PATH. xmgrace is available at:

https://plasma-gate.weizmann.ac.il/pub/grace/src/

Alternately, xmgrace typically can be installed with most package managers. For example:

$ apt-get install grace # on Linux
$ brew install grace # on MacOS

Installing an Xserver from X.org (xorg, xorg-server, xquartz, or similar, depending on your operating system and package manager) is also required to open the xmgrace GUI.

Requirements

pygrace requires:

  • python (or pypy), >=3.9

  • setuptools, >=42

  • cython, >=0.29.30

  • numpy, >=1.0

  • mpmath, >=0.19

Additional requirements:

  • xmgrace, >=5.1.14

Basic Usage

start a pygrace project file:

>>> from pygrace.project import Project
>>> plot = Project()

add a Graph to the Project instance:

>>> graph = plot.add_graph()
>>> graph.title.text = 'Hello, world!'

add a DataSet to the graph:

>>> data = [(0, 0), (0.5, 0.75), (1, 1)]
>>> dataset = graph.add_dataset(data)

save the Project to a xmgrace project file (.agr format):

>>> plot.saveall('00_helloworld.agr')

then, open the project file with xmgrace:

$ xmgrace 00_helloworld.agr
00_helloworld

find out more about pygrace at http://pygrace.rtfd.io or browse some more of the examples at https://github.com/uqfoundation/pygrace/tree/master/examples.

for example:

$ python 05_colorplot.py
$ xmgrace 05_colorplot.agr
05_colorplot

and:

$ python 08_latexlabels.py
$ xmgrace 08_latexlabels.agr
08_latexlabels

we can also work in an interactive xmgrace session:

>>> from pygrace import grace
>>> pg = grace()

use xmgrace methods directly from the Python interpreter:

>>> import numpy as np
>>> x = np.arange(21) * np.pi/10
>>> pg.plot(x, np.sin(x))
sin

push variables into xmgrace and interact with the xmgrace scripting language:

>>> pg.put('x', x)
>>> pg.put('y', np.cos(x))
>>> pg.eval('s0 line color 2')
>>> pg.eval('plot(x,y)')
cos

use the interactive xmgrace prompt:

>>> pg.prompt()
grace interface:
vars=
     y
     x
grace> histoPlot(y)
grace> s0 fill color 3
grace> redraw()
grace> exit
histoPlot

check variables in xmgrace session:

>>> list(pg.who().keys())
['x', 'y']
>>> pg.who('x')
array([0.        , 0.31415927, 0.62831853, 0.9424778 , 1.25663706,
       1.57079633, 1.88495559, 2.19911486, 2.51327412, 2.82743339,
       3.14159265, 3.45575192, 3.76991118, 4.08407045, 4.39822972,
       4.71238898, 5.02654825, 5.34070751, 5.65486678, 5.96902604,
       6.28318531])

get variables back into Python from xmgrace:

>>> cosx = pg.get('y')

use shortcuts for put, eval, and get:

>>> pg.z = 0.5
>>> pg('print(z)')
0.5
>>> pg.z + cosx
array([ 1.5       ,  1.45105652,  1.30901699,  1.08778525,  0.80901699,
        0.5       ,  0.19098301, -0.08778525, -0.30901699, -0.45105652,
       -0.5       , -0.45105652, -0.30901699, -0.08778525,  0.19098301,
        0.5       ,  0.80901699,  1.08778525,  1.30901699,  1.45105652,
        1.5       ])

delete variables from xmgrace:

>>> pg.delete('x')
>>> pg.delete('y')

save the current session to a project file, then exit:

>>> pg.saveall('histoPlot.agr')
>>> pg.exit()

start a new interactive xmgrace session from the saved project:

>>> pg = grace(project='histoPlot.agr')

More Information

Probably the best way to get started is to look at the documentation at http://pygrace.rtfd.io. Also see pygrace.tests for a set of scripts that demonstrate several of the many features of pygrace. You can run the test suite with python -m pygrace.tests. Also see https://github.com/uqfoundation/pygrace/tree/master/examples for examples that demonstrate the construction of xmgrace project files (.agr). https://github.com/uqfoundation/pygrace/tree/master/examples/interactive includes examples of using python to interact with a live xmgrace session. The source code is relatively well documented, so some questions may be resolved by inspecting the code itself. However, please feel free to submit a ticket on github, or ask a question on stackoverflow (@Mike McKerns). If you would like to share how you use pygrace in your work, please send an email (to mmckerns at uqfoundation dot org).

Citation

If you use pygrace to do research that leads to publication, we ask that you acknowledge use of pygrace by citing the following in your publication:

Michael McKerns, Dean Malmgren, Mike Stringer, and Daniel Stouffer,
"pygrace: Python bindings to xmgrace", 2005- ;
https://github.com/uqfoundation/pygrace

Please see https://pygrace.github.io/ for further information on an earlier version of pygrace developed by Dean Malmgren, Mike Stringer, and members of the Amaral Lab, and later maintained by Daniel Stouffer and members of the Stouffer Lab. This code has been merged into the original pygrace developed by Mike McKerns.

Release files for pygrace 1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pygrace 1.7
File Size Uploaded
pygrace-1.7.tar.gz 529.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pygrace 1.7
File Interpreter ABI Platform
pygrace-1.7-py3-none-any.whl Python 3 none any Details

Total release size: 768.2 kB

Release files / pygrace-1.7.tar.gz

Download URL pygrace-1.7.tar.gz
Size 529.2 kB
Tags Source
SHA-256 checksum
How to use checksums
91f9b54d45d48c8250a2dba6d1a1300549a59ec05dbd0f3760d09f38d6a76140
BLAKE2b-256 checksum
How to use checksums
282fea754c545ab4f94dc555e99a8896bcfd67e6a3b9d41898dddac04b018545
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.14.2

Release files / pygrace-1.7-py3-none-any.whl

Download URL pygrace-1.7-py3-none-any.whl
Size 239.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
32e58da462c7e1e24fd56e6fd0c6f2f85612cacbc92e5a73f15ff6aa01e13ec7
BLAKE2b-256 checksum
How to use checksums
6434b1234b94e734518a0df2ec8c451746fca561d85c027f7981d57480678649
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.14.2

Release history Release notifications | RSS feed

This release

1.7 This release

2 release files

1.6

2 release files

1.5

2 release files

1.4

2 release files

1.3

2 release files

1.2.1

2 release files

0.4

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page