{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Contour plots in Python with `matplotlib`: Easy as X-Y-Z\n",
"\n",
"When I have continuous data in three dimensions, my first visaulization inclination is to generate a contour plot. While 3-D surface plots might be useful in [some special cases](https://www.visualisingdata.com/2015/03/when-3d-works/), in general I think they should be avoided since they [add a great deal of complexity](https://www.gabrielaplucinska.com/blog/2017/8/7/3d-graphs) to a visualization without adding much (if any) information beyond a 2-D contour plot. \n",
"\n",
"While I usually use R/ggplot2 to generate my data visualizations, I found the support for good-looking, out-of-the-box contour plots to be a bit lacking. Of course, you can make anything look great with enough effort, but you can also waste an excessive amount of time fiddling with customizable tools. \n",
"\n",
"This isn't to say the Pythonic contour plot doesn't come with its own set of frustrations, but hopefully this post will make the task easier for any of you going down this road.\n",
"**The most difficult part of using the Python/`matplotlib` implementation of contour plots is formatting your data.** The main plotting function we'll use, `ax.contour(X,Y,Z)`, requires that your three-dimensional input data be in an odd and unintuitive structure. In this post, I'll give you the code to get from a more traditional data structure to this Python-specific format.\n",
"\n",
"## Data preparation\n",
"\n",
"To begin, I'll start with some dummy data that is in a standard \"long\" format, where each row corresponds to a single observation. In this case, my three dimensions are just `x`, `y`, and `z` which maps directly to the axes on which we wish to plot them. "
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" x \n",
" y \n",
" z \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.000000 \n",
" 0.0 \n",
" 0.392 \n",
" \n",
" \n",
" 1 \n",
" 0.198970 \n",
" 0.0 \n",
" 0.496 \n",
" \n",
" \n",
" 2 \n",
" 0.349485 \n",
" 0.0 \n",
" 0.500 \n",
" \n",
" \n",
" 3 \n",
" 0.500000 \n",
" 0.0 \n",
" 0.500 \n",
" \n",
" \n",
" 4 \n",
" 0.698970 \n",
" 0.0 \n",
" 0.500 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" x y z\n",
"0 0.000000 0.0 0.392\n",
"1 0.198970 0.0 0.496\n",
"2 0.349485 0.0 0.500\n",
"3 0.500000 0.0 0.500\n",
"4 0.698970 0.0 0.500"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"data_url = 'https://raw.githubusercontent.com/alexmill/website_notebooks/master/data/data_3d_contour.csv'\n",
"contour_data = pd.read_csv(data_url)\n",
"contour_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Nota bene:* For best results, make sure that there is a row for every combination of `x` and `y` coordinates in the plane of the range you want to plot. (Said differently, if $X$ is the set of points you want to plot on the $x$-axis and $Y$ is the set of points you want to plot on the $y$-axis, then your dataframe should contain a $z$-value for every point in the Cartesian product of $X \\times Y$.) If you know you're going to be making a contour plot, you can plat ahead of time so your data-generating process results in this format. It's not detrimental if your data don't meet this requirement, but you may get unwanted blank spots in your plot if your data is missing any points in the plane.\n",
"\n",
"Assuming your data are in a similar format, you can quickly convert it to the requisite structure for `matplotlib` using the code below. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"Z = contour_data.pivot_table(index='x', columns='y', values='z').T.values\n",
"\n",
"X_unique = np.sort(contour_data.x.unique())\n",
"Y_unique = np.sort(contour_data.y.unique())\n",
"X, Y = np.meshgrid(X_unique, Y_unique)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What's going on here? Looking at the `Z` data first, I've merely used the `pivot_table` method from `pandas` to cast my data into a matrix format, where the columns/rows correspond to the values of `Z` for each of the points in the range of the $x$/$y$-axes. We can see the resulting data structure below:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" 2 \n",
" 3 \n",
" 4 \n",
" 5 \n",
" 6 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.392 \n",
" 0.496 \n",
" 0.500 \n",
" 0.500 \n",
" 0.500 \n",
" 0.500 \n",
" 0.500 \n",
" \n",
" \n",
" 1 \n",
" 0.286 \n",
" 0.472 \n",
" 0.494 \n",
" 0.500 \n",
" 0.500 \n",
" 0.500 \n",
" 0.500 \n",
" \n",
" \n",
" 2 \n",
" 0.094 \n",
" 0.304 \n",
" 0.434 \n",
" 0.496 \n",
" 0.500 \n",
" 0.500 \n",
" 0.500 \n",
" \n",
" \n",
" 3 \n",
" -0.036 \n",
" 0.118 \n",
" 0.308 \n",
" 0.460 \n",
" 0.500 \n",
" 0.500 \n",
" 0.500 \n",
" \n",
" \n",
" 4 \n",
" -0.052 \n",
" -0.042 \n",
" 0.120 \n",
" 0.328 \n",
" 0.480 \n",
" 0.500 \n",
" 0.500 \n",
" \n",
" \n",
" 5 \n",
" -0.212 \n",
" -0.192 \n",
" -0.120 \n",
" 0.004 \n",
" 0.266 \n",
" 0.438 \n",
" 0.496 \n",
" \n",
" \n",
" 6 \n",
" -0.320 \n",
" -0.362 \n",
" -0.348 \n",
" -0.352 \n",
" -0.304 \n",
" -0.247 \n",
" -0.145 \n",
" \n",
" \n",
" 7 \n",
" -0.328 \n",
" -0.414 \n",
" -0.454 \n",
" -0.460 \n",
" -0.478 \n",
" -0.474 \n",
" -0.490 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2 3 4 5 6\n",
"0 0.392 0.496 0.500 0.500 0.500 0.500 0.500\n",
"1 0.286 0.472 0.494 0.500 0.500 0.500 0.500\n",
"2 0.094 0.304 0.434 0.496 0.500 0.500 0.500\n",
"3 -0.036 0.118 0.308 0.460 0.500 0.500 0.500\n",
"4 -0.052 -0.042 0.120 0.328 0.480 0.500 0.500\n",
"5 -0.212 -0.192 -0.120 0.004 0.266 0.438 0.496\n",
"6 -0.320 -0.362 -0.348 -0.352 -0.304 -0.247 -0.145\n",
"7 -0.328 -0.414 -0.454 -0.460 -0.478 -0.474 -0.490"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(Z).round(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This by itself is not terribly unintuitive, but the odd part about `matplotlib`'s `contour` method is that it also requires your `X` and `Y` data to have the exact same shape as your `Z` data. This means that we need to *duplicate* our $x$ and $y$ values along different axes, so that each entry in `Z` has its corresponding $x$ and $y$ coordinates in the same entry of the `X` and `Y` matrices. Fortunately, the `meshgrid` method from `numpy` will do this automatically for us.\n",
"\n",
"To help you visualize exacctly what `meshgrid` is doing, first notice the unique values in each of my x/y axes:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0. , 0.19897 , 0.349485, 0.5 , 0.69897 , 0.849485,\n",
" 1. ]),\n",
" array([0. , 0.26315789, 0.52631579, 0.63157895, 0.73684211,\n",
" 0.84210526, 0.94736842, 1. ]))"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_unique,Y_unique"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And now let's display the matrices `X` and `Y` generated by `np.meshgrid(X_unique, Y_unique)`:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" 2 \n",
" 3 \n",
" 4 \n",
" 5 \n",
" 6 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
" 1 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
" 2 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
" 3 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
" 4 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
" 5 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
" 6 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
" 7 \n",
" 0.0 \n",
" 0.199 \n",
" 0.349 \n",
" 0.5 \n",
" 0.699 \n",
" 0.849 \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2 3 4 5 6\n",
"0 0.0 0.199 0.349 0.5 0.699 0.849 1.0\n",
"1 0.0 0.199 0.349 0.5 0.699 0.849 1.0\n",
"2 0.0 0.199 0.349 0.5 0.699 0.849 1.0\n",
"3 0.0 0.199 0.349 0.5 0.699 0.849 1.0\n",
"4 0.0 0.199 0.349 0.5 0.699 0.849 1.0\n",
"5 0.0 0.199 0.349 0.5 0.699 0.849 1.0\n",
"6 0.0 0.199 0.349 0.5 0.699 0.849 1.0\n",
"7 0.0 0.199 0.349 0.5 0.699 0.849 1.0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(X).round(3)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" 2 \n",
" 3 \n",
" 4 \n",
" 5 \n",
" 6 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.000 \n",
" 0.000 \n",
" 0.000 \n",
" 0.000 \n",
" 0.000 \n",
" 0.000 \n",
" 0.000 \n",
" \n",
" \n",
" 1 \n",
" 0.263 \n",
" 0.263 \n",
" 0.263 \n",
" 0.263 \n",
" 0.263 \n",
" 0.263 \n",
" 0.263 \n",
" \n",
" \n",
" 2 \n",
" 0.526 \n",
" 0.526 \n",
" 0.526 \n",
" 0.526 \n",
" 0.526 \n",
" 0.526 \n",
" 0.526 \n",
" \n",
" \n",
" 3 \n",
" 0.632 \n",
" 0.632 \n",
" 0.632 \n",
" 0.632 \n",
" 0.632 \n",
" 0.632 \n",
" 0.632 \n",
" \n",
" \n",
" 4 \n",
" 0.737 \n",
" 0.737 \n",
" 0.737 \n",
" 0.737 \n",
" 0.737 \n",
" 0.737 \n",
" 0.737 \n",
" \n",
" \n",
" 5 \n",
" 0.842 \n",
" 0.842 \n",
" 0.842 \n",
" 0.842 \n",
" 0.842 \n",
" 0.842 \n",
" 0.842 \n",
" \n",
" \n",
" 6 \n",
" 0.947 \n",
" 0.947 \n",
" 0.947 \n",
" 0.947 \n",
" 0.947 \n",
" 0.947 \n",
" 0.947 \n",
" \n",
" \n",
" 7 \n",
" 1.000 \n",
" 1.000 \n",
" 1.000 \n",
" 1.000 \n",
" 1.000 \n",
" 1.000 \n",
" 1.000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2 3 4 5 6\n",
"0 0.000 0.000 0.000 0.000 0.000 0.000 0.000\n",
"1 0.263 0.263 0.263 0.263 0.263 0.263 0.263\n",
"2 0.526 0.526 0.526 0.526 0.526 0.526 0.526\n",
"3 0.632 0.632 0.632 0.632 0.632 0.632 0.632\n",
"4 0.737 0.737 0.737 0.737 0.737 0.737 0.737\n",
"5 0.842 0.842 0.842 0.842 0.842 0.842 0.842\n",
"6 0.947 0.947 0.947 0.947 0.947 0.947 0.947\n",
"7 1.000 1.000 1.000 1.000 1.000 1.000 1.000"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(Y).round(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I'm not a huge fan of this formatting requirement since we have to duplicate a bunch of data, but hopefully I've helped you understand the basic process required to get here from a more standard \"long\" data format."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `matplotlib`'s default contour plot \n",
"\n",
"Now that my data is in the correct format for `matplotlib` to understand, I can generate my first pass at a contour plot:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n"
],
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import set_matplotlib_formats\n",
"%matplotlib inline\n",
"set_matplotlib_formats('svg')\n",
"\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import rcParams\n",
"\n",
"\n",
"# Initialize plot objects\n",
"rcParams['figure.figsize'] = 5, 5 # sets plot size\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111)\n",
"\n",
"# Generate a contour plot\n",
"cp = ax.contour(X, Y, Z)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see, there's nothing too impressive about the default look of this plot. However, with just a few extra lines of code, we can significantly improve the aesthetics of this base visualization. \n",
"\n",
"### Customizing your contour\n",
"\n",
"My primary customizations will be:\n",
"- Select custom break points for the contour levels\n",
"- Fill in the background with color to indicate level changes\n",
"- Change the contour lines to black\n",
"\n",
"Here, I'll use `matplotlib`'s `colormap` module to generate a color pallette ([check out this handy reference](https://matplotlib.org/3.1.1/gallery/color/colormap_reference.html) for a full list of `matplotlib`'s default color pallettes)."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n"
],
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Initialize plot objects\n",
"rcParams['figure.figsize'] = 5, 5 # sets plot size\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111)\n",
"\n",
"# Define levels in z-axis where we want lines to appear\n",
"levels = np.array([-0.4,-0.2,0,0.2,0.4])\n",
"\n",
"# Generate a color mapping of the levels we've specified\n",
"import matplotlib.cm as cm # matplotlib's color map library\n",
"cpf = ax.contourf(X,Y,Z, len(levels), cmap=cm.Reds)\n",
"\n",
"# Set all level lines to black\n",
"line_colors = ['black' for l in cpf.levels]\n",
"\n",
"# Make plot and customize axes\n",
"cp = ax.contour(X, Y, Z, levels=levels, colors=line_colors)\n",
"ax.clabel(cp, fontsize=10, colors=line_colors)\n",
"plt.xticks([0,0.5,1])\n",
"plt.yticks([0,0.5,1])\n",
"ax.set_xlabel('X-axis')\n",
"_ = ax.set_ylabel('Y-axis')\n",
"#plt.savefig('figure.pdf') # uncomment to save vector/high-res version"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can obviously experiment with a lot more here, but this is already a significant improvement. I especially like how easy it is to plot the value of each level directly on the line. This obviates the need for a separate legend for the $z$-axis---just make sure you have a good title so people know what the z-axis represents!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Addendum: comparison with R/ggplot2\n",
"\n",
"Just for good measure, I'll show you what I was able to come up with exerting a similar amount of effort in R using just `ggplot2`. (If you are determined to use R, I'd suggest checking out the [`metR`](https://github.com/eliocamp/metR) package which I found has better support for good-looking contour plots.)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"%reload_ext rpy2.ipython"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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/fv3LygoyMzMzMrKclSamprGjBlz5MgRIcS1116bnp7eq1evioqKjz/++NChQ47irl27uvR3AwDwYCp/cAAANWRnZzv/T3j11VdbrdauHWrevHlCiMDAwLy8PMVDbWvGO4+gy7JstVrHjBkjhHBMmJFlubm5eeDAgUKI1NRUk8nkvHH7Efd169Y5Drt06VLFYSdNmuR4qLCwsGtPBwDgsZjjDsAXZWRkOIbJhRCSJK1evVqv13ftUHl5eQaDIT09ffTo0YqH7rjjDscXx44dc67r9fr33nvPaDSeOXNm4cKFQojf/e53J06c8PPzW7NmTWBg4EXPqDh+22Efe+yxqVOnTp06taysrGtPBwDgsQjuAHxRVVXV9u3bHV/LsvzJJ590+VDFxcUWi+Uf//hH+4eam5vbTqF4KCUlZdmyZUKI7Ozshx566K9//asQ4o9//OPw4cMvesaoqCjHF+1PmpGRsXXr1q1bt1599dWX+DwAAJ6OOe4AfNHcuXMdE078/PwsFoufn9/u3btHjhzZfsvi4uK6ujpFMTw83DGD5bzq6uq+//777du3r1mz5tSpU0KIFStWPPDAA4rNZFmeNGnSl19+6fh23LhxO3fubH+Ra/s57idOnBg+fLhjSZzk5OQFCxbMnj07LS2ty780AABoAsEdgM956623fvWrXwkhxo4du3jxYsdKi1deeeW+ffuMRqNi43vvvXfVqlWKonOMFkI0NTVlZWVt3br16NGjp06damhoUGx/3uAuhCgoKHBMatfpdMePH09OTm6/TfvgLoTYuHHjwoULS0pK2irBwcFXXXXVrFmzbrjhBsc6OQAAL8NUGQC+5dSpU4sXLxZCBAYGvvPOO5mZmY7J7seOHWu7lvSSbNq0acCAAXfeeefatWv3799vsVjS0tIyMzOfeuop56h9Xvn5+SaTSQhht9s3btzY+ZOmp6cfP3581apV8+bNc6xX09TUlJubu3jx4iuuuOKhhx6yWCxdeC4AAE/GiDsAH2Kz2a699tpvv/1WCPHCCy889thjQoiamprU1NTq6mohxKZNm2bMmNH5Ax4/fjwtLc1sNkdERDz66KPz5s0bNGhQ25SVwsJCx4ya846419XVDRkypKysTKfT2e32oKCggwcPth90P++Iu+JJHTp0aPfu3Z999plj+RohxG9/+1vHHHoAgNdgxB2AD1m2bJkjtY8dO/bRRx91FGNiYlauXOn4+q677qqtre38Ad98802z2SyE+Oc///nUU08NHjzYeaJ5+8nxzu67776ysrLQ0NCcnByj0djc3HznnXfa7faLnrSsrKy0tLSmpsbxrV6vHz58+P33379169b8/PxevXoJIdauXdv5ZwEA0ASCOwBf8d133/3xj38U/5kk43wZ6M9//vPMzEwhRHl5uWP6eycVFBQIIQwGw/jx49s/umHDhgvt+MEHH3z88cdCiOeff37q1KmOxr766qtXXnnloiedPHly375909LS2v/KNDk52bEq5ZkzZzr/LAAAmkBwB+ATTCbTL3/5S6vVKoT405/+lJKSothg5cqVMTExQohPP/109erVnTysY2aL1Wrdv3+/4qF169b96U9/cnytuFy1uLjYMXNm8uTJjs8Jjz76qCNwP/HEEydOnOj4pKNGjRJClJeXv/POO4qHjh075rhd69ixYzv5FAAAWsEcdwA+4YEHHnjttdeEEFdfffXXX3/dftVFIcSHH344f/58IURoaOjBgwc7szbLjh07Jk+eLMtynz59Fi9ePGzYMLvdfurUqY8//njHjh0xMTH19fU2my0+Pv6RRx658cYbBwwYIMvy1KlTc3NzQ0JCvv/++7ZlJX/44YeRI0eazWbFupDt57jv2LFjypQpdrtdr9ffcMMN1113XURExJkzZ/bt25eVldXU1KTT6datW5eRkeGKvzkAgMdQ6Y6tANBz2hZsCQwMPHr0aAdb3njjjY4tr732WpvN1pmDP/HEE+f933XYsGEnT550vrnphx9+KMvyiy++6Pj2tddeUxzq6aefdjy0fPnytqIj2WdmZjpv+fzzz19o1Xaj0fjGG2909q8GAKAdjLgD8HK1tbWDBw+uqKgQQjz//POPP/54BxtXVlampqY6LipdtmzZb3/7286cYufOncuXLz9y5EhxcXFkZOTIkSPnz58/f/58nU7X2tr6wgsv7Ny5My4ubvHixTqdbtSoUS0tLRMnTszNzZUkyfk4Fotl5MiR33//vdFo3L9/v2M+z4VWlTl58uTy5cv37dtXUlJSW1sbFxeXlJR03XXXPfDAA7GxsZf6twQA8HwEdwAAAEADuDgVAAAA0ACCOwAAAKABBHcAAABAAwjuAAAAgAYQ3AEAAAANILgDAAAAGkBwBwAAADSA4A4AAABoAMEdAAAA0ACCOwAAAKABBHcAAABAAwjuAAAAgAYQ3AEAAAANILgDAAAAGkBwBwAAADSA4A4AAABoAMEdAAAA0ACCOwAAAKABBHcAAABAAwjuAAAAgAYQ3AEAAAANILgDAAAAGvD/AQCNrk7yuP4dAAAAAElFTkSuQmCC\n"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -i contour_data,levels -w 5 -h 4 -u in -r 200\n",
"library(ggplot2)\n",
"\n",
"plt = ggplot(contour_data, aes(x=x, y=y, z=z)) + \n",
" stat_contour(aes(color=..level..), breaks=levels, size=1) +\n",
" scale_x_continuous(name='X-axis', limits=c(0,1.01), breaks=c(0,0.5,1)) +\n",
" scale_y_continuous(name='Y-axis', limits=c(0,1), breaks=c(0,0.5,1)) +\n",
" scale_colour_gradient(low='#2E38B5', high='#B54648') +\n",
" theme_bw()\n",
"print(plt)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}