This library helps you plot figures that are used on a paper for experiment results. It is basically a wrapper around matplotlib but provides a way to constrcut plots using builder pattern.
- Python 3
- The following Python libraries:
- csv
- matplotlib
- numpy
import paper_plot as pt
pt.lines_from_csv('example_data.csv', figsize=(10, 3)) \
.y_label('Throughput\n(K txs/15 secs)').tick_size(15).label_size(18)\
.y_max(60)\
.line_styles([':', '--', '-']).legend_size(17).legend_out() \
.legend_ncol(3) \
.draw().save_as_pdf('fig-example')To see more examples, please check the example notebook.
This library intends to simplify the API of matplotlib. For example, in order to draw the figure shown above. You may need to write the following code with matplotlib.
import matplotlib.pyplot as plt
import csv
x_label = ''
line_labels = []
x_data = []
line_data = []
# Read data from a CSV file
with open('example_data.csv', 'r') as f:
for row in csv.reader(f):
if x_label == '':
x_label = row[0]
line_labels = row[1:]
for i in range(len(line_labels)):
line_data.append([])
else:
if row[0] == '':
continue
x_data.append(float(row[0]))
for i in range(len(line_labels)):
line_data[i].append(float(row[i + 1]))
# Adjust the figure size
(fig, axe) = plt.subplots(1, 1, figsize=(10, 3))
# Draw lines
lines = []
for y in line_data:
lines_handle = axe.plot(x_data, y)
lines.append(lines_handle[0])
axe.set_xlim(x_data[0], x_data[-1])
# Change line styles
line_styles = [':', '--', '-']
if len(line_styles) > 0:
for i in range(len(lines)):
lines[i].set_linestyle(line_styles[i])
# Set other stuffs
axe.set_ylim(top=60)
axe.set_xlabel(x_label, fontsize=18)
axe.set_ylabel('Throughput\n(K txs/15 secs)', fontsize=18)
axe.tick_params(axis='both', which='both', labelsize=15)
# Legend
axe.legend(line_labels, loc='upper center', bbox_to_anchor=(0.45, 1 + up_shfit), \
prop={'size': 18}, ncol=3, frameon=False)
# Output to a PDF file
fig.savefig('fig-example.pdf', dpi=300, bbox_inches='tight')But it is much easier to draw the same figure using my wrapping library.
This library supports three types of plots:
- line plots:
lines_from_csv(filename, figsize=(-1, -1)): FigureBuilder - stack plots:
stacks_from_csv(filename, figsize=(-1, -1)): FigureBuilder - group-bar plots:
group_bars_from_csv(filename, figsize=(-1, -1)): FigureBuilder
You must provide your data in a CSV file and feed the file path to the above APIs. Here is an example of a CSV data file:
Emulation Time (Hours),Range Partition,Clay,LEAP
0.5,361.117,306.551,441.801
1,433.808,369.98,523.353
1.5,378.642,348.862,468.257
2,409.599,291.14,483.316
2.5,414.794,277.133,534.468
3,415.857,356.452,496.93By calling the above APIs, you will get an instance of FigureBuilder.
After having an instance of FigureBuilder, you can then apply modifications to your plot. Note that nothing shows before you call draw(). Here are the modifcations we support:
- Set X labels:
x_label(label_name): FigureBuilder - Set the size of X labels:
x_label_size(size): FigureBuilder - Set Y labels:
y_label(label_name): FigureBuilder - Set the size of Y labels:
y_label_size(size): FigureBuilder - Set the labels for data:
data_labels(label_names): FigureBuilder - Set the labels for groups (only works for group-bar plots):
group_labels(label_names): FigureBuilder - Set the size of the legend:
legend_size(size): FigureBuilder - Set the number of columns in the legend:
legend_ncol(ncol): FigureBuilder - Set the ticks shown on the X axis:
x_ticks(values): FigureBuilder - Set the size of ticks:
tick_size(size): FigureBuilder - Set the size of labels:
label_size(size): FigureBuilder - Set the minimal value of the X axis:
x_min(val): FigureBuilder - Set the maximal value of the X axis:
x_max(val): FigureBuilder - Set the minimal value of the Y axis:
y_min(val): FigureBuilder - Set the maximal value of the Y axis:
y_max(val): FigureBuilder - Set the scale of the X axis:
x_scale(val): FigureBuilder - Set the scale of the Y axis:
y_scale(val): FigureBuilder - Show the legend:
show_legend(): FigureBuilder - Pull the legend out from the plot:
legend_out(): FigureBuilder - Set the markers on lines (only works for line plots):
markers(markers): FigureBuilder - Set the hatches of bars (only works for bar and group-bar plots):
bar_hatches(hatches): FigureBuilder - Set the colors of edges:
edge_colors(edge_colors): FigureBuilder - Set the colors of lines/bars/group bars:
colors(colors): FigureBuilder - Set the styles of lines (only works for line plots):
line_styles(line_styles): FigureBuilder - Add a vertical line:
add_vline(x, color='black', linestyle='-'): FigureBuilder
- Call
draw()to show the results of your plot on Jupyter Notebooks - Call
save_as_pdf(filename)to save the plot as a PDF file. Note thatdraw()must be called before this.
