Skip to content

Instantly share code, notes, and snippets.

@baldwint
Last active October 17, 2020 19:10
Show Gist options
  • Save baldwint/8cd11977c97d0f685be6 to your computer and use it in GitHub Desktop.
Save baldwint/8cd11977c97d0f685be6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Including annotations in axes bounds\n",
"\n",
"http://stackoverflow.com/questions/11545062/matplotlib-autoscale-axes-to-include-annotations"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I struggled with this too. The key point is that matplotlib doesn't determine how big the text is going to be until it has actually drawn it. So you need to explicitly call `plt.draw()`, then adjust your bounds, and then draw it again.\n",
"\n",
"The `get_window_extent` method is supposed to give an answer in display coordinates, not data coordinates, per the [documentation](http://matplotlib.org/api/text_api.html#matplotlib.text.Annotation.get_window_extent). But if the canvas hasn't been drawn yet, it seems to respond in whatever coordinate system you specified in the `textcoords` keyword argument to `annotate`. That's why your code above works using `textcoords='data'`, but not `'offset points'`.\n",
"\n",
"Here's an example:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib as mpl\n",
"mpl.rc('font', family='serif')\n",
"mpl.rc('savefig', dpi=120)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 12. , -5. , 42.84375, 5. ])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1064209e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0,360,101)\n",
"y = np.sin(np.radians(x))\n",
"\n",
"line, = plt.plot(x, y)\n",
"label = plt.annotate('finish', (360,0),\n",
" xytext=(12, 0), textcoords='offset points',\n",
" ha='left', va='center')\n",
"\n",
"bbox = label.get_window_extent(plt.gcf().canvas.get_renderer())\n",
"bbox.extents"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We want to change the limits so that the text label is within the axes. The value of `bbox` given isn't much help since it's in points relative to the labeled point: offset by 12 points in x, a string that evidently will be a little over 30 points long, in 10 point font (-5 to 5 in y). It's nontrivial to figure out how to get from there to a new set of axes bounds.\n",
"\n",
"However, if we call the method again now that we've drawn it, we get a totally different bbox:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 578.36666667, 216.66666667, 609.21041667, 226.66666667])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x103c2cc18>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bbox = label.get_window_extent(plt.gcf().canvas.get_renderer())\n",
"bbox.extents"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is in display coordinates, which we can transform with `ax.transData` like we're used to. So to get our labels into the bounds, we can do:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10645b390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0,360,101)\n",
"y = np.sin(np.radians(x))\n",
"\n",
"line, = plt.plot(x, y)\n",
"label = plt.annotate('finish', (360,0),\n",
" xytext=(8, 0), textcoords='offset points',\n",
" ha='left', va='center')\n",
"\n",
"plt.draw()\n",
"bbox = label.get_window_extent()\n",
"\n",
"ax = plt.gca()\n",
"bbox_data = bbox.transformed(ax.transData.inverted())\n",
"ax.update_datalim(bbox_data.corners())\n",
"ax.autoscale_view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note it's no longer necessary to explicitly pass ``plt.gcf().canvas.get_renderer()`` to `get_window_extent` after the plot has been drawn once. Also, I'm using `update_datalim` instead of `xlim` and `ylim` directly, so that the autoscaling can notch itself up to a round number automatically."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment