Skip to content

Instantly share code, notes, and snippets.

@mwaskom
Created May 11, 2020 16:15
Show Gist options
  • Save mwaskom/dcf98f99479e18d7a9e0642600d2893c to your computer and use it in GitHub Desktop.
Save mwaskom/dcf98f99479e18d7a9e0642600d2893c to your computer and use it in GitHub Desktop.
Scatterplot of x,y with hist of x-y
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Scatterplot with histogram of differences"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.transforms import Affine2D\n",
"import mpl_toolkits.axisartist.floating_axes as floating_axes\n",
"from mpl_toolkits.axisartist.grid_finder import FixedLocator, MaxNLocator"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"n = 100\n",
"rng = np.random.default_rng(0)\n",
"x = rng.uniform(.5, .85, n)\n",
"y = x - rng.normal(.05, .05, n)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"f, ax = plt.subplots(figsize=(6, 6))\n",
"\n",
"lim = .3, .9\n",
"ax.set(xlim=lim, ylim=lim)\n",
"ax.plot(lim, lim, c=\".7\", dashes=(4, 2), zorder=0) # Forthcoming ax.axline makes this easier\n",
"ax.scatter(x, y)\n",
"ax.set(xlabel=\"x\", ylabel=\"y\")\n",
"\n",
"f.subplots_adjust(right=.7, top=.7)\n",
"ax.spines[\"right\"].set_visible(False)\n",
"ax.spines[\"top\"].set_visible(False)\n",
"\n",
"hist, bins = np.histogram(x - y)\n",
"w = bins[1] - bins[0]\n",
"\n",
"plot_extents = -.2, .2, 0, hist.max()\n",
"\n",
"transform = Affine2D().scale(60, 1).rotate_deg(-45)\n",
"helper = floating_axes.GridHelperCurveLinear(transform, plot_extents, grid_locator1=MaxNLocator(4))\n",
"inset = floating_axes.FloatingAxes(f, [.65, .65, .35, .35], grid_helper=helper)\n",
"\n",
"bar_ax = inset.get_aux_axes(transform)\n",
"bar_ax.bar(bins[:-1], hist, w)\n",
"bar_ax.plot((0, 0), (0, hist.max()), c=\".7\", dashes=(4, 2))\n",
"\n",
"inset.axis[\"left\"].set_visible(False)\n",
"inset.axis[\"right\"].set_visible(False)\n",
"inset.axis[\"top\"].set_visible(False)\n",
"\n",
"axis = inset.axis[\"bottom\"]\n",
"axis.major_ticks.set_tick_out(True)\n",
"\n",
"f.add_axes(inset)\n",
"f.savefig(\"difference_hist.png\", dpi=200)"
]
},
{
"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": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment