diff --git a/doc/faq/anatomy.png b/doc/faq/anatomy.png new file mode 100644 index 000000000000..badd777759a8 Binary files /dev/null and b/doc/faq/anatomy.png differ diff --git a/doc/faq/fig_map.png b/doc/faq/fig_map.png deleted file mode 100644 index 8af3500399fd..000000000000 Binary files a/doc/faq/fig_map.png and /dev/null differ diff --git a/doc/faq/usage_faq.rst b/doc/faq/usage_faq.rst index d2ad10c31bee..f67593a6df53 100644 --- a/doc/faq/usage_faq.rst +++ b/doc/faq/usage_faq.rst @@ -50,12 +50,12 @@ completely, leaving a purely object-oriented approach. Parts of a Figure ================= -.. image:: fig_map.png +.. image:: anatomy.png :class:`~matplotlib.figure.Figure` ---------------------------------- -The **whole** figure (marked as the outer red box). The figure keeps +The **whole** figure. The figure keeps track of all the child :class:`~matplotlib.axes.Axes`, a smattering of 'special' artists (titles, figure legends, etc), and the **canvas**. (Don't worry too much about the canvas, it is crucial as it is the diff --git a/examples/showcase/anatomy.py b/examples/showcase/anatomy.py new file mode 100644 index 000000000000..01d2b56eb147 --- /dev/null +++ b/examples/showcase/anatomy.py @@ -0,0 +1,138 @@ +# This figure shows the name of several matplotlib elements composing a figure + +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.ticker import MultipleLocator, FuncFormatter + +np.random.seed(123) + +X = np.linspace(0.5, 3.5, 100) +Y1 = 3+np.cos(X) +Y2 = 1+np.cos(1+X/0.75)/2 +Y3 = np.random.uniform(Y1, Y2, len(X)) + +fig = plt.figure(figsize=(8, 8), facecolor="w") +ax = fig.add_subplot(1, 1, 1, aspect=1) + + +def minor_tick(x, pos): + if not x % 1.0: + return "" + return "%.2f" % x + +ax.xaxis.set_major_locator(MultipleLocator(1.000)) +ax.xaxis.set_minor_locator(MultipleLocator(0.250)) +ax.yaxis.set_major_locator(MultipleLocator(1.000)) +ax.yaxis.set_minor_locator(MultipleLocator(0.250)) +ax.xaxis.set_minor_formatter(FuncFormatter(minor_tick)) + +ax.set_xlim(0, 4) +ax.set_ylim(0, 4) + +ax.tick_params(which='major', width=1.0) +ax.tick_params(which='major', length=10) +ax.tick_params(which='minor', width=1.0, labelsize=10) +ax.tick_params(which='minor', length=5, labelsize=10, labelcolor='0.25') + +ax.grid(linestyle="--", linewidth=0.5, color='.25', zorder=-10) + +ax.plot(X, Y1, c=(0.25, 0.25, 1.00), lw=2, label="Blue signal", zorder=10) +ax.plot(X, Y2, c=(1.00, 0.25, 0.25), lw=2, label="Red signal") +ax.scatter(X, Y3, c='w') + +ax.set_title("Anatomy of a figure", fontsize=20) +ax.set_xlabel("X axis label") +ax.set_ylabel("Y axis label") + +ax.legend(frameon=False) + + +def circle(x, y, radius=0.15): + from matplotlib.patches import Circle + from matplotlib.patheffects import withStroke + circle = Circle((x, y), radius, clip_on=False, zorder=10, linewidth=1, + edgecolor='black', facecolor=(0, 0, 0, .0125), + path_effects=[withStroke(linewidth=5, foreground='w')]) + ax.add_artist(circle) + + +def text(x, y, text): + ax.text(x, y, text, backgroundcolor="white", + ha='center', va='top', weight='bold', color='blue') + + +# Minor tick +circle(0.50, -.05) +text(0.50, -0.25, "Minor tick label") + +# Major tick +circle(4.00, 2.00) +text(4.00, 1.80, "Major tick") + +# Minor tick +circle(0.25, 4.00) +text(0.25, 3.80, "Minor tick") + +# Major tick label +circle(-0.05, 3.00) +text(-0.05, 2.80, "Major tick label") + +# X Label +circle(1.80, -0.22) +text(1.80, -0.4, "X axis label") + +# Y Label +circle(-0.20, 1.80) +text(-0.20, 1.6, "Y axis label") + +# Title +circle(1.60, 4.10) +text(1.60, 3.9, "Title") + +# Blue plot +circle(1.75, 2.80) +text(1.75, 2.60, "Line\n(line plot)") + +# Red plot +circle(1.20, 0.60) +text(1.20, 0.40, "Line\n(line plot)") + +# Scatter plot +circle(3.20, 1.75) +text(3.20, 1.55, "Markers\n(scatter plot)") + +# Grid +circle(3.00, 3.00) +text(3.00, 2.80, "Grid") + +# Legend +circle(3.70, 3.75) +text(3.70, 3.55, "Legend") + +# Axes +circle(0.5, 0.5) +text(0.5, 0.3, "Axes") + +# Figure +circle(-0.3, 0.65) +text(-0.3, 0.45, "Figure") + +color = 'blue' +ax.annotate('Spines', xy=(4.0, 0.35), xycoords='data', + xytext=(3.3, 0.5), textcoords='data', + weight='bold', color=color, + arrowprops=dict(arrowstyle='->', + connectionstyle="arc3", + color=color)) + +ax.annotate('', xy=(3.15, 0.0), xycoords='data', + xytext=(3.45, 0.45), textcoords='data', + weight='bold', color=color, + arrowprops=dict(arrowstyle='->', + connectionstyle="arc3", + color=color)) + +ax.text(4.0, -0.4, "Made with http://matplotlib.org", + fontsize=10, ha="right", color='.5') + +plt.show()