- "from matplotlib.patches import Rectangle, Ellipse\n\nfrom matplotlib.offsetbox import AnchoredOffsetbox, AuxTransformBox, VPacker,\\\n TextArea, DrawingArea\n\n\nclass AnchoredText(AnchoredOffsetbox):\n def __init__(self, s, loc, pad=0.4, borderpad=0.5,\n prop=None, frameon=True):\n\n self.txt = TextArea(s,\n minimumdescent=False)\n\n super(AnchoredText, self).__init__(loc, pad=pad, borderpad=borderpad,\n child=self.txt,\n prop=prop,\n frameon=frameon)\n\n\nclass AnchoredSizeBar(AnchoredOffsetbox):\n def __init__(self, transform, size, label, loc,\n pad=0.1, borderpad=0.1, sep=2, prop=None, frameon=True):\n \"\"\"\n Draw a horizontal bar with the size in data coordinate of the given\n axes. A label will be drawn underneath (center-aligned).\n\n pad, borderpad in fraction of the legend font size (or prop)\n sep in points.\n \"\"\"\n self.size_bar = AuxTransformBox(transform)\n self.size_bar.add_artist(Rectangle((0, 0), size, 0, fc=\"none\", lw=1.0))\n\n self.txt_label = TextArea(label, minimumdescent=False)\n\n self._box = VPacker(children=[self.size_bar, self.txt_label],\n align=\"center\",\n pad=0, sep=sep)\n\n AnchoredOffsetbox.__init__(self, loc, pad=pad, borderpad=borderpad,\n child=self._box,\n prop=prop,\n frameon=frameon)\n\n\nclass AnchoredEllipse(AnchoredOffsetbox):\n def __init__(self, transform, width, height, angle, loc,\n pad=0.1, borderpad=0.1, prop=None, frameon=True):\n \"\"\"\n Draw an ellipse the size in data coordinate of the give axes.\n\n pad, borderpad in fraction of the legend font size (or prop)\n \"\"\"\n self._box = AuxTransformBox(transform)\n self.ellipse = Ellipse((0, 0), width, height, angle)\n self._box.add_artist(self.ellipse)\n\n AnchoredOffsetbox.__init__(self, loc, pad=pad, borderpad=borderpad,\n child=self._box,\n prop=prop,\n frameon=frameon)\n\n\nclass AnchoredDrawingArea(AnchoredOffsetbox):\n def __init__(self, width, height, xdescent, ydescent,\n loc, pad=0.4, borderpad=0.5, prop=None, frameon=True):\n\n self.da = DrawingArea(width, height, xdescent, ydescent)\n\n super(AnchoredDrawingArea, self).__init__(loc, pad=pad,\n borderpad=borderpad,\n child=self.da,\n prop=None,\n frameon=frameon)\n\n\nif __name__ == \"__main__\":\n\n import matplotlib.pyplot as plt\n\n ax = plt.gca()\n ax.set_aspect(1.)\n\n at = AnchoredText(\"Figure 1a\",\n loc=2, frameon=True)\n at.patch.set_boxstyle(\"round,pad=0.,rounding_size=0.2\")\n ax.add_artist(at)\n\n from matplotlib.patches import Circle\n ada = AnchoredDrawingArea(20, 20, 0, 0,\n loc=1, pad=0., frameon=False)\n p = Circle((10, 10), 10)\n ada.da.add_artist(p)\n ax.add_artist(ada)\n\n # draw an ellipse of width=0.1, height=0.15 in the data coordinate\n ae = AnchoredEllipse(ax.transData, width=0.1, height=0.15, angle=0.,\n loc=3, pad=0.5, borderpad=0.4, frameon=True)\n\n ax.add_artist(ae)\n\n # draw a horizontal bar with length of 0.1 in Data coordinate\n # (ax.transData) with a label underneath.\n asb = AnchoredSizeBar(ax.transData,\n 0.1,\n r\"1$^{\\prime}$\",\n loc=8,\n pad=0.1, borderpad=0.5, sep=5,\n frameon=False)\n ax.add_artist(asb)\n\n plt.draw()\n plt.show()"
0 commit comments