Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

A wordy but intuitive plotting library.

Project description

Plotxel

Control your plots down to the pixel!
Ever have trouble moving a chart to the right? Moving your axis up? Getting rid of ticks? Then try out Plotxel!

It's wordy, slow, and unnecessary 99% of the time. But that 1%, you'll be glad you have Plotxel.

Installation

pip3 install plotxel

Example

Example Image

from plotxel import Plotxel, Axis

x = Plotxel()  # our main drawing canvas in x, y

# add some data as a series. The series name, the x data, and y data
series1 = [i for i in range(10)]
x.add_data('series1', series1, series1)
x.add_data('series2', [1, 2, 3, 4, 5, 10], [5, 2, 1, 4, 3, 10])
x.add_data('series3', [10, 5, 4, 3, 2, 1], [5, 2, 1, 4, 3, 10])

# left plot -- its name, type, and data it's linked to
plot1 = x.add_drawable("plot1", "Scatter", ["series1", 'series2', 'series3'])
plot1.title = 'Analysis of Goose Encounters'
plot1.pos = [60, 50]
plot1.title_offset = 23
plot1.marker_opacity = {.5}  # this must be a set so it can iterate through data. Will make this more intuitive

# right plot and its position. Same data as plot1
plot2 = x.add_drawable("plot2", "Scatter", "series1")
# set a bunch of attributes at once!
plot2.setattrs(
    ylim=[-1, 10],
    xlim=[-1, 10],
    pos=[450, 50],
    marker_shape='square',
    marker_fill_color=(255, 0, 0),
    title='Analysis of Goose Encounters (red)',
    line_width = 0
)

# add some axes, and link them to our plots. It will copy the size, position, scale, and limits of whichever plot it is linked to
ax1 = x.add_drawable("ax1", 'YAxis', link_to="plot1")
ax1.axis_offset = 10
ax1.title_offset = 25  # distance from the ticks. Will have an auto feature in the future!
ax1.title = "Near Death Experiences With Geese"

# all other axes, let's put them flush with the graph by changing the default
# defaults are copied at the time the object is initialized, so this won't affect ax1
Axis.defaults['axis_offset'] = -1
ax1b = x.add_drawable('ax1b', 'XAxis', link_to='plot1')

# you can keep setting attributes in bulk
ax1r = x.add_drawable('ax1r', 'YAxis', link_to='plot1', title_offset=20)
ax1r.setattrs(
    side='right',
    title_offset=20,
    title='Ax1 Right Title'
)

ax1t = x.add_drawable('ax1t', 'XAxis', link_to='plot1')
ax1t.setattrs(
    side='top',
    title=''
)

# or use the constructor!
x.add_drawable("ax2", 'YAxis', link_to="plot2", title_offset=20, side='right', axis_offset=10)

ax3 = x.add_drawable("ax3", 'XAxis', link_to="plot2")
ax3.setattrs(
    side='bottom',
    axis_offset=10,
    title="Number of Freaking Geese",
)


# I think I would prefer axes to be blue!
Axis.defaults['color'] = (0, 0, 255)

# let's add some bar chart data. Since it's a vertical bar chart, we will pull Y data
# the labels aren't implemented quite yet
x.add_data('bar_data', ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], [1, 9, 4, 5, 3, 6, 2])
x.add_data('bar_data2', ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], [1, 7, 4, 3, 4, 5, 1])
x.add_data('bar_data3', ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], [-3, 14, 2, 1, 2, 7, 9])

plot3 = x.add_drawable('bar1', 'Bar', ['bar_data', 'bar_data2', 'bar_data3'])
# or unpack a dict
plot3_attrs = {
    'pos': (150, 300),
    'dim': (500, 150),
    'ylim': [-5, 15],
    'group_spacing': 30,
    'bar_spacing': 0,
    'title': 'Safely Navigating Geese'
}
plot3.setattrs(**plot3_attrs)

x.add_drawable('ax4', 'YAxis', link_to="bar1", title='Likelihood of Goose Attack', title_offset=25)
# x.add_drawable('ax5', 'XAxis', link_to='bar1', title='Day of Week', title_offset=5)

# coming soon, Jupyter magic!
# x.anti_aliasing=False
x.show()

# or for SVG
# svg_html = x.draw()

# or for image  in BytesIO / save to filename
# x.render(filename='example2.png')

This program is being developed based on my own needs, and unfortunately I don't do a lot of plotting today, therefore I don't need a lot of features.

In any case, I'll be prioritizing features, up next is bar charts and histograms!

Project details


Download files

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

Files for plotxel, version 0.0.9
Filename, size File type Python version Upload date Hashes
Filename, size plotxel-0.0.9-py3-none-any.whl (16.5 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size plotxel-0.0.9.tar.gz (15.6 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page