diff --git a/doc/_static/anatomy.png b/doc/_static/anatomy.png index 22b4d893a6c9..0809d43f7a56 100644 Binary files a/doc/_static/anatomy.png and b/doc/_static/anatomy.png differ diff --git a/examples/showcase/anatomy.py b/examples/showcase/anatomy.py index 5f292c15d41e..f53aa2bb9d9e 100644 --- a/examples/showcase/anatomy.py +++ b/examples/showcase/anatomy.py @@ -9,13 +9,13 @@ import numpy as np import matplotlib.pyplot as plt -from matplotlib.patches import Circle, Rectangle +from matplotlib.patches import Circle from matplotlib.patheffects import withStroke from matplotlib.ticker import AutoMinorLocator, MultipleLocator -royal_blue = "#002082" royal_blue = [0, 20/256, 82/256] + # make the figure np.random.seed(19680801) @@ -25,31 +25,21 @@ Y2 = 1+np.cos(1+X/0.75)/2 Y3 = np.random.uniform(Y1, Y2, len(X)) -fig = plt.figure(figsize=(8, 8), facecolor='1') -marg = 0.15 -ax = fig.add_axes([marg, marg, 1-1.8*marg, 1-1.8*marg], aspect=1, - facecolor='1') - - -def minor_tick(x, pos): - if not x % 1.0: - return "" - return f"{x:.2f}" +fig = plt.figure(figsize=(7.5, 7.5)) +ax = fig.add_axes([0.2, 0.17, 0.68, 0.7], aspect=1) ax.xaxis.set_major_locator(MultipleLocator(1.000)) ax.xaxis.set_minor_locator(AutoMinorLocator(4)) ax.yaxis.set_major_locator(MultipleLocator(1.000)) ax.yaxis.set_minor_locator(AutoMinorLocator(4)) -# FuncFormatter is created and used automatically -ax.xaxis.set_minor_formatter(minor_tick) +ax.xaxis.set_minor_formatter("{x:.2f}") ax.set_xlim(0, 4) ax.set_ylim(0, 4) -ax.tick_params(which='major', width=1.0, labelsize=14) -ax.tick_params(which='major', length=10, labelsize=14) -ax.tick_params(which='minor', width=1.0, labelsize=10) -ax.tick_params(which='minor', length=5, labelsize=10, labelcolor='0.25') +ax.tick_params(which='major', width=1.0, length=10, labelsize=14) +ax.tick_params(which='minor', width=1.0, length=5, labelsize=10, + labelcolor='0.25') ax.grid(linestyle="--", linewidth=0.5, color='.25', zorder=-10) @@ -62,92 +52,54 @@ def minor_tick(x, pos): ax.set_title("Anatomy of a figure", fontsize=20, verticalalignment='bottom') ax.set_xlabel("x Axis label", fontsize=14) ax.set_ylabel("y Axis label", fontsize=14) - ax.legend(loc="upper right", fontsize=14) -# Annotate the figure +# Annotate the figure -def just_circle(x, y, radius=0.15): - c = Circle((x, y), radius, clip_on=False, zorder=10, linewidth=2.5, +def annotate(x, y, text, code): + # Circle marker + c = Circle((x, y), radius=0.15, clip_on=False, zorder=10, linewidth=2.5, edgecolor=royal_blue + [0.6], facecolor='none', - path_effects=[withStroke(linewidth=7, foreground=(1, 1, 1, 1))]) + path_effects=[withStroke(linewidth=7, foreground='white')]) ax.add_artist(c) - -def text(x, y, text): - ax.text(x, y, text, zorder=100, - ha='center', va='top', weight='bold', color=royal_blue, - style='italic', fontfamily='monospace', - path_effects=[withStroke(linewidth=7, foreground=(1, 1, 1, 1))]) - - -def code(x, y, text): - ax.text(x, y, text, zorder=100, - ha='center', va='top', weight='normal', color='0.0', - fontfamily='Courier New', fontsize='medium', - path_effects=[withStroke(linewidth=7, foreground=(1, 1, 1, 1))]) - - -def circle(x, y, txt, cde, radius=0.15): - just_circle(x, y, radius=radius) - text(x, y-0.2, txt) - code(x, y-0.33, cde) - -# Minor tick label -circle(3.25, -0.10, "Minor tick label", - "ax.xaxis.set_minor_formatter") - -# Major tick -circle(-0.03, 1.05, "Major tick", "ax.yaxis.set_major_locator") - -# Minor tick -y = 3.75 -circle(0.00, 3.75, "Minor tick", "ax.yaxis.set_minor_locator") - -# Major tick label -circle(-0.15, 3.00, "Major tick label", "ax.yaxis.set_major_formatter") - -# X Label -circle(1.90, -0.32, "xlabel", "ax.set_xlabel") - -# Y Label -circle(-0.27, 1.68, "ylabel", "ax.set_ylabel") - -# Title -circle(1.58, 4.13, "Title", "ax.set_title") - -# Blue plot -circle(1.75, 2.80, "Line", "ax.plot") - -# Scatter plot -circle(2.25, 1.54, "Markers", "ax.scatter") - -# Grid -circle(3.00, 3.00, "Grid", "ax.grid") - -# Legend -circle(3.60, 3.65, "Legend", "ax.legend") - -# Axes -circle(2.5, 0.55, "Axes", "fig.subplots") - -# Figure -circle(4.185, 4.3, "Figure", "plt.figure") - -# x Axis -circle(0.65, 0.01, "x Axis", "ax.xaxis") - -# y Axis -circle(0, 0.44, "y Axis", "ax.yaxis") - -# Spine -circle(4.0, 0.7, "Spine", "ax.spines") - -# frame around figure... -fig.add_artist(Rectangle((0, 0), width=1, height=1, facecolor='none', - edgecolor='0.5', linewidth=10)) - + # use path_effects as a background for the texts + # draw the path_effects and the colored text separately so that the + # path_effects cannot clip other texts + for path_effects in [[withStroke(linewidth=7, foreground='white')], []]: + color = 'white' if path_effects else royal_blue + ax.text(x, y-0.2, text, zorder=100, + ha='center', va='top', weight='bold', color=color, + style='italic', fontfamily='Courier New', + path_effects=path_effects) + + color = 'white' if path_effects else 'black' + ax.text(x, y-0.33, code, zorder=100, + ha='center', va='top', weight='normal', color=color, + fontfamily='monospace', fontsize='medium', + path_effects=path_effects) + + +annotate(3.5, -0.13, "Minor tick label", "ax.xaxis.set_minor_formatter") +annotate(-0.03, 1.0, "Major tick", "ax.yaxis.set_major_locator") +annotate(0.00, 3.75, "Minor tick", "ax.yaxis.set_minor_locator") +annotate(-0.15, 3.00, "Major tick label", "ax.yaxis.set_major_formatter") +annotate(1.68, -0.39, "xlabel", "ax.set_xlabel") +annotate(-0.38, 1.67, "ylabel", "ax.set_ylabel") +annotate(1.52, 4.15, "Title", "ax.set_title") +annotate(1.75, 2.80, "Line", "ax.plot") +annotate(2.25, 1.54, "Markers", "ax.scatter") +annotate(3.00, 3.00, "Grid", "ax.grid") +annotate(3.60, 3.58, "Legend", "ax.legend") +annotate(2.5, 0.55, "Axes", "fig.subplots") +annotate(4, 4.5, "Figure", "plt.figure") +annotate(0.65, 0.01, "x Axis", "ax.xaxis") +annotate(0, 0.36, "y Axis", "ax.yaxis") +annotate(4.0, 0.7, "Spine", "ax.spines") + +# frame around figure +fig.patch.set(linewidth=4, edgecolor='0.5') plt.show()
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: