import sqlite3 import pandas as pd import plotnine as p9 import matplotlib.pyplot as plt DB_FILENAME = "simple_geometry_convergence.db" def plot_it(): with sqlite3.connect(DB_FILENAME) as conn: data = pd.read_sql("SELECT * FROM data", conn) data["Refinements"] = data["resolution"].astype("category") for error_field in ["surface_area_relative_error", "volume_relative_error"]: data[error_field] = data[error_field].abs() original_data = data data = pd.melt( data, id_vars=["dx", "Refinements"], value_vars=["surface_area_relative_error", "volume_relative_error"], value_name="Relative Error", var_name="Measurement", ) data["Measurement"] = data["Measurement"].apply( lambda name: { "surface_area_relative_error": "Surface Area", "volume_relative_error": "Volume", }[name] ) print( p9.ggplot(data, p9.aes(color="Refinements", x="dx", y="Relative Error"))#, linetype="Measurement")) + p9.geom_line(size=1.2) + p9.scale_x_log10() + p9.scale_y_log10() + p9.facet_wrap("Measurement") + p9.theme(subplots_adjust={'right': 0.7}) ) print( p9.ggplot(original_data, p9.aes(color="Refinements", x="runtime", y="volume_relative_error")) + p9.geom_line(size=1.2) + p9.geom_point() + p9.scale_x_log10() + p9.scale_y_log10() + p9.theme(subplots_adjust={'right': 0.8}) ) import matplotlib.pyplot as plt fig = plt.figure() axes = [] all_res = [2, 4, 6, 8, 10] colors = ["blue", "red", "darkgreen", "brown", "black"] for i, (res, color) in enumerate(zip(all_res, colors)): axis = fig.add_subplot(5, 1, i + 1) axis.set_xscale("log") axis.set_yscale("log") for j, res2 in enumerate(all_res): my_data = original_data[original_data["resolution"] == res2].sort_values(by="runtime") if j != i: axis.plot(my_data["runtime"], my_data["volume_relative_error"], color='lightgray') my_data = original_data[original_data["resolution"] == res].sort_values(by="runtime") axis.plot(my_data["runtime"], my_data["volume_relative_error"], color=color, label=f"{res} VRs") axis.legend() if i == 2: axis.set_ylabel("Relative volume error") if i == len(all_res) - 1: axis.set_xlabel("Runtime (s)") else: axis.set_xticks([]) axis.set_yticks([1e-5, 1e-3, 1e-1]) #axis.set_ylabel(f"{res} VRs") axes.append(axis) plt.show() if __name__ == "__main__": plot_it()