
Security News
Browserslist-rs Gets Major Refactor, Cutting Binary Size by Over 1MB
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
Readyplot is a Python figure-creation library based on seaborn. It provides publication-quality defaults which match the esthetic provided by other standalone figure-creation software, but can be integrated into Python data-pipelines to automate figure creation and bridge the gap between procedural data exploration and figure polishing.
The readyplot project was born out of the desire to help automate publication-ready figure creation in Python. A useful paradigm is that readyplot is to seaborn (sns) what seaborn is to matplotlib.pyplot (plt).
Many researchers tediously copy-paste data into existing plotting software and thus risk poor data handling at worst or wasted time at best when they inevitably decide to add exclusion criteria or change esthetics. This package integrates into data-processing pipelines seamlessly without sacrificing figure quality for those who expect publication quality figures.
While readyplot offers many options and passes kwargs to its sns functions, the goal is for the defaults to be fine-tuned such that the user doesn't need to specify anything other than contextual options such as figure width and height. Nothing feels quite as good as watching your output folder auto-populate with readyplot figures which are perfect for both data exploration and publication!
bar() | boxwhisker() | hist() | line() | scatter() | subplots() |
---|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
You can install the package via pip:
pip install readyplot
This package depends on matplotlib, numpy, pandas, seaborn, scipy, pathlib, and setuptools. If you do not have these packages in your environment, you can install with pip install package (replace package with your missing dependency).
import readyplot as rp
# IF PASSING DATA FRAME DF:
plotter = rp.boxwhisker(DF,xlab='X_Column_Name',ylab='Y_Column_Name',zlab='Z/hue_Column_Name')
# IF PASSING X,Y,Z DATA:
plotter = rp.boxwhisker(x,y,z)
#There are many possible arguments to add on initialization
#All **kwargs are passed on to the coressponding sns plotting function
plotter = rp.bar(x,y,z) #sns.barplot()
plotter = rp.boxwhsker(x,y,z) #sns.boxplot()
plotter = rp.hist(x,y,z) #sns.histplot()
plotter = rp.line(x,y,z) #sns.lineplot()
plotter = rp.scatter(x,y,z) #sns.scatterplot()
# Create data
x = ['A','A','A','B','B','B','B','A','B','B']
y=[1,2,3,4,5,8,4,3,2,9]
z = ['C','D','C','D','C','D','C','D','C','D']
# Initialize plotter
box_plotter = rp.boxwhisker(x,y,z,ylab='your variable here',handles_in_legend=2)
# Plot data
box_plotter.plot()
# OR: fig,ax = box_plotter.plot() if you want to handle the figure afterward
# Create data
x = ['A','A','A','B','B','B','B','A','B','B']
y=[1,2,3,4,5,8,4,3,2,9]
z = ['C','D','C','D','C','D','C','D','C','D']
# Initialize plotter
box_plotter = rp.boxwhisker(x,y,z,ylab='your variable here',handles_in_legend=2)
# Apply pre-plotting format options
box_plotter.pre_format()
# Plot data
box_plotter.just_plot()
# OR: fig,ax = box_plotter.just_plot() for any of the functions above except initialization
# Apply post-plotting format options (eg. legend)
box_plotter.post_format()
# Show and save plot
box_plotter.show()
box_plotter.save()
x1 = ['A','A','A','B','B','B','B','A','B','B']
x2 = [3,1,9,5,8,8,3,2,1,10]
y=[1,2,3,4,5,8,4,3,2,9]
z = ['C','D','C','D','C','D','C','D','C','D']
df = pd.DataFrame({'x':x1,'y':y,'z':z})
bar_plot = readyplot.bar(df) # You could pass x1,y,z instead
bar_plot.plot()
box_plot = readyplot.boxwhisker(df)
box_plot.plot()
hist_plot = readyplot.hist(x2)
hist_plot.plot()
line_plot = readyplot.line(x2,y) # You could insert a 2 column data frame with x2,y and only pass that instead
line_plot.plot()
scatter_plot = readyplot.scatter(x2,y)
scatter_plot.plot()
ScatterPlotter
, LinePlotter
, etc...) is its own class that inherits from a shared
BasePlotter
, making it easy to extend in the future with other types of plotsHappy plotting! Feel free to suggest additional features or plot types if needed! Readyplot currently includes most plotting types I use on a daily basis, but I'd be happy to expand readyplot to match the community's needs. This is a passion project which was mostly created within a couple weeks and I hope to get back to improving it within the next year. I haven't had time to fully populate the wiki, but am happy to provide sample templates for whatever you need if you reach out. My code is decently commented so your favorite AI helper may also provide some insight into use cases.
FAQs
Publication-ready data visualization
We found that readyplot demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
Research
Security News
Eight new malicious Firefox extensions impersonate games, steal OAuth tokens, hijack sessions, and exploit browser permissions to spy on users.
Security News
The official Go SDK for the Model Context Protocol is in development, with a stable, production-ready release expected by August 2025.