diff --git a/plot-packaging-backends.py b/plot-packaging-backends.py index c441da0e504c0cd5426de1449005e6ed072773b0..2f8c974e7431797b6304b6311825a2e3c27eb80f 100644 --- a/plot-packaging-backends.py +++ b/plot-packaging-backends.py @@ -11,19 +11,29 @@ import sqlite3 import matplotlib.pyplot as plt BACKEND_PATH = Path("~/Progs/python/duckdb/pyproject_backends.db") -QUERY = "SELECT * FROM backends" + +QUERY_COUNT = "SELECT COUNT(*) AS nb FROM backends WHERE backend IS NOT NULL;" + +# QUERY = "SELECT backend, COUNT(backend) AS nb FROM backends WHERE backend IS NOT NULL GROUP BY backend;" + +QUERY = """SELECT backend, COUNT(backend) AS nb +FROM backends +WHERE backend IS NOT NULL +GROUP BY backend +HAVING COUNT(backend) > 5; +""" if __name__ == "__main__": cnx = sqlite3.connect(f"file:{str(BACKEND_PATH.expanduser())}?mode=ro") cnx.row_factory = sqlite3.Row cur = cnx.cursor() - cur.execute("SELECT COUNT(*) AS nb FROM backends WHERE backend IS NOT NULL;") + cur.execute(QUERY_COUNT) r = cur.fetchone() backends_total = r['nb'] - cur.execute("SELECT backend, COUNT(backend) AS nb FROM backends WHERE backend IS NOT NULL GROUP BY backend;") + cur.execute(QUERY) r = cur.fetchall() @@ -32,12 +42,12 @@ if __name__ == "__main__": cnx.close() - fig = plt.figure(num='Backends on PyPI', figsize=(12,8)) + fig = plt.figure(num='Backends on PyPI', figsize=(12,8), dpi=600) ax = fig.add_subplot(1, 1, 1) bars = ax.bar(backends, backend_nb, color=['blue' if n > 500 else 'cyan' for n in backend_nb]) - ax.set_title(f'{backends_total} backends declared in pyproject.toml on PyPI (2018-2023)') + ax.set_title(f'{backends_total} backends declared in pyproject.toml on PyPI (2018-2023), removing nb < 5, log scale') ax.set_xlabel("Backend") ax.set_ylabel("Times declared") @@ -55,7 +65,7 @@ if __name__ == "__main__": ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 0.5, str(nb), ha='center', va='bottom') # Set logarithmic scale on y-axis - ax.set_yscale('log') + # ax.set_yscale('log') # Color x-axis labels based on the condition for label, n in zip(ax.get_xticklabels(), backend_nb): @@ -63,8 +73,8 @@ if __name__ == "__main__": label.set_color('blue') # Adjust layout to prevent clipping of rotated labels - # plt.tight_layout() + plt.tight_layout() #plt.show() - plt.savefig("python-backends-2018-2023.png", dpi=600) + plt.savefig("python-backends-2018-2023.png") diff --git a/python-backends-2018-2023-log-scale.png b/python-backends-2018-2023-log-scale.png index 85c5c7ea95968132d6d9a930a5b69348d6ff5927..6dfda114ccc6842609bfbb972378ea785dc429e1 100644 Binary files a/python-backends-2018-2023-log-scale.png and b/python-backends-2018-2023-log-scale.png differ diff --git a/python-backends-2018-2023.png b/python-backends-2018-2023.png index 08df20349101c9595df27f99850082d2e6101a5e..8a32afe0b56e572c707af336c5a011ee79d9d4ed 100644 Binary files a/python-backends-2018-2023.png and b/python-backends-2018-2023.png differ