Make B/W SVG charts with matplotlib

note, Aug 1, 2023 on Mitja Felicijan's blog

Install pip requirements.

pip install matplotlib
+pip install pandas
+

Example of data being used.

Epoch,Connect (NLB),Processing (NLB),Waiting (NLB),Total (NLB),Connect (ALB),Processing (ALB),Waiting (ALB),Total (ALB)
+1,57.7,315.7,309.4,321.6,9,104.4,98.3,105.7
+2,121.9,114.4,100.3,176.9,5.8,99.1,97.1,101.1
+3,5.3,229.4,231.2,231.4,14.2,83,69.4,87.9
+4,4.2,134.5,112.2,135.3,5.3,132.4,105.5,134.1
+5,5.8,247.4,246.8,248.1,6,74.3,70.2,75.5
+6,9.9,122.9,100.6,122.7,7.5,241.1,79.3,242.3
+7,6.1,170.2,106.4,170.5,7.2,382.4,375.1,383.8
+8,6.6,194.3,201.4,195.5,7.1,130.9,104.8,132.6
+9,6.4,146.1,122.3,147.7,9.4,95.6,74,96.4
+

In the code you can use df as dataframes and use the headers like df["Epoch"]. +This is how you get a column data with pandas.

The Python code responsible for generating a chart:

import csv
+import sys
+
+import matplotlib.pyplot as plt
+import pandas as pd
+
+# Read the data
+df = pd.read_csv("data.csv")
+
+# Settings
+plt.title("Connect median NLB vs ALB")
+plt.tight_layout(pad=2)
+fig = plt.gcf()
+fig.set_size_inches(10, 4)
+
+# Plotting
+plt.plot(df["Epoch"], df["Connect (ALB)"], label = "ALB", color="black", linestyle="-")
+plt.plot(df["Epoch"], df["Connect (NLB)"], label = "NLB", color="black", linestyle="--")
+
+# Adding x and y axis labels
+plt.xlabel("Epoch", fontstyle="italic")
+plt.ylabel("Median value (ms)", fontstyle="italic")
+
+# Legend
+legend = plt.legend()
+legend.get_frame().set_linewidth(0)
+
+# Export as SVG
+plt.savefig("plot.svg", format="svg")
+
SVG Chart

The image above is SVG and you can zoom in and out and check that the image is vector.