From 55df83b73e0b497cb103d967aded09fee10c0a06 Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Wed, 16 Sep 2026 23:18:43 -0400 Subject: [PATCH 1/2] Use the Titanic dataset for every README example PR #68 rewrote the quickstart around the people aboard the Titanic but left the six numbered examples below it on their original data: Cat1/Cat2/Cat3, invented vehicle sales numbers, and Factory A/B/C. So the page introduced a real dataset and then dropped it, and a reader following along had to reorient five times. The Titanic figures turned out to cover every example, including the two with awkward requirements: - Auto-sizing needs values small enough to be block counts. The children aboard, 6, 24 and 79, total 109, so one block really is one child. - The DataFrame example needs a genuine two-dimensional table. The inquiry table is already class by group, so first/second/third class against men/women/children drops straight in, and sizing each subplot by its own class shows that third class carried more people than first and second combined. The prose now quotes the real scaled numbers, 7, 6, 16 and 20 for the value-scaling example, taken from the rendered chart rather than computed by hand. Source, added once at the end of the section: the British Board of Trade inquiry of 1912. --- README.md | 92 +- examples/generate_plots.py | 119 +- examples/readme/absolute_block_numbers.svg | 1524 +++++--- examples/readme/basic.svg | 112 +- examples/readme/existed_axis.svg | 356 +- examples/readme/fontawesome.svg | 1457 +++----- examples/readme/multiple_plots.svg | 3841 ++++++++++---------- examples/readme/title_and_legend.svg | 1966 ++++------ 8 files changed, 4649 insertions(+), 4818 deletions(-) diff --git a/README.md b/README.md index 6783fc9..b3fd21b 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,8 @@ existing layout. ## Examples +Every example below uses the same dataset as the quickstart: the people aboard the Titanic. + ### 1. Value Scaling ```python @@ -123,10 +125,10 @@ from pywaffle import Waffle ```python fig = plt.figure( - FigureClass=Waffle, - rows=5, - columns=10, - values=[48, 46, 6], + FigureClass=Waffle, + rows=5, + columns=10, + values=[325, 285, 706, 885], figsize=(5, 3) ) plt.show() @@ -134,7 +136,7 @@ plt.show() ![basic](examples/readme/basic.svg) -The values are automatically scaled to 24, 23 and 3 to fit 5 * 10 chart size. +Those are the first class, second class, third class and crew counts, 2,201 people in all. They are automatically scaled to 7, 6, 16 and 20 to fit the 5 * 10 chart size, so one block stands for about 22 people. `FigureClass` and `figsize` are parameters of `matplotlib.pyplot.figure`, you may find the full parameter list on [matplotlib.pyplot.figure](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.figure.html) function reference. @@ -143,7 +145,7 @@ Other parameters, including `rows`, `columns`, and `values` in this example, are ### 2. Values in dict & Auto-sizing ```python -data = {'Cat1': 10, 'Cat2': 7, 'Cat3': 9} +data = {'First class': 6, 'Second class': 24, 'Third class': 79} fig = plt.figure( FigureClass=Waffle, rows=5, @@ -155,6 +157,8 @@ plt.show() ![Use values in dictionary; use absolute value as block number, without defining columns](examples/readme/absolute_block_numbers.svg) +These are the children aboard, so here one block really is one child. + In this example, only `rows` is specified and `columns` is empty, absolute values in `values` are used as block numbers. Similarly, `rows` could also be optional if `columns` is specified. If `values` is a dict, the keys will be used as labels in the legend. @@ -162,14 +166,15 @@ If `values` is a dict, the keys will be used as labels in the legend. ### 3. More style settings including Legend, Title, Colors, Direction, Arranging Style, etc. ```python -data = {'Car': 58, 'Pickup': 21, 'Truck': 11, 'Motorcycle': 7} +data = {'First class': 325, 'Second class': 285, 'Third class': 706, 'Crew': 885} fig = plt.figure( FigureClass=Waffle, rows=5, + columns=10, values=data, - colors=["#C1D82F", "#00A4E4", "#FBB034", '#6A737B'], - title={'label': 'Vehicle Sales by Vehicle Type', 'loc': 'left'}, - labels=[f"{k} ({v}%)" for k, v in data.items()], + colors=["#c9a227", "#5f8a8b", "#b5653f", "#3d4f5d"], + title={'label': 'Who was aboard the Titanic', 'loc': 'left'}, + labels=[f"{k} ({v})" for k, v in data.items()], legend={'loc': 'lower left', 'bbox_to_anchor': (0, -0.4), 'ncol': len(data), 'framealpha': 0}, starting_location='NW', vertical=True, @@ -192,15 +197,16 @@ You may find more details under [Examples](https://pywaffle.readthedocs.io/en/la ### 4. Plot with Icons - Pictogram Chart ```python -data = {'Car': 58, 'Pickup': 21, 'Truck': 11, 'Motorcycle': 7} +data = {'Men': 1667, 'Women': 425, 'Children': 109} fig = plt.figure( FigureClass=Waffle, rows=5, + columns=10, values=data, - colors=["#c1d82f", "#00a4e4", "#fbb034", '#6a737b'], + colors=["#3d4f5d", "#c9a227", "#b5653f"], legend={'loc': 'upper left', 'bbox_to_anchor': (1, 1)}, - icons=['car-side', 'truck-pickup', 'truck', 'motorcycle'], - font_size=12, + icons=['person', 'person-dress', 'child'], + font_size=18, icon_legend=True ) plt.show() @@ -208,7 +214,9 @@ plt.show() ![Use Font Awesome icons](examples/readme/fontawesome.svg) -PyWaffle supports [Font Awesome](https://fontawesome.com/) icons in the chart. See [Plot with Characters or Icons](https://pywaffle.readthedocs.io/en/latest/examples/plot_with_characters_or_icons.html) for details. +The same 2,201 people, cut by group instead of by class. One figure stands for about 44 of them. + +PyWaffle supports [Font Awesome](https://fontawesome.com/) icons in the chart. Font Awesome is an optional dependency, installed with `pip install "pywaffle[icons]"`. See [Plot with Characters or Icons](https://pywaffle.readthedocs.io/en/latest/examples/plot_with_characters_or_icons.html) for details. ### 5. Plotting on Existed Figure and Axis @@ -224,63 +232,65 @@ Waffle.make_waffle( ax=ax, # pass axis to make_waffle rows=5, columns=10, - values=[30, 16, 4], - title={"label": "Waffle Title", "loc": "left"} + values=[710, 1491], + title={"label": "Survived and lost", "loc": "left"} ) ``` ![Plotting on Existed Figure and Axis](examples/readme/existed_axis.svg) +710 of the 2,201 aboard survived. + ### 6. Multiple Plots in One Chart ```python import pandas as pd data = pd.DataFrame( { - 'labels': ['Car', 'Truck', 'Motorcycle'], - 'Factory A': [32384, 13354, 5245], - 'Factory B': [22147, 6678, 2156], - 'Factory C': [8932, 3879, 896], + 'labels': ['Men', 'Women', 'Children'], + 'First class': [175, 144, 6], + 'Second class': [168, 93, 24], + 'Third class': [462, 165, 79], }, ).set_index('labels') # A glance of the data: -# Factory A Factory B Factory C +# First class Second class Third class # labels -# Car 27384 22147 8932 -# Truck 7354 6678 3879 -# Motorcycle 3245 2156 1196 +# Men 175 168 462 +# Women 144 93 165 +# Children 6 24 79 fig = plt.figure( FigureClass=Waffle, plots={ 311: { - 'values': data['Factory A'] / 1000, # Convert actual number to a reasonable block number - 'labels': [f"{k} ({v})" for k, v in data['Factory A'].items()], + 'values': data['First class'] / 10, # Convert actual number to a reasonable block number + 'labels': [f"{k} ({v})" for k, v in data['First class'].items()], 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 8}, - 'title': {'label': 'Vehicle Production of Factory A', 'loc': 'left', 'fontsize': 12} + 'title': {'label': 'First class', 'loc': 'left', 'fontsize': 12} }, 312: { - 'values': data['Factory B'] / 1000, - 'labels': [f"{k} ({v})" for k, v in data['Factory B'].items()], - 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.2, 1), 'fontsize': 8}, - 'title': {'label': 'Vehicle Production of Factory B', 'loc': 'left', 'fontsize': 12} + 'values': data['Second class'] / 10, + 'labels': [f"{k} ({v})" for k, v in data['Second class'].items()], + 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 8}, + 'title': {'label': 'Second class', 'loc': 'left', 'fontsize': 12} }, 313: { - 'values': data['Factory C'] / 1000, - 'labels': [f"{k} ({v})" for k, v in data['Factory C'].items()], - 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.3, 1), 'fontsize': 8}, - 'title': {'label': 'Vehicle Production of Factory C', 'loc': 'left', 'fontsize': 12} + 'values': data['Third class'] / 10, + 'labels': [f"{k} ({v})" for k, v in data['Third class'].items()], + 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 8}, + 'title': {'label': 'Third class', 'loc': 'left', 'fontsize': 12} }, }, rows=5, # Outside parameter applied to all subplots, same as below cmap_name="Accent", # Change color with cmap - rounding_rule='ceil', # Change rounding rule, so value less than 1000 will still have at least 1 block + rounding_rule='ceil', # Change rounding rule, so a value under 10 still gets at least 1 block figsize=(6, 5) ) -fig.suptitle('Vehicle Production by Vehicle Type', fontsize=14, fontweight='bold') -fig.supxlabel('1 block = 1000 vehicles', fontsize=8, x=0.14) +fig.suptitle('Titanic passengers by class', fontsize=14, fontweight='bold') +fig.supxlabel('1 block = 10 people', fontsize=8, x=0.14) fig.set_facecolor('#EEEDE7') plt.show() @@ -288,6 +298,10 @@ plt.show() ![Multiple plots](examples/readme/multiple_plots.svg) +Each subplot is sized by its own class, so the widths show at a glance that third class carried more people than first and second combined. + +> Figures throughout from the British Board of Trade inquiry of 1912: 2,201 aboard, 710 saved, 1,491 lost. Tabulated at [Sinking of the Titanic](https://en.wikipedia.org/wiki/Sinking_of_the_Titanic#Casualties_and_survivors). + ## Demo Wanna try it yourself? There is [Online Demo](https://mybinder.org/v2/gh/gyli/PyWaffle/master?filepath=demo.ipynb)! diff --git a/examples/generate_plots.py b/examples/generate_plots.py index 7e61c4e..b1fd6cc 100644 --- a/examples/generate_plots.py +++ b/examples/generate_plots.py @@ -8,122 +8,131 @@ from pywaffle import waffle_chart from pywaffle.waffle import Waffle - # For README +# +# The README uses one dataset throughout: the people aboard the Titanic. Figures from the +# British Board of Trade inquiry of 1912, 2,201 aboard, 710 saved, 1,491 lost, tabulated at +# https://en.wikipedia.org/wiki/Sinking_of_the_Titanic#Casualties_and_survivors +# A 1912 inquiry cannot go out of date, so these never need refreshing. readme_image_folder = "examples/readme/" -# Basic -fig = plt.figure(FigureClass=Waffle, rows=5, columns=10, values=[48, 46, 6], figsize=(5, 3)) +# 1. Value scaling: 2,201 people scaled onto a 5 x 10 grid +fig = plt.figure( + FigureClass=Waffle, + rows=5, + columns=10, + values=[325, 285, 706, 885], + figsize=(5, 3), +) fig.savefig(readme_image_folder + "basic.svg", bbox_inches="tight") plt.close(fig) -# Use values in dictionary; use absolute value as block number, without defining columns -data = {'Cat1': 40, 'Cat2': 27, 'Cat3': 9} +# 2. Values in a dict, and auto-sizing: one block per child aboard +data = {"First class": 6, "Second class": 24, "Third class": 79} fig = plt.figure( FigureClass=Waffle, rows=5, values=data, - legend={'loc': 'upper left', 'bbox_to_anchor': (1.05, 1)} + legend={"loc": "upper left", "bbox_to_anchor": (1.05, 1)}, ) fig.savefig(readme_image_folder + "absolute_block_numbers.svg", bbox_inches="tight") plt.close(fig) -# Add title, legend, background color, block color, direction and style -data = {'Car': 58, 'Pickup': 21, 'Truck': 11, 'Motorcycle': 7} +# 3. Colours, title, legend, direction and arranging style +data = {"First class": 325, "Second class": 285, "Third class": 706, "Crew": 885} fig = plt.figure( FigureClass=Waffle, rows=5, + columns=10, values=data, - colors=["#C1D82F", "#00A4E4", "#FBB034", '#6A737B'], - title={'label': 'Vehicle Sales by Vehicle Type', 'loc': 'left'}, - labels=[f"{k} ({v}%)" for k, v in data.items()], - legend={'loc': 'lower left', 'bbox_to_anchor': (0, -0.4), 'ncol': len(data), 'framealpha': 0}, - starting_location='NW', + colors=["#c9a227", "#5f8a8b", "#b5653f", "#3d4f5d"], + title={"label": "Who was aboard the Titanic", "loc": "left"}, + labels=[f"{k} ({v})" for k, v in data.items()], + legend={"loc": "lower left", "bbox_to_anchor": (0, -0.4), "ncol": len(data), "framealpha": 0}, + starting_location="NW", vertical=True, - block_arranging_style='snake' + block_arranging_style="snake", ) +fig.set_facecolor("#EEEEEE") fig.savefig(readme_image_folder + "title_and_legend.svg", bbox_inches="tight", facecolor="#EEEEEE") plt.close(fig) -# Use icons from Font Awesome -data = {'Car': 58, 'Pickup': 21, 'Truck': 11, 'Motorcycle': 7} +# 4. Pictogram: the same people, cut by group +data = {"Men": 1667, "Women": 425, "Children": 109} fig = plt.figure( FigureClass=Waffle, rows=5, + columns=10, values=data, - colors=["#c1d82f", "#00a4e4", "#fbb034", '#6a737b'], - legend={'loc': 'upper left', 'bbox_to_anchor': (1, 1)}, - icons=['car-side', 'truck-pickup', 'truck', 'motorcycle'], - font_size=12, - icon_legend=True + colors=["#3d4f5d", "#c9a227", "#b5653f"], + legend={"loc": "upper left", "bbox_to_anchor": (1, 1)}, + icons=["person", "person-dress", "child"], + font_size=18, + icon_legend=True, ) fig.savefig(readme_image_folder + "fontawesome.svg", bbox_inches="tight") plt.close(fig) -# plotting on existed figure +# 5. Drawing onto an axis that already exists fig = plt.figure() ax = fig.add_subplot(111) - -# Modify existed axis ax.set_title("Axis Title") ax.set_aspect(aspect="equal") - Waffle.make_waffle( - ax=ax, # pass axis to make_waffle + ax=ax, rows=5, columns=10, - values=[30, 16, 4], - title={"label": "Waffle Title", "loc": "left"} + values=[710, 1491], + title={"label": "Survived and lost", "loc": "left"}, ) fig.savefig(readme_image_folder + "existed_axis.svg", bbox_inches="tight") plt.close(fig) -# Multiple Plots +# 6. One subplot per passenger class, from a DataFrame import pandas as pd data = pd.DataFrame( { - 'labels': ['Car', 'Truck', 'Motorcycle'], - 'Factory A': [32384, 13354, 5245], - 'Factory B': [22147, 6678, 2156], - 'Factory C': [8932, 3879, 896], + "labels": ["Men", "Women", "Children"], + "First class": [175, 144, 6], + "Second class": [168, 93, 24], + "Third class": [462, 165, 79], }, -).set_index('labels') +).set_index("labels") fig = plt.figure( FigureClass=Waffle, plots={ 311: { - 'values': data['Factory A'] / 1000, # Convert actual number to a reasonable block number - 'labels': [f"{k} ({v})" for k, v in data['Factory A'].items()], - 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 8}, - 'title': {'label': 'Vehicle Production of Factory A', 'loc': 'left', 'fontsize': 12} + "values": data["First class"] / 10, + "labels": [f"{k} ({v})" for k, v in data["First class"].items()], + "legend": {"loc": "upper left", "bbox_to_anchor": (1.05, 1), "fontsize": 8}, + "title": {"label": "First class", "loc": "left", "fontsize": 12}, }, 312: { - 'values': data['Factory B'] / 1000, - 'labels': [f"{k} ({v})" for k, v in data['Factory B'].items()], - 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.2, 1), 'fontsize': 8}, - 'title': {'label': 'Vehicle Production of Factory B', 'loc': 'left', 'fontsize': 12} + "values": data["Second class"] / 10, + "labels": [f"{k} ({v})" for k, v in data["Second class"].items()], + "legend": {"loc": "upper left", "bbox_to_anchor": (1.05, 1), "fontsize": 8}, + "title": {"label": "Second class", "loc": "left", "fontsize": 12}, }, 313: { - 'values': data['Factory C'] / 1000, - 'labels': [f"{k} ({v})" for k, v in data['Factory C'].items()], - 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.3, 1), 'fontsize': 8}, - 'title': {'label': 'Vehicle Production of Factory C', 'loc': 'left', 'fontsize': 12} + "values": data["Third class"] / 10, + "labels": [f"{k} ({v})" for k, v in data["Third class"].items()], + "legend": {"loc": "upper left", "bbox_to_anchor": (1.05, 1), "fontsize": 8}, + "title": {"label": "Third class", "loc": "left", "fontsize": 12}, }, }, - rows=5, # Outside parameter applied to all subplots, same as below - cmap_name="Accent", # Change color with cmap - rounding_rule='ceil', # Change rounding rule, so value less than 1000 will still have at least 1 block - figsize=(6, 5) + rows=5, + cmap_name="Accent", + rounding_rule="ceil", + figsize=(6, 5), ) -fig.suptitle('Vehicle Production by Vehicle Type', fontsize=14, fontweight='bold') -fig.supxlabel('1 block = 1000 vehicles', fontsize=8, x=0.14) -fig.set_facecolor('#EEEDE7') -fig.savefig(readme_image_folder + "multiple_plots.svg") +fig.suptitle("Titanic passengers by class", fontsize=14, fontweight="bold") +fig.supxlabel("1 block = 10 people", fontsize=8, x=0.14) +fig.set_facecolor("#EEEDE7") +fig.savefig(readme_image_folder + "multiple_plots.svg", bbox_inches="tight", facecolor="#EEEDE7") plt.close(fig) -# For documents doc_examples_image_folder = "examples/docs/" # Formats of values diff --git a/examples/readme/absolute_block_numbers.svg b/examples/readme/absolute_block_numbers.svg index 8e6b54c..8c09f40 100644 --- a/examples/readme/absolute_block_numbers.svg +++ b/examples/readme/absolute_block_numbers.svg @@ -1,16 +1,16 @@ - + - 2022-06-07T23:10:15.338889 + 2026-09-16T23:18:41.656592 image/svg+xml - Matplotlib v3.5.2, https://matplotlib.org/ + Matplotlib v3.11.2, https://matplotlib.org/ @@ -21,670 +21,1037 @@ - - +" clip-path="url(#pf912d74157)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> - +" clip-path="url(#pf912d74157)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + - - + + - + + - + + + + + - - - - - - + + + + + + + + + + + - - + - - + + - + + + + - - - - + + + + + + + + + + + + - - + - - + + - + - - - - + + + + + + + + + + + - - + + diff --git a/examples/readme/basic.svg b/examples/readme/basic.svg index 6f6dcd7..dde01c4 100644 --- a/examples/readme/basic.svg +++ b/examples/readme/basic.svg @@ -6,11 +6,11 @@ - 2022-06-07T23:10:15.259282 + 2026-09-16T23:18:41.641070 image/svg+xml - Matplotlib v3.5.2, https://matplotlib.org/ + Matplotlib v3.11.2, https://matplotlib.org/ @@ -35,7 +35,7 @@ L 35.877966 173.532203 L 35.877966 144.854237 L 7.2 144.854237 z -" clip-path="url(#p307c3f9e96)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #8da0cb; stroke: #8da0cb; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> - - - +" clip-path="url(#p5aa605e0da)" style="fill: #e78ac3; stroke: #e78ac3; stroke-linejoin: miter"/> - + diff --git a/examples/readme/existed_axis.svg b/examples/readme/existed_axis.svg index d6fbe57..323909b 100644 --- a/examples/readme/existed_axis.svg +++ b/examples/readme/existed_axis.svg @@ -6,11 +6,11 @@ - 2022-06-07T23:10:15.653415 + 2026-09-16T23:18:41.726454 image/svg+xml - Matplotlib v3.5.2, https://matplotlib.org/ + Matplotlib v3.11.2, https://matplotlib.org/ @@ -35,7 +35,7 @@ L 37.464407 197.851684 L 37.464407 167.587278 L 7.2 167.587278 z -" clip-path="url(#pe4809ad754)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #66c2a5; stroke: #66c2a5; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> +" clip-path="url(#p2ef16c6c95)" style="fill: #fc8d62; stroke: #fc8d62; stroke-linejoin: miter"/> - + - - - - - - + - - - - - - - - - - - - - + + + + + + + + + + - - + + - - + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + diff --git a/examples/readme/fontawesome.svg b/examples/readme/fontawesome.svg index 2201dea..7bbb98f 100644 --- a/examples/readme/fontawesome.svg +++ b/examples/readme/fontawesome.svg @@ -1,16 +1,16 @@ - + - 2022-06-07T23:10:15.559260 + 2026-09-16T23:18:41.710597 image/svg+xml - Matplotlib v3.5.2, https://matplotlib.org/ + Matplotlib v3.11.2, https://matplotlib.org/ @@ -21,8 +21,8 @@ - - - + + - - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - + + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + - - + - + - - - - - - - - - - + + + + + + + + diff --git a/examples/readme/multiple_plots.svg b/examples/readme/multiple_plots.svg index 0175783..62ba4f6 100644 --- a/examples/readme/multiple_plots.svg +++ b/examples/readme/multiple_plots.svg @@ -1,16 +1,16 @@ - + - 2022-06-07T23:10:16.073655 + 2026-09-16T23:18:41.868385 image/svg+xml - Matplotlib v3.5.2, https://matplotlib.org/ + Matplotlib v3.11.2, https://matplotlib.org/ @@ -21,936 +21,1189 @@ - - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - +" clip-path="url(#pfbd89ab45a)" style="fill: #fdc086; stroke: #fdc086; stroke-linejoin: miter"/> - - + + + + - - - + - - - + +" transform="scale(0.015625)"/> + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + +" transform="scale(0.015625)"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - +" clip-path="url(#pf64334fd33)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - - - - - - - - - + - - + + + - + + + - + + + + + + - + + + + + + - + + + - + + + - + + + - + + + - + + + - + + + + + + - + + + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - + + - - + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + - - + - - - + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + - - + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - - + - - - + + + - - - - - - + + + - - - - - - - - - - - - - - - - + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #7fc97f; stroke: #7fc97f; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + +" clip-path="url(#p36ebe2adac)" style="fill: #beaed4; stroke: #beaed4; stroke-linejoin: miter"/> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" clip-path="url(#p36ebe2adac)" style="fill: #fdc086; stroke: #fdc086; stroke-linejoin: miter"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + - - + - - - - - - - - - - - - - - - + + + + + + + + + + + - - + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - - + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + diff --git a/examples/readme/title_and_legend.svg b/examples/readme/title_and_legend.svg index 409d952..5d276f1 100644 --- a/examples/readme/title_and_legend.svg +++ b/examples/readme/title_and_legend.svg @@ -1,16 +1,16 @@ - + - 2022-06-07T23:10:15.435801 + 2026-09-16T23:18:41.678768 image/svg+xml - Matplotlib v3.5.2, https://matplotlib.org/ + Matplotlib v3.11.2, https://matplotlib.org/ @@ -21,830 +21,427 @@ - - +" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +" clip-path="url(#p6dac1fe10b)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - - + + - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + +" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - - - + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + - - - - - - - - - - - - - - - - - - - +" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - + + From 4dd06d20a957d1968dee5aeed2578d0d98dab28f Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Wed, 16 Sep 2026 23:22:43 -0400 Subject: [PATCH 2/2] Drop the snake arrangement from README example 3 With four categories on a 5 x 10 grid, snake reversed every other row, so Second class came out as two disconnected patches, top right and then the right of row two, with Third class running underneath on the left. Reading left to right you met gold, teal, terracotta, then teal again, which looks like the data is out of order rather than like a deliberate layout. Measured it rather than judging by eye: reading the grid top left to bottom right, the snake version broke the four categories into seven colour runs. Without it, each category is a single run and the chart reads in legend order, the way a line of text does. starting_location="NW" and vertical=True stay, so the example still shows a layout that differs from the default. block_arranging_style keeps its paragraph and its link, since it is worth knowing about; it just no longer has to make this particular chart confusing to earn its place. --- README.md | 9 +- examples/generate_plots.py | 1 - examples/readme/title_and_legend.svg | 258 +++++++++++++-------------- 3 files changed, 134 insertions(+), 134 deletions(-) diff --git a/README.md b/README.md index b3fd21b..4365ce9 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ In this example, only `rows` is specified and `columns` is empty, absolute value If `values` is a dict, the keys will be used as labels in the legend. -### 3. More style settings including Legend, Title, Colors, Direction, Arranging Style, etc. +### 3. More style settings including Legend, Title, Colors, Direction, etc. ```python data = {'First class': 325, 'Second class': 285, 'Third class': 706, 'Crew': 885} @@ -177,8 +177,7 @@ fig = plt.figure( labels=[f"{k} ({v})" for k, v in data.items()], legend={'loc': 'lower left', 'bbox_to_anchor': (0, -0.4), 'ncol': len(data), 'framealpha': 0}, starting_location='NW', - vertical=True, - block_arranging_style='snake' + vertical=True ) fig.set_facecolor('#EEEEEE') plt.show() @@ -190,7 +189,9 @@ Parameter `colors` allows you to change the block color, and it accepts a list o Parameter `title` and `legend` accept the same parameters as in Matplotlib, [matplotlib.pyplot.title](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.title.html) and [matplotlib.pyplot.legend](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html). -Parameter `starting_location`, `vertical`, and `block_arranging_style` controls [Where to Start First Block](https://pywaffle.readthedocs.io/en/latest/examples/block_shape_spacing_location_direction_and_style.html#where-to-start-first-block), [Plotting Direction](https://pywaffle.readthedocs.io/en/latest/examples/block_shape_spacing_location_direction_and_style.html#plotting-direction), and [Where to Start Each Category](https://pywaffle.readthedocs.io/en/latest/examples/block_shape_spacing_location_direction_and_style.html#where-to-start-each-category). +Parameter `starting_location` and `vertical` control [Where to Start First Block](https://pywaffle.readthedocs.io/en/latest/examples/block_shape_spacing_location_direction_and_style.html#where-to-start-first-block) and [Plotting Direction](https://pywaffle.readthedocs.io/en/latest/examples/block_shape_spacing_location_direction_and_style.html#plotting-direction). Together they fill from the top left along each row, so the four groups read in order, the way a line of text does. + +There is also `block_arranging_style`, which can start each category on a new line or lay the blocks out in a snake. See [Where to Start Each Category](https://pywaffle.readthedocs.io/en/latest/examples/block_shape_spacing_location_direction_and_style.html#where-to-start-each-category). You may find more details under [Examples](https://pywaffle.readthedocs.io/en/latest/examples.html) section in PyWaffle Documentation. diff --git a/examples/generate_plots.py b/examples/generate_plots.py index b1fd6cc..eced6b9 100644 --- a/examples/generate_plots.py +++ b/examples/generate_plots.py @@ -51,7 +51,6 @@ legend={"loc": "lower left", "bbox_to_anchor": (0, -0.4), "ncol": len(data), "framealpha": 0}, starting_location="NW", vertical=True, - block_arranging_style="snake", ) fig.set_facecolor("#EEEEEE") fig.savefig(readme_image_folder + "title_and_legend.svg", bbox_inches="tight", facecolor="#EEEEEE") diff --git a/examples/readme/title_and_legend.svg b/examples/readme/title_and_legend.svg index 5d276f1..668e1a0 100644 --- a/examples/readme/title_and_legend.svg +++ b/examples/readme/title_and_legend.svg @@ -6,7 +6,7 @@ - 2026-09-16T23:18:41.678768 + 2026-09-16T23:22:21.989853 image/svg+xml @@ -35,7 +35,7 @@ L 32.494995 47.61312 L 32.494995 22.318125 L 7.2 22.318125 z -" clip-path="url(#p6dac1fe10b)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #c9a227; stroke: #c9a227; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #5f8a8b; stroke: #5f8a8b; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - - - +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> + + + - +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #b5653f; stroke: #b5653f; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - - - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> + + + - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> - +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> +" clip-path="url(#p209bdee63d)" style="fill: #3d4f5d; stroke: #3d4f5d; stroke-linejoin: miter"/> @@ -1190,7 +1190,7 @@ z - +