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
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
plotxel-0.0.9.tar.gz
(15.6 kB
view details)
Built Distribution
plotxel-0.0.9-py3-none-any.whl
(16.5 kB
view details)
File details
Details for the file plotxel-0.0.9.tar.gz
.
File metadata
- Download URL: plotxel-0.0.9.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 503e3d12b48eb4a4f400126b95317a254b9dd399942bfb5e1a01142dee61573a |
|
MD5 | aabbccc9d0e282e0d63f67ded3bcd735 |
|
BLAKE2b-256 | 1eb827ba6cf9f7a86fdf4dbf1c0db7c854e64656ad9dfa256de775e21a907a82 |
File details
Details for the file plotxel-0.0.9-py3-none-any.whl
.
File metadata
- Download URL: plotxel-0.0.9-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e0bf3f0df70da613620fe6074197dc67f9c5e6268511fbf53c95a2056360a9b |
|
MD5 | 754b3bc642aeb7d5a0617db08a1f754f |
|
BLAKE2b-256 | 53476d3ff2a6766ac216a0d8cbb2162c9aaf4a8ceae9045086f4cc13b81e2378 |