From 35ec645cbc573fd0f5d5253baf5fe071c1ca0e33 Mon Sep 17 00:00:00 2001 From: Ricardo_T8 Date: Wed, 30 Jul 2025 14:29:43 +0800 Subject: [PATCH 1/6] docs(announce): change default content of main.html --- overrides/main.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overrides/main.html b/overrides/main.html index 4b016e2..8701578 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -1,5 +1,5 @@ {% extends "base.html" %} {% block announce %} - 📢 Announcement Bar. + 📢 公告栏。Announcement Bar. {% endblock %} \ No newline at end of file From 209b580b5fdae55d446446831ade2d6ee4eedfc9 Mon Sep 17 00:00:00 2001 From: Ricardo_T8 Date: Wed, 30 Jul 2025 14:31:28 +0800 Subject: [PATCH 2/6] docs(bar): add usage example for `color_alpha` --- docs/usage/single_group.md | 1 + .../single_group_files/single_group_12_0.png | Bin 9963 -> 10254 bytes 2 files changed, 1 insertion(+) diff --git a/docs/usage/single_group.md b/docs/usage/single_group.md index c6c4ef0..2eb5003 100644 --- a/docs/usage/single_group.md +++ b/docs/usage/single_group.md @@ -120,6 +120,7 @@ plot_one_group_bar_figure( width=0.5, dots_size=15, colors=["#4573a5", "orange"], + color_alpha=0.7, errorbar_type="sd", edgecolor="r", ) diff --git a/docs/usage/single_group_files/single_group_12_0.png b/docs/usage/single_group_files/single_group_12_0.png index 4abf2cc4a9c3e1615af16a5af5d097c4be961cbd..8f0d0ddce43431cf5d3a3aded2dc706b34fc2747 100644 GIT binary patch literal 10254 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 V*_5*00!Q;8YCwB`R(KNn{{TIKWa9t; literal 9963 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 Oh^DFzyh_D7{C@#I#+h~i From 80f7ded9f4dfe67200644f0f6aadcd49a1ae0181 Mon Sep 17 00:00:00 2001 From: Ricardo_T8 Date: Wed, 30 Jul 2025 14:33:40 +0800 Subject: [PATCH 3/6] feat(bar): support color transparency adjustment via `color_alpha` argument --- src/plotfig/bar.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plotfig/bar.py b/src/plotfig/bar.py index c46d351..a2174f5 100644 --- a/src/plotfig/bar.py +++ b/src/plotfig/bar.py @@ -6,7 +6,7 @@ import numpy.typing as npt from matplotlib.axes import Axes from matplotlib.ticker import FuncFormatter, ScalarFormatter -from matplotlib.colors import LinearSegmentedColormap +from matplotlib.colors import LinearSegmentedColormap, to_rgba from matplotlib.patches import Polygon from scipy import stats @@ -225,6 +225,7 @@ def plot_one_group_bar_figure( labels_name: list[str] | None = None, width: Num = 0.5, colors: list[str] | None = None, + color_alpha: Num = 1, edgecolor: str | None = None, gradient_color: bool = False, colors_start=None, @@ -254,6 +255,7 @@ def plot_one_group_bar_figure( labels_name (list[str] | None, optional): 每个数据集对应的标签。默认为 None,使用索引作为标签。 width (Num, optional): 柱子的宽度。默认为 0.5。 colors (list[str] | None, optional): 每个柱子的颜色列表。若为 None,使用默认灰色。 + color_alpha (Num, optional): 颜色透明度,取值范围为 0(完全透明)到 1(完全不透明)。使用 gradient_color 时该参数无效。默认为 1。 edgecolor (str | None, optional): 柱子的边缘颜色。默认为 None,即不特别设置。 gradient_color (bool, optional): 是否为柱子启用渐变色填充。默认为 False。 colors_start (list[str] | None, optional): 渐变色的起始颜色列表。用于 gradient_color=True。 @@ -317,7 +319,7 @@ def plot_one_group_bar_figure( ax.imshow(gradient, aspect="auto", cmap=cmap, extent=extent, zorder=0) else: ax.bar( - x_positions, means, width=width, color=colors, alpha=1, edgecolor=edgecolor + x_positions, means, width=width, color=colors, alpha=color_alpha, edgecolor=edgecolor ) ax.errorbar( @@ -385,6 +387,7 @@ def plot_one_group_violin_figure( ax: Axes | None = None, width: Num = 0.8, colors: list[str] | None = None, + color_alpha: Num = 1, gradient_color: bool = False, colors_start: list[str] | None = None, colors_end: list[str] | None = None, @@ -411,6 +414,7 @@ def plot_one_group_violin_figure( ax (Axes | None, optional): matplotlib 的 Axes 对象,用于绘图。默认为 None,使用当前 Axes。 width (Num, optional): 小提琴图的总宽度。默认为 0.8。 colors (list[str] | None, optional): 每个小提琴的颜色。若为 None,使用默认灰色。 + color_alpha (Num, optional): 颜色透明度,取值范围为 0(完全透明)到 1(完全不透明)。使用 gradient_color 时该参数无效。默认为 1。 gradient_color (bool, optional): 是否启用渐变色填充。默认为 False。 colors_start (list[str] | None, optional): 渐变起始颜色列表,对应每组数据。 colors_end (list[str] | None, optional): 渐变结束颜色列表,对应每组数据。 @@ -438,7 +442,7 @@ def plot_one_group_violin_figure( labels_name = labels_name or [str(i) for i in range(len(data))] colors = colors or ["gray"] * len(data) - def draw_gradient_violin(ax, data, pos, width=width, c1="red", c2="blue"): + def _draw_gradient_violin(ax, data, pos, width=width, c1="red", c2="blue", color_alpha=1): # KDE估计 kde = stats.gaussian_kde(data) buffer = (max(data) - min(data)) / 5 @@ -459,10 +463,12 @@ def draw_gradient_violin(ax, data, pos, width=width, c1="red", c2="blue"): grad_height = 300 gradient = np.linspace(0, 1, grad_width) if c1 == c2: - cmap = LinearSegmentedColormap.from_list("cmap", [c1, c2]) + rgba = to_rgba(c1, alpha=color_alpha) + cmap = LinearSegmentedColormap.from_list("cmap", [rgba, rgba]) + gradient_rgb = plt.get_cmap(cmap)(gradient) else: cmap = LinearSegmentedColormap.from_list("cmap", [c1, "white", c2]) - gradient_rgb = plt.get_cmap(cmap)(gradient)[..., :3] + gradient_rgb = plt.get_cmap(cmap)(gradient)[..., :3] gradient_img = np.tile(gradient_rgb, (grad_height, 1, 1)) # 显示图像并裁剪成violin形状 im = ax.imshow( @@ -508,7 +514,7 @@ def draw_gradient_violin(ax, data, pos, width=width, c1="red", c2="blue"): c2 = colors_end[i] else: c1 = c2 = colors[i] - ymax, ymin = draw_gradient_violin(ax, d, pos=i, c1=c1, c2=c2) + ymax, ymin = _draw_gradient_violin(ax, d, pos=i, c1=c1, c2=c2, color_alpha=color_alpha) ymax_lst.append(ymax) ymin_lst.append(ymin) ymax = max(ymax_lst) From e950ed474885a97fa9b35c305d611274163cfe1c Mon Sep 17 00:00:00 2001 From: Ricardo_T8 Date: Wed, 30 Jul 2025 23:30:28 +0800 Subject: [PATCH 4/6] ci(bump): auto bump version on push to main Add a GitHub Actions workflow `version_bump.yml` that automatically runs `cz bump` whenever the main branch is pushed. This includes generating a new version number, updating the changelog, creating a commit and tag. The workflow also pushes the resulting commit and tag back to the main branch, enabling a fully automated versioning process. --- .github/workflows/version_bump.yml | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/version_bump.yml diff --git a/.github/workflows/version_bump.yml b/.github/workflows/version_bump.yml new file mode 100644 index 0000000..e51dbae --- /dev/null +++ b/.github/workflows/version_bump.yml @@ -0,0 +1,39 @@ +name: Version Bump + +on: + push: + branches: + - main + +permissions: + contents: write + +jobs: + bump-version: + if: "!contains(github.event.head_commit.message, 'bump:')" + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.x + + - name: Install dependencies + run: | + pip install uv + uv tool install commitizen + + - name: Run cz bump + run: | + cz bump --yes --changelog + + - name: Push bump commit and tag + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git push origin main + git push oigin --tags From 34d608bc900357d93ceed9586d819bc840c669a8 Mon Sep 17 00:00:00 2001 From: Ricardo_T8 Date: Thu, 31 Jul 2025 00:35:52 +0800 Subject: [PATCH 5/6] ci(bump): remove the version_bump.yml workflow file --- .github/workflows/version_bump.yml | 39 ------------------------------ 1 file changed, 39 deletions(-) delete mode 100644 .github/workflows/version_bump.yml diff --git a/.github/workflows/version_bump.yml b/.github/workflows/version_bump.yml deleted file mode 100644 index e51dbae..0000000 --- a/.github/workflows/version_bump.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Version Bump - -on: - push: - branches: - - main - -permissions: - contents: write - -jobs: - bump-version: - if: "!contains(github.event.head_commit.message, 'bump:')" - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: 3.x - - - name: Install dependencies - run: | - pip install uv - uv tool install commitizen - - - name: Run cz bump - run: | - cz bump --yes --changelog - - - name: Push bump commit and tag - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git push origin main - git push oigin --tags From a7d21051d1764963c48228e1b8cb69aff94da2be Mon Sep 17 00:00:00 2001 From: Ricardo_T8 Date: Thu, 31 Jul 2025 00:37:02 +0800 Subject: [PATCH 6/6] ci(bump): create release.yml and the necessary files --- .github/workflows/release.yml | 22 ++++++++++++++++++++++ .release-please-manifest.json | 3 +++ release-please-config.json | 10 ++++++++++ 3 files changed, 35 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100644 .release-please-manifest.json create mode 100644 release-please-config.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..1c4b0af --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,22 @@ +on: + workflow_dispatch: # makes it possible to run the workflow manually + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + +name: release-please + +jobs: + release-please: + runs-on: ubuntu-latest + steps: + - uses: googleapis/release-please-action@v4.2.0 + id: release + with: + token: ${{ secrets.RELEASE_PLEASE_ACCESS_TOKEN }} + config-file: release-please-config.json + manifest-file: .release-please-manifest.json \ No newline at end of file diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..8022176 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.3.3" +} \ No newline at end of file diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..e76358e --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,10 @@ +{ + "packages": { + ".": { + "release-type": "python", + "include-component-in-tag": false, + "skip-tag-prefix": true + } + }, + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json" +} \ No newline at end of file