Skip to main content

A scientific style plot tool based on matplotlib.

Project description

sciplot

A scientific style plot tool based on matplotlib.

Style demonstration

Features

  • Plot figures for scientific articles painlessly, with right size, font, and others.
  • Quick preview, quick as hell.
  • Supporting three built in styles and custom style.
    • (a) Color cycle, looks cleaner for online journals.
    • (b) Color and marker cycle, support black-and-white view.
    • (c) Line style and marker cycle, support up to 16 lines without repeat.
    • (d) Custom style, easy to set and useful when you got several groups of curves.

Install

Install by pip:

pip install diegoplot

(This project was intended to be called as sciplot, but there is already a sciplot in pipy. Thus I just named it by my name as diegoplot.)

Import the package:

from diegoplot import diegoplot
diegoplot.DiegoPlot()

Or, you can copy the diegoplot.py file into the folder of your project and import it by:

import diegoplot
diegoplot.DiegoPlot()

mini demo

To preview the figure comes from your data, the fast way is just SciPlot(x, y). No configurations needed, you'll get a pretty much finished figure. Optionally, label, legend, and tag could be given as keyword arguments.

# This demo gives the figure (a) above.
import numpy as np
from diegoplot import diegoplot

x = np.linspace(0, 10, 100)
y = np.array([(a + 1) * np.sin(x) for a in range(4)])
diegoplot.DiegoPlot(x, y,
                    label=['x-axis', 'y-axis'],
                    legend=['line {}'.format(n + 1) for n in range(4)],
                    tag='(a)')

The data, x and y, could be in different kinds of.

  • A single curve like x = [x1, x2, ...] and y = [y1, y2, ...] is fine.
  • Multiple curves with same x coordinates should be given like x = [x1, x2, ...] and y = [[curve1_y1, curve1_y2, ...], [curve2_y1, curve2_y2, ...], ...]
  • Of course, multiple curves can have different x coordinates, just give both x and y in the form of [[...],[...],...]. And make sure they are within the same length.

Use style and semilog

There are 3 built-in styles, 0, 1, and 2, as shown in the figure above. And semilog plot is also supported now. To use built-in style and semilog plot, the easiest way is to use the autoplot feature.

diegoplot.Diegoplot(x, y, linestyle=1, log_y=True)

To use custom style, see the Fine tuning section below.

Fine tuning

A fine-tuning is needed to generate the final product. In this case, you are supposed to use the sciplot in a detailed way. There are up to 6 steps: load data, plot data, plot label, plot legend, plot tag, and show.

# This demo gives the figure (b) above.
import numpy as np
from diegoplot import diegoplot

x = np.linspace(0, 10, 30)
y = np.array([(a + 1) * np.sin(x) for a in range(4)])
dp = diegoplot.DiegoPlot()
dp.manual_load(x, y, ['x-axis', 'y-axis'], ['line {}'.format(n + 1) for n in range(4)])
dp.plot_data(1)  # 1 for style 1. Currently, there are 3 built in styles, 0, 1, and 2. 
# Corresponding to figure (a), (b), and (c).

dp.plot_label()  # Optionally, label can be given here as a parameter.
dp.plot_legend()  # Optionally, legend can be given here as a parameter.

dp.plot_tag('(b)')  # The position of the tag is configurable, see annotation of this function.
dp.show()  # Comes with an auto-tight function. Pass through auto_tight=False to disable it.

Apart those steps means you can write your own, customized ones. Or add some operations before show(). Change the range of axis is often used to make curves looks better, or avoid interfering with legend and tag. This is change by sp.ax, which is exactly the axis object of matplotlib. You should see the documentation of matplotlib for more, but I'll list some useful functions.

# axis span range
dp.ax.set_xlim([0, 1])
dp.ax.set_ylim([0, 1])
# where are the scale lines
dp.ax.set_xticks([0, 0.5, 1])
dp.ax.set_yticks([0, 0.5, 1])
# plot text, lines, annotates
dp.ax.text()
dp.ax.hline()
dp.ax.vline()
dp.ax.annotate()
# create another y-axis
ax2 = dp.ax.twinx()  

Load data

Data can be load in different ways. They can be load manually by sp.manual_load(), or load form txt, npz, and csv files. For data generated by python, npz is strongly recommended. sciplot have three built-in functions to load these data: load_npz(), load_txt(), load_csv(). These functions are coding for my use case. Annotations are given about how the data are organized.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

diegoplot-1.3.tar.gz (222.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

diegoplot-1.3-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file diegoplot-1.3.tar.gz.

File metadata

  • Download URL: diegoplot-1.3.tar.gz
  • Upload date:
  • Size: 222.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.0

File hashes

Hashes for diegoplot-1.3.tar.gz
Algorithm Hash digest
SHA256 ea61e939a382c3fc56f84c04b8b3e7349123936685ef06ede548e35595106fdc
MD5 000f3786a6a8579fe193c07ab054ffe1
BLAKE2b-256 23d61b1c4c00c541b8160d3c2bec651199389654b064b439080bb588fbb80107

See more details on using hashes here.

File details

Details for the file diegoplot-1.3-py3-none-any.whl.

File metadata

  • Download URL: diegoplot-1.3-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.0

File hashes

Hashes for diegoplot-1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 5173e58bedfda809fe8f014d0945611d01d3695e2c94bf5d7a3558e70d43eb89
MD5 8e9e77cd07b433e536932e6d90ef853b
BLAKE2b-256 5a1855bc7df01fa8daea86cf4b3c2a1a73feecd25eaff06bf79af848c4d209eb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page