{ "cells": [ { "cell_type": "markdown", "id": "954d4333", "metadata": {}, "source": [ "# Lets-Plot Cheatbook" ] }, { "cell_type": "markdown", "id": "b0644352", "metadata": {}, "source": [ "## Contents\n", "\n", "- [Preparation](#preparation)\n", " - [Imports](#preparation-imports)\n", " - [Data](#preparation-data)\n", "- [Basics](#basics)\n", "- [Features](#features)\n", " - [Interactive Maps](#features-interactive_maps)\n", " - [Customizable Tooltips](#features-customizable_tooltips)\n", " - [Formatting](#features-formatting)\n", " - [Sampling](#features-sampling)\n", " - [Images](#features-images)\n", " - [Correlation Plot](#features-correlation_plot)\n", " - [Joint Plot](#features-joint_plot)\n", " - [Residual Plot](#features-residual_plot)\n", "- [Geoms](#geoms)\n", " - [Graphical Primitives](#geoms-graphical_primitives)\n", " - [Line Segments](#geoms-graphical_primitives-line_segments)\n", " - [One Variable](#geoms-one_variable)\n", " - [Continuous](#geoms-one_variable-continuous)\n", " - [Discrete](#geoms-one_variable-discrete)\n", " - [Two Variables](#geoms-two_variables)\n", " - [Both Continuous](#geoms-two_variables-both_continuous)\n", " - [One Discrete, One Continuous](#geoms-two_variables-one_discrete_one_continuous)\n", " - [Both Discrete](#geoms-two_variables-both_discrete)\n", " - [Continuous Bivariate Distribution](#geoms-two_variables-continuous_bivariate_distribution)\n", " - [Continuous Function](#geoms-two_variables-continuous_function)\n", " - [Visualizing Error](#geoms-two_variables-visualizing_error)\n", " - [Maps](#geoms-two_variables-maps)\n", " - [Three Variables](#geoms-three_variables)\n", "- [Stats](#stats)\n", " - [Identity](#stats-identity)\n", " - [One Variable](#stats-one_variable)\n", " - [Continuous](#stats-one_variable-continuous)\n", " - [Discrete](#stats-one_variable-discrete)\n", " - [Two Variables](#stats-two_variables)\n", " - [Both Continuous](#stats-two_variables-both_continuous)\n", " - [One Discrete, One Continuous](#stats-two_variables-one_discrete_one_continuous)\n", " - [Both Discrete](#stats-two_variables-both_discrete)\n", " - [Continuous Bivariate Distribution](#stats-two_variables-continuous_bivariate_distribution)\n", " - [Three Variables](#stats-three_variables)\n", "- [Scales](#scales)\n", " - [General Purpose Scales](#scales-general_purpose_scales)\n", " - [X & Y Location Scales](#scales-x_and_y_location_scales)\n", " - [Color & Fill Scales](#scales-color_and_fill_scales)\n", " - [Continuous](#scales-color_and_fill_scales-continuous)\n", " - [Discrete](#scales-color_and_fill_scales-discrete)\n", " - [Size & Shape Scales](#scales-size_and_shape_scales)\n", "- [Coordinate Systems](#coordinate_systems)\n", "- [Position Adjustments](#position_adjustments)\n", "- [Themes](#themes)\n", "- [Flavors](#flavors)\n", "- [Faceting](#faceting)\n", "- [Labels & Legends](#labels_and_legends)\n", "- [Zooming](#zooming)" ] }, { "cell_type": "markdown", "id": "8aee91a3", "metadata": {}, "source": [ "## Preparation " ] }, { "cell_type": "markdown", "id": "2068059d", "metadata": {}, "source": [ "### Imports " ] }, { "cell_type": "code", "execution_count": 1, "id": "e9cc7f74", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:57.734999Z", "iopub.status.busy": "2024-04-17T07:29:57.734873Z", "iopub.status.idle": "2024-04-17T07:29:58.223890Z", "shell.execute_reply": "2024-04-17T07:29:58.223668Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The geodata is provided by © OpenStreetMap contributors and is made available here under the Open Database License (ODbL).\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from io import BytesIO\n", "import requests\n", "\n", "import numpy as np\n", "import pandas as pd\n", "from PIL import Image\n", "from scipy.stats import multivariate_normal\n", "\n", "from lets_plot import *\n", "from lets_plot.mapping import as_discrete\n", "from lets_plot.bistro import *\n", "from lets_plot.geo_data import *\n", "LetsPlot.setup_html()" ] }, { "cell_type": "markdown", "id": "629e4fde", "metadata": {}, "source": [ "### Data " ] }, { "cell_type": "code", "execution_count": 2, "id": "2eede300", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:58.225025Z", "iopub.status.busy": "2024-04-17T07:29:58.224898Z", "iopub.status.idle": "2024-04-17T07:29:58.369564Z", "shell.execute_reply": "2024-04-17T07:29:58.369288Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0manufacturermodeldisplyearcyltransdrvctyhwyflclass
01audia41.819994auto(l5)f1829pcompact
12audia41.819994manual(m5)f2129pcompact
23audia42.020084manual(m6)f2031pcompact
\n", "
" ], "text/plain": [ " Unnamed: 0 manufacturer model displ year cyl trans drv cty hwy \\\n", "0 1 audi a4 1.8 1999 4 auto(l5) f 18 29 \n", "1 2 audi a4 1.8 1999 4 manual(m5) f 21 29 \n", "2 3 audi a4 2.0 2008 4 manual(m6) f 20 31 \n", "\n", " fl class \n", "0 p compact \n", "1 p compact \n", "2 p compact " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mpg_df = pd.read_csv('https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/mpg.csv')\n", "mpg_df.head(3)" ] }, { "cell_type": "code", "execution_count": 3, "id": "7bcdb4ff", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:58.370727Z", "iopub.status.busy": "2024-04-17T07:29:58.370648Z", "iopub.status.idle": "2024-04-17T07:29:58.374821Z", "shell.execute_reply": "2024-04-17T07:29:58.374653Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
classminmedianmaxcount
02seater2325.0265
1compact2327.04447
2midsize2327.03241
\n", "
" ], "text/plain": [ " class min median max count\n", "0 2seater 23 25.0 26 5\n", "1 compact 23 27.0 44 47\n", "2 midsize 23 27.0 32 41" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class_df = mpg_df.groupby('class').hwy.agg(['min', 'median', 'max', 'count']).reset_index()\n", "class_df.head(3)" ] }, { "cell_type": "code", "execution_count": 4, "id": "64238e52", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:58.375960Z", "iopub.status.busy": "2024-04-17T07:29:58.375836Z", "iopub.status.idle": "2024-04-17T07:29:58.382333Z", "shell.execute_reply": "2024-04-17T07:29:58.382166Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ctyhwyfl
0912e
11114[e, p]
21115r
\n", "
" ], "text/plain": [ " cty hwy fl\n", "0 9 12 e\n", "1 11 14 [e, p]\n", "2 11 15 r" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fl_df = mpg_df.groupby(['cty', 'hwy']).fl.agg(pd.Series.mode).to_frame('fl').reset_index()\n", "fl_df.head(3)" ] }, { "cell_type": "code", "execution_count": 5, "id": "647f548a", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:58.383383Z", "iopub.status.busy": "2024-04-17T07:29:58.383245Z", "iopub.status.idle": "2024-04-17T07:29:58.518109Z", "shell.execute_reply": "2024-04-17T07:29:58.517813Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0datepcepoppsavertuempmedunemploy
011967-07-01506.7198712.012.64.52944
121967-08-01509.8198911.012.64.72945
231967-09-01515.6199113.011.94.62958
\n", "
" ], "text/plain": [ " Unnamed: 0 date pce pop psavert uempmed unemploy\n", "0 1 1967-07-01 506.7 198712.0 12.6 4.5 2944\n", "1 2 1967-08-01 509.8 198911.0 12.6 4.7 2945\n", "2 3 1967-09-01 515.6 199113.0 11.9 4.6 2958" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "economics_df = pd.read_csv('https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/economics.csv', parse_dates=['date'])\n", "economics_df.head(3)" ] }, { "cell_type": "code", "execution_count": 6, "id": "fcc102ee", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:58.519250Z", "iopub.status.busy": "2024-04-17T07:29:58.519161Z", "iopub.status.idle": "2024-04-17T07:29:58.719927Z", "shell.execute_reply": "2024-04-17T07:29:58.719738Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0PIDcountystateareapoptotalpopdensitypopwhitepopblackpopamerindian...percollegepercprofpoppovertyknownpercpovertyknownpercbelowpovertypercchildbelowpovertpercadultpovertypercelderlypovertyinmetrocategory
01561ADAMSIL0.052660901270.96154063917170298...19.6313924.3558596362896.27477713.15144318.01171711.00977612.4438120AAR
12562ALEXANDERIL0.01410626759.0000007054349619...11.2433082.8703151052999.08714532.24427845.82651427.38564725.2289760LHR
23563BONDIL0.02214991681.4090911447742935...17.0338194.4885721423594.95697412.06884414.03606110.85209012.6974100AAR
34564BOONEIL0.017308061812.1176502934412746...17.2789544.1978003033798.4775697.20901911.1795365.5360136.2170471ALU
45565BROWNIL0.0185836324.222222526454714...14.4759993.367680481582.50514013.52024913.02288911.14321119.2000000AAR
\n", "

5 rows × 29 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 PID county state area poptotal popdensity popwhite \\\n", "0 1 561 ADAMS IL 0.052 66090 1270.961540 63917 \n", "1 2 562 ALEXANDER IL 0.014 10626 759.000000 7054 \n", "2 3 563 BOND IL 0.022 14991 681.409091 14477 \n", "3 4 564 BOONE IL 0.017 30806 1812.117650 29344 \n", "4 5 565 BROWN IL 0.018 5836 324.222222 5264 \n", "\n", " popblack popamerindian ... percollege percprof poppovertyknown \\\n", "0 1702 98 ... 19.631392 4.355859 63628 \n", "1 3496 19 ... 11.243308 2.870315 10529 \n", "2 429 35 ... 17.033819 4.488572 14235 \n", "3 127 46 ... 17.278954 4.197800 30337 \n", "4 547 14 ... 14.475999 3.367680 4815 \n", "\n", " percpovertyknown percbelowpoverty percchildbelowpovert percadultpoverty \\\n", "0 96.274777 13.151443 18.011717 11.009776 \n", "1 99.087145 32.244278 45.826514 27.385647 \n", "2 94.956974 12.068844 14.036061 10.852090 \n", "3 98.477569 7.209019 11.179536 5.536013 \n", "4 82.505140 13.520249 13.022889 11.143211 \n", "\n", " percelderlypoverty inmetro category \n", "0 12.443812 0 AAR \n", "1 25.228976 0 LHR \n", "2 12.697410 0 AAR \n", "3 6.217047 1 ALU \n", "4 19.200000 0 AAR \n", "\n", "[5 rows x 29 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midwest_df = pd.read_csv('https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/midwest.csv')\n", "midwest_df.head()" ] }, { "cell_type": "code", "execution_count": 7, "id": "24beaa42", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:58.721190Z", "iopub.status.busy": "2024-04-17T07:29:58.721112Z", "iopub.status.idle": "2024-04-17T07:29:58.732595Z", "shell.execute_reply": "2024-04-17T07:29:58.732394Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
statepopulation
0IL11430602
1IN5544159
2MI9295297
\n", "
" ], "text/plain": [ " state population\n", "0 IL 11430602\n", "1 IN 5544159\n", "2 MI 9295297" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pop_df = midwest_df.groupby('state').poptotal.sum().to_frame('population').reset_index()\n", "pop_df.head(3)" ] }, { "cell_type": "code", "execution_count": 8, "id": "cd6372fd", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:58.733626Z", "iopub.status.busy": "2024-04-17T07:29:58.733532Z", "iopub.status.idle": "2024-04-17T07:29:59.254581Z", "shell.execute_reply": "2024-04-17T07:29:59.254391Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
statefound namegeometry
0ILIllinoisMULTIPOLYGON (((-89.13301 36.98200, -89.16777 ...
1INIndianaMULTIPOLYGON (((-84.81993 39.10544, -84.83405 ...
2MIMichiganMULTIPOLYGON (((-90.41862 46.56636, -90.00014 ...
\n", "
" ], "text/plain": [ " state found name geometry\n", "0 IL Illinois MULTIPOLYGON (((-89.13301 36.98200, -89.16777 ...\n", "1 IN Indiana MULTIPOLYGON (((-84.81993 39.10544, -84.83405 ...\n", "2 MI Michigan MULTIPOLYGON (((-90.41862 46.56636, -90.00014 ..." ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "states_df = geocode('state', pop_df.state, scope='US').get_boundaries(9)\n", "states_df.head(3)" ] }, { "cell_type": "code", "execution_count": 9, "id": "5cad4bb6", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.255620Z", "iopub.status.busy": "2024-04-17T07:29:59.255538Z", "iopub.status.idle": "2024-04-17T07:29:59.268246Z", "shell.execute_reply": "2024-04-17T07:29:59.268060Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyz
0-1.000000-1.00.094354
1-0.959184-1.00.096849
2-0.918367-1.00.099189
\n", "
" ], "text/plain": [ " x y z\n", "0 -1.000000 -1.0 0.094354\n", "1 -0.959184 -1.0 0.096849\n", "2 -0.918367 -1.0 0.099189" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def generate_random_data(size=50, mean=[0, 0], cov=[[1, .5], [.5, 1]], seed=42):\n", " np.random.seed(seed)\n", " x = np.linspace(-1, 1, size)\n", " y = np.linspace(-1, 1, size)\n", " X, Y = np.meshgrid(x, y)\n", " Z = multivariate_normal(mean, cov).pdf(np.dstack((X, Y)))\n", " return pd.DataFrame({'x': X.flatten(), 'y': Y.flatten(), 'z': Z.flatten()})\n", "\n", "random_df = generate_random_data()\n", "random_df.head(3)" ] }, { "cell_type": "code", "execution_count": 10, "id": "c334c86f", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.269302Z", "iopub.status.busy": "2024-04-17T07:29:59.269207Z", "iopub.status.idle": "2024-04-17T07:29:59.442048Z", "shell.execute_reply": "2024-04-17T07:29:59.441841Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response = requests.get('https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/source/examples/cookbook/images/fisher_boat.png')\n", "img = Image.open(BytesIO(response.content))\n", "img" ] }, { "cell_type": "markdown", "id": "4eb76152", "metadata": {}, "source": [ "## Basics " ] }, { "cell_type": "code", "execution_count": 11, "id": "cfb48a68", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.443215Z", "iopub.status.busy": "2024-04-17T07:29:59.443133Z", "iopub.status.idle": "2024-04-17T07:29:59.450635Z", "shell.execute_reply": "2024-04-17T07:29:59.450444Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(color='cyl')) + \\\n", " geom_smooth(method='lm') + \\\n", " scale_color_brewer(type='div', palette='Spectral') + \\\n", " theme_classic() + \\\n", " ggtitle(\"Simple linear smoothing\")" ] }, { "cell_type": "markdown", "id": "311dedee", "metadata": {}, "source": [ "## Features " ] }, { "cell_type": "markdown", "id": "be46cd3a", "metadata": {}, "source": [ "### Interactive Maps " ] }, { "cell_type": "code", "execution_count": 12, "id": "f1e80df4", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.451829Z", "iopub.status.busy": "2024-04-17T07:29:59.451706Z", "iopub.status.idle": "2024-04-17T07:29:59.466693Z", "shell.execute_reply": "2024-04-17T07:29:59.466473Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_livemap() + \\\n", " geom_map(aes(color='population', fill='population'), \\\n", " data=pop_df, map=states_df, map_join='state', size=1, alpha=.3) + \\\n", " scale_color_gradient(low='#1a9641', high='#d7191c') + \\\n", " scale_fill_gradient(low='#1a9641', high='#d7191c')" ] }, { "cell_type": "markdown", "id": "8cefe9a2", "metadata": {}, "source": [ "### Customizable Tooltips " ] }, { "cell_type": "code", "execution_count": 13, "id": "ec1a040e", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.467868Z", "iopub.status.busy": "2024-04-17T07:29:59.467744Z", "iopub.status.idle": "2024-04-17T07:29:59.472300Z", "shell.execute_reply": "2024-04-17T07:29:59.472115Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='fl', fill=as_discrete('year'))) + \\\n", " geom_bar(tooltips=layer_tooltips().line('fl|^x')\n", " .line('@|@year')\n", " .line('count|@..count..'))" ] }, { "cell_type": "markdown", "id": "376ca51f", "metadata": {}, "source": [ "### Formatting " ] }, { "cell_type": "code", "execution_count": 14, "id": "c21a1c5a", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.473487Z", "iopub.status.busy": "2024-04-17T07:29:59.473367Z", "iopub.status.idle": "2024-04-17T07:29:59.479501Z", "shell.execute_reply": "2024-04-17T07:29:59.479314Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(economics_df, aes('date', 'unemploy')) + \\\n", " geom_area(color='#253494', fill='#41b6c4') + \\\n", " scale_x_datetime(format='%e %b %Y')" ] }, { "cell_type": "markdown", "id": "7eb3e656", "metadata": {}, "source": [ "### Sampling " ] }, { "cell_type": "code", "execution_count": 15, "id": "e94cfbff", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.480660Z", "iopub.status.busy": "2024-04-17T07:29:59.480545Z", "iopub.status.idle": "2024-04-17T07:29:59.484968Z", "shell.execute_reply": "2024-04-17T07:29:59.484781Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(color=as_discrete('cyl')), sampling=sampling_group_random(2, seed=42))" ] }, { "cell_type": "markdown", "id": "cd3240d3", "metadata": {}, "source": [ "### Images " ] }, { "cell_type": "code", "execution_count": 16, "id": "5b9846fb", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.486119Z", "iopub.status.busy": "2024-04-17T07:29:59.486008Z", "iopub.status.idle": "2024-04-17T07:29:59.498044Z", "shell.execute_reply": "2024-04-17T07:29:59.497835Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_imshow(np.asarray(img)) + \\\n", " theme_void()" ] }, { "cell_type": "markdown", "id": "376261b0", "metadata": {}, "source": [ "### Correlation Plot " ] }, { "cell_type": "code", "execution_count": 17, "id": "b43a5d68", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.499263Z", "iopub.status.busy": "2024-04-17T07:29:59.499112Z", "iopub.status.idle": "2024-04-17T07:29:59.502681Z", "shell.execute_reply": "2024-04-17T07:29:59.502493Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corr_plot(data=mpg_df.select_dtypes(include=np.number), threshold=.5)\\\n", " .points().labels()\\\n", " .palette_gradient(low='#d7191c', mid='#ffffbf', high='#1a9641')\\\n", " .build() + \\\n", " ggsize(400, 400)" ] }, { "cell_type": "markdown", "id": "89ebfee2", "metadata": {}, "source": [ "### Joint Plot " ] }, { "cell_type": "code", "execution_count": 18, "id": "ebfd20b3", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.503828Z", "iopub.status.busy": "2024-04-17T07:29:59.503676Z", "iopub.status.idle": "2024-04-17T07:29:59.509429Z", "shell.execute_reply": "2024-04-17T07:29:59.509238Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint_plot(data=mpg_df, x='cty', y='hwy')" ] }, { "cell_type": "markdown", "id": "61e811b2", "metadata": {}, "source": [ "### Residual Plot " ] }, { "cell_type": "code", "execution_count": 19, "id": "a720f102", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.510472Z", "iopub.status.busy": "2024-04-17T07:29:59.510357Z", "iopub.status.idle": "2024-04-17T07:29:59.644080Z", "shell.execute_reply": "2024-04-17T07:29:59.643823Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "residual_plot(data=mpg_df, x='cty', y='hwy', size=5, alpha=.5, color_by='drv', marginal=\"dens:tr\")" ] }, { "cell_type": "markdown", "id": "56188c8b", "metadata": {}, "source": [ "## Geoms " ] }, { "cell_type": "markdown", "id": "024cf9da", "metadata": {}, "source": [ "### Graphical Primitives " ] }, { "cell_type": "code", "execution_count": 20, "id": "bc68eba5", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.645325Z", "iopub.status.busy": "2024-04-17T07:29:59.645163Z", "iopub.status.idle": "2024-04-17T07:29:59.652138Z", "shell.execute_reply": "2024-04-17T07:29:59.651936Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(economics_df, aes('date', 'unemploy')) + scale_x_datetime() + \\\n", " geom_path()" ] }, { "cell_type": "code", "execution_count": 21, "id": "e573ff4e", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.653036Z", "iopub.status.busy": "2024-04-17T07:29:59.652958Z", "iopub.status.idle": "2024-04-17T07:29:59.666737Z", "shell.execute_reply": "2024-04-17T07:29:59.666531Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_polygon(data=states_df)" ] }, { "cell_type": "code", "execution_count": 22, "id": "a351b196", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.667821Z", "iopub.status.busy": "2024-04-17T07:29:59.667650Z", "iopub.status.idle": "2024-04-17T07:29:59.669964Z", "shell.execute_reply": "2024-04-17T07:29:59.669778Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_rect(xmin=0, xmax=1, ymin=0, ymax=1)" ] }, { "cell_type": "code", "execution_count": 23, "id": "79354000", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.670816Z", "iopub.status.busy": "2024-04-17T07:29:59.670739Z", "iopub.status.idle": "2024-04-17T07:29:59.678125Z", "shell.execute_reply": "2024-04-17T07:29:59.677936Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(economics_df, aes('date', 'unemploy')) + scale_x_datetime() + \\\n", " geom_ribbon(aes(ymin=economics_df.unemploy - 900, ymax=economics_df.unemploy + 900))" ] }, { "cell_type": "markdown", "id": "a3530c79", "metadata": {}, "source": [ "#### Line Segments " ] }, { "cell_type": "code", "execution_count": 24, "id": "588c8e04", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.678995Z", "iopub.status.busy": "2024-04-17T07:29:59.678917Z", "iopub.status.idle": "2024-04-17T07:29:59.681114Z", "shell.execute_reply": "2024-04-17T07:29:59.680930Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_abline(slope=.5)" ] }, { "cell_type": "code", "execution_count": 25, "id": "c66f12fd", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.681882Z", "iopub.status.busy": "2024-04-17T07:29:59.681806Z", "iopub.status.idle": "2024-04-17T07:29:59.683870Z", "shell.execute_reply": "2024-04-17T07:29:59.683682Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_hline(yintercept=0)" ] }, { "cell_type": "code", "execution_count": 26, "id": "677c6ef1", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.684660Z", "iopub.status.busy": "2024-04-17T07:29:59.684544Z", "iopub.status.idle": "2024-04-17T07:29:59.686592Z", "shell.execute_reply": "2024-04-17T07:29:59.686406Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_vline(xintercept=0)" ] }, { "cell_type": "code", "execution_count": 27, "id": "5a78f724", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.687367Z", "iopub.status.busy": "2024-04-17T07:29:59.687290Z", "iopub.status.idle": "2024-04-17T07:29:59.689585Z", "shell.execute_reply": "2024-04-17T07:29:59.689397Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_segment(x=0, y=0, xend=1, yend=1, arrow=arrow())" ] }, { "cell_type": "code", "execution_count": 28, "id": "6eaf06fb-7c0c-40b8-ac66-1019a13dddc3", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.690344Z", "iopub.status.busy": "2024-04-17T07:29:59.690269Z", "iopub.status.idle": "2024-04-17T07:29:59.692545Z", "shell.execute_reply": "2024-04-17T07:29:59.692351Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_curve(x=0, y=0, xend=1, yend=1, curvature=0.3, arrow=arrow())" ] }, { "cell_type": "code", "execution_count": 29, "id": "5ece1161-258a-435f-8068-5af4283c2dc6", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.693301Z", "iopub.status.busy": "2024-04-17T07:29:59.693226Z", "iopub.status.idle": "2024-04-17T07:29:59.695365Z", "shell.execute_reply": "2024-04-17T07:29:59.695177Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_spoke(x=0, y=0, angle=0.64, radius=5)" ] }, { "cell_type": "markdown", "id": "30e38ce1", "metadata": {}, "source": [ "### One Variable " ] }, { "cell_type": "markdown", "id": "fdb419c5", "metadata": {}, "source": [ "#### Continuous " ] }, { "cell_type": "code", "execution_count": 30, "id": "73a4453f", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.696148Z", "iopub.status.busy": "2024-04-17T07:29:59.696072Z", "iopub.status.idle": "2024-04-17T07:29:59.700090Z", "shell.execute_reply": "2024-04-17T07:29:59.699894Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_area(stat='bin')" ] }, { "cell_type": "code", "execution_count": 31, "id": "4205fe07", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.700883Z", "iopub.status.busy": "2024-04-17T07:29:59.700805Z", "iopub.status.idle": "2024-04-17T07:29:59.711026Z", "shell.execute_reply": "2024-04-17T07:29:59.710838Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_density()" ] }, { "cell_type": "code", "execution_count": 32, "id": "3b3cf53a", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.711794Z", "iopub.status.busy": "2024-04-17T07:29:59.711715Z", "iopub.status.idle": "2024-04-17T07:29:59.715340Z", "shell.execute_reply": "2024-04-17T07:29:59.715152Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_freqpoly()" ] }, { "cell_type": "code", "execution_count": 33, "id": "d0f043e3", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.716112Z", "iopub.status.busy": "2024-04-17T07:29:59.716035Z", "iopub.status.idle": "2024-04-17T07:29:59.719954Z", "shell.execute_reply": "2024-04-17T07:29:59.719766Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram()" ] }, { "cell_type": "code", "execution_count": 34, "id": "c405fd14", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.720791Z", "iopub.status.busy": "2024-04-17T07:29:59.720673Z", "iopub.status.idle": "2024-04-17T07:29:59.724403Z", "shell.execute_reply": "2024-04-17T07:29:59.724211Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_dotplot(stackratio=.5)" ] }, { "cell_type": "code", "execution_count": 35, "id": "b5e1d8b8", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.725172Z", "iopub.status.busy": "2024-04-17T07:29:59.725097Z", "iopub.status.idle": "2024-04-17T07:29:59.730086Z", "shell.execute_reply": "2024-04-17T07:29:59.729735Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(sample='hwy')) + \\\n", " geom_qq() + \\\n", " geom_qq_line()" ] }, { "cell_type": "markdown", "id": "401e4c58", "metadata": {}, "source": [ "#### Discrete " ] }, { "cell_type": "code", "execution_count": 36, "id": "a3690cb3", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.730901Z", "iopub.status.busy": "2024-04-17T07:29:59.730784Z", "iopub.status.idle": "2024-04-17T07:29:59.734721Z", "shell.execute_reply": "2024-04-17T07:29:59.734479Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar()" ] }, { "cell_type": "code", "execution_count": 37, "id": "e1c7d360", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.735514Z", "iopub.status.busy": "2024-04-17T07:29:59.735435Z", "iopub.status.idle": "2024-04-17T07:29:59.739690Z", "shell.execute_reply": "2024-04-17T07:29:59.739431Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df) + \\\n", " geom_pie(aes(fill='fl'))" ] }, { "cell_type": "code", "execution_count": 38, "id": "c6e9249b", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.740473Z", "iopub.status.busy": "2024-04-17T07:29:59.740388Z", "iopub.status.idle": "2024-04-17T07:29:59.745365Z", "shell.execute_reply": "2024-04-17T07:29:59.745130Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_function(aes(x='hwy'), data=mpg_df, fun=lambda t: t**.5)" ] }, { "cell_type": "markdown", "id": "379d98a8", "metadata": {}, "source": [ "### Two Variables " ] }, { "cell_type": "markdown", "id": "0250a2fd", "metadata": {}, "source": [ "#### Both Continuous " ] }, { "cell_type": "code", "execution_count": 39, "id": "ca8ade7e", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.746298Z", "iopub.status.busy": "2024-04-17T07:29:59.746131Z", "iopub.status.idle": "2024-04-17T07:29:59.750146Z", "shell.execute_reply": "2024-04-17T07:29:59.749913Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point()" ] }, { "cell_type": "code", "execution_count": 40, "id": "d8bc52d9", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.750934Z", "iopub.status.busy": "2024-04-17T07:29:59.750862Z", "iopub.status.idle": "2024-04-17T07:29:59.755017Z", "shell.execute_reply": "2024-04-17T07:29:59.754783Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_smooth()" ] }, { "cell_type": "code", "execution_count": 41, "id": "2b17aba2", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.755815Z", "iopub.status.busy": "2024-04-17T07:29:59.755742Z", "iopub.status.idle": "2024-04-17T07:29:59.759944Z", "shell.execute_reply": "2024-04-17T07:29:59.759710Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_qq2() + \\\n", " geom_qq2_line()" ] }, { "cell_type": "code", "execution_count": 42, "id": "58f5dd64", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.760819Z", "iopub.status.busy": "2024-04-17T07:29:59.760651Z", "iopub.status.idle": "2024-04-17T07:29:59.763506Z", "shell.execute_reply": "2024-04-17T07:29:59.763275Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(fl_df, aes('cty', 'hwy')) + \\\n", " geom_text(aes(label='fl'))" ] }, { "cell_type": "code", "execution_count": 43, "id": "0263bffb", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.764281Z", "iopub.status.busy": "2024-04-17T07:29:59.764203Z", "iopub.status.idle": "2024-04-17T07:29:59.767032Z", "shell.execute_reply": "2024-04-17T07:29:59.766796Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(fl_df, aes('cty', 'hwy')) + \\\n", " geom_label(aes(label='fl'))" ] }, { "cell_type": "markdown", "id": "e5e60d69", "metadata": {}, "source": [ "#### One Discrete, One Continuous " ] }, { "cell_type": "code", "execution_count": 44, "id": "f748b979", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.767851Z", "iopub.status.busy": "2024-04-17T07:29:59.767776Z", "iopub.status.idle": "2024-04-17T07:29:59.772048Z", "shell.execute_reply": "2024-04-17T07:29:59.771813Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " geom_boxplot()" ] }, { "cell_type": "code", "execution_count": 45, "id": "10d5a9e7", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.772920Z", "iopub.status.busy": "2024-04-17T07:29:59.772758Z", "iopub.status.idle": "2024-04-17T07:29:59.810000Z", "shell.execute_reply": "2024-04-17T07:29:59.809736Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('hwy', 'class')) + \\\n", " geom_area_ridges()" ] }, { "cell_type": "code", "execution_count": 46, "id": "28665911", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.811169Z", "iopub.status.busy": "2024-04-17T07:29:59.811034Z", "iopub.status.idle": "2024-04-17T07:29:59.848149Z", "shell.execute_reply": "2024-04-17T07:29:59.847881Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " geom_violin()" ] }, { "cell_type": "code", "execution_count": 47, "id": "4472ee5e", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.849349Z", "iopub.status.busy": "2024-04-17T07:29:59.849172Z", "iopub.status.idle": "2024-04-17T07:29:59.854061Z", "shell.execute_reply": "2024-04-17T07:29:59.853813Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " geom_ydotplot(stackratio=.5)" ] }, { "cell_type": "code", "execution_count": 48, "id": "7f38ca3e", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.855216Z", "iopub.status.busy": "2024-04-17T07:29:59.855031Z", "iopub.status.idle": "2024-04-17T07:29:59.857785Z", "shell.execute_reply": "2024-04-17T07:29:59.857552Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(class_df, aes('class', 'count')) + \\\n", " geom_bar(stat='identity')" ] }, { "cell_type": "markdown", "id": "179898ec", "metadata": {}, "source": [ "#### Both Discrete " ] }, { "cell_type": "code", "execution_count": 49, "id": "bb605f55-d983-4412-96a7-0e30cf576f93", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.858905Z", "iopub.status.busy": "2024-04-17T07:29:59.858730Z", "iopub.status.idle": "2024-04-17T07:29:59.862585Z", "shell.execute_reply": "2024-04-17T07:29:59.862355Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('fl', 'drv')) + \\\n", " geom_count()" ] }, { "cell_type": "code", "execution_count": 50, "id": "8ac7c0bc", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.863579Z", "iopub.status.busy": "2024-04-17T07:29:59.863393Z", "iopub.status.idle": "2024-04-17T07:29:59.867312Z", "shell.execute_reply": "2024-04-17T07:29:59.867079Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('fl', 'drv')) + \\\n", " geom_jitter()" ] }, { "cell_type": "markdown", "id": "2afaa759", "metadata": {}, "source": [ "#### Continuous Bivariate Distribution " ] }, { "cell_type": "code", "execution_count": 51, "id": "c23ed32b", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.868320Z", "iopub.status.busy": "2024-04-17T07:29:59.868141Z", "iopub.status.idle": "2024-04-17T07:29:59.872645Z", "shell.execute_reply": "2024-04-17T07:29:59.872294Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_bin2d()" ] }, { "cell_type": "code", "execution_count": 52, "id": "2cf6a17b", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.873520Z", "iopub.status.busy": "2024-04-17T07:29:59.873421Z", "iopub.status.idle": "2024-04-17T07:29:59.926881Z", "shell.execute_reply": "2024-04-17T07:29:59.926688Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_density2d(aes(color='..group..'))" ] }, { "cell_type": "code", "execution_count": 53, "id": "5338c53d", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.928023Z", "iopub.status.busy": "2024-04-17T07:29:59.927869Z", "iopub.status.idle": "2024-04-17T07:29:59.991246Z", "shell.execute_reply": "2024-04-17T07:29:59.991045Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_density2df(aes(fill='..group..'))" ] }, { "cell_type": "markdown", "id": "525d134a", "metadata": {}, "source": [ "#### Continuous Function " ] }, { "cell_type": "code", "execution_count": 54, "id": "2645109c", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.992319Z", "iopub.status.busy": "2024-04-17T07:29:59.992207Z", "iopub.status.idle": "2024-04-17T07:29:59.998466Z", "shell.execute_reply": "2024-04-17T07:29:59.998285Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(economics_df, aes('date', 'unemploy')) + scale_x_datetime() + \\\n", " geom_area()" ] }, { "cell_type": "code", "execution_count": 55, "id": "2c0a18de", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:29:59.999401Z", "iopub.status.busy": "2024-04-17T07:29:59.999327Z", "iopub.status.idle": "2024-04-17T07:30:00.004974Z", "shell.execute_reply": "2024-04-17T07:30:00.004794Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(economics_df, aes('date', 'unemploy')) + scale_x_datetime() + \\\n", " geom_line()" ] }, { "cell_type": "code", "execution_count": 56, "id": "95c7a277", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.005882Z", "iopub.status.busy": "2024-04-17T07:30:00.005807Z", "iopub.status.idle": "2024-04-17T07:30:00.011674Z", "shell.execute_reply": "2024-04-17T07:30:00.011504Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(economics_df, aes('date', 'unemploy')) + scale_x_datetime() + \\\n", " geom_step()" ] }, { "cell_type": "markdown", "id": "08dc851a", "metadata": {}, "source": [ "#### Visualizing Error " ] }, { "cell_type": "code", "execution_count": 57, "id": "bd7bc972", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.012580Z", "iopub.status.busy": "2024-04-17T07:30:00.012501Z", "iopub.status.idle": "2024-04-17T07:30:00.014901Z", "shell.execute_reply": "2024-04-17T07:30:00.014731Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(class_df, aes(x='class')) + \\\n", " geom_crossbar(aes(ymin='min', y='median', ymax='max'))" ] }, { "cell_type": "code", "execution_count": 58, "id": "7326c52b", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.015780Z", "iopub.status.busy": "2024-04-17T07:30:00.015702Z", "iopub.status.idle": "2024-04-17T07:30:00.017997Z", "shell.execute_reply": "2024-04-17T07:30:00.017818Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(class_df, aes(x='class')) + \\\n", " geom_errorbar(aes(ymin='min', ymax='max'))" ] }, { "cell_type": "code", "execution_count": 59, "id": "ecadef77", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.018787Z", "iopub.status.busy": "2024-04-17T07:30:00.018712Z", "iopub.status.idle": "2024-04-17T07:30:00.020980Z", "shell.execute_reply": "2024-04-17T07:30:00.020794Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(class_df, aes(x='class')) + \\\n", " geom_linerange(aes(ymin='min', ymax='max'))" ] }, { "cell_type": "code", "execution_count": 60, "id": "1de3c522", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.021922Z", "iopub.status.busy": "2024-04-17T07:30:00.021792Z", "iopub.status.idle": "2024-04-17T07:30:00.024172Z", "shell.execute_reply": "2024-04-17T07:30:00.023997Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(class_df, aes(x='class')) + \\\n", " geom_pointrange(aes(ymin='min', y='median', ymax='max'))" ] }, { "cell_type": "markdown", "id": "2811dec6", "metadata": {}, "source": [ "#### Maps " ] }, { "cell_type": "code", "execution_count": 61, "id": "3c28936d", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.024968Z", "iopub.status.busy": "2024-04-17T07:30:00.024895Z", "iopub.status.idle": "2024-04-17T07:30:00.037832Z", "shell.execute_reply": "2024-04-17T07:30:00.037654Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_map(data=states_df)" ] }, { "cell_type": "markdown", "id": "d9c1379c", "metadata": {}, "source": [ "### Three Variables " ] }, { "cell_type": "code", "execution_count": 62, "id": "489c224a", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.038661Z", "iopub.status.busy": "2024-04-17T07:30:00.038583Z", "iopub.status.idle": "2024-04-17T07:30:00.058819Z", "shell.execute_reply": "2024-04-17T07:30:00.058628Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(random_df, aes('x', 'y')) + \\\n", " geom_contour(aes(z='z'))" ] }, { "cell_type": "code", "execution_count": 63, "id": "7ebf3d03", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.059703Z", "iopub.status.busy": "2024-04-17T07:30:00.059583Z", "iopub.status.idle": "2024-04-17T07:30:00.084981Z", "shell.execute_reply": "2024-04-17T07:30:00.084789Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(random_df, aes('x', 'y')) + \\\n", " geom_contourf(aes(z='z'))" ] }, { "cell_type": "code", "execution_count": 64, "id": "fd0ecea3", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.086002Z", "iopub.status.busy": "2024-04-17T07:30:00.085851Z", "iopub.status.idle": "2024-04-17T07:30:00.102266Z", "shell.execute_reply": "2024-04-17T07:30:00.102075Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(random_df, aes('x', 'y')) + \\\n", " geom_raster(aes(fill='z'))" ] }, { "cell_type": "code", "execution_count": 65, "id": "2eb55077", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.103218Z", "iopub.status.busy": "2024-04-17T07:30:00.103138Z", "iopub.status.idle": "2024-04-17T07:30:00.118919Z", "shell.execute_reply": "2024-04-17T07:30:00.118738Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(random_df, aes('x', 'y')) + \\\n", " geom_tile(aes(fill='z'))" ] }, { "cell_type": "markdown", "id": "e3278b79", "metadata": {}, "source": [ "## Stats " ] }, { "cell_type": "markdown", "id": "0effab99", "metadata": {}, "source": [ "### Identity " ] }, { "cell_type": "code", "execution_count": 66, "id": "03dfa58d", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.120001Z", "iopub.status.busy": "2024-04-17T07:30:00.119888Z", "iopub.status.idle": "2024-04-17T07:30:00.124982Z", "shell.execute_reply": "2024-04-17T07:30:00.124805Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " geom_bar() + \\\n", " ggtitle(\"Bar geom, default stat\")\n", "p_bunch_2 = ggplot(class_df, aes('class', 'count')) + \\\n", " geom_bar(stat='identity') + \\\n", " ggtitle(\"Bar geom, identity stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "13b3b902", "metadata": {}, "source": [ "### One Variable " ] }, { "cell_type": "markdown", "id": "2e953eb4", "metadata": {}, "source": [ "#### Continuous " ] }, { "cell_type": "code", "execution_count": 67, "id": "c8e5054b", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.125925Z", "iopub.status.busy": "2024-04-17T07:30:00.125851Z", "iopub.status.idle": "2024-04-17T07:30:00.129489Z", "shell.execute_reply": "2024-04-17T07:30:00.129319Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes(x='hwy')) + \\\n", " stat_ecdf()" ] }, { "cell_type": "markdown", "id": "839dabab", "metadata": {}, "source": [ "#### Discrete " ] }, { "cell_type": "code", "execution_count": 68, "id": "bd6dd86c", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.130430Z", "iopub.status.busy": "2024-04-17T07:30:00.130321Z", "iopub.status.idle": "2024-04-17T07:30:00.135859Z", "shell.execute_reply": "2024-04-17T07:30:00.135688Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar() + \\\n", " ggtitle(\"Bar geom, default stat\")\n", "p_bunch_2 = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_lollipop(aes(y='..count..'), stat='count') + \\\n", " ggtitle(\"Lollipop geom, count stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 69, "id": "1a80d426", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.136765Z", "iopub.status.busy": "2024-04-17T07:30:00.136687Z", "iopub.status.idle": "2024-04-17T07:30:00.142190Z", "shell.execute_reply": "2024-04-17T07:30:00.142018Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram() + \\\n", " ggtitle(\"Histogram geom, default stat\")\n", "p_bunch_2 = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_step(aes(y='..count..'), stat='bin') + \\\n", " ggtitle(\"Step geom, bin stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 70, "id": "8b2c0119", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.143127Z", "iopub.status.busy": "2024-04-17T07:30:00.143015Z", "iopub.status.idle": "2024-04-17T07:30:00.163756Z", "shell.execute_reply": "2024-04-17T07:30:00.163577Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_density() + \\\n", " ggtitle(\"Density geom, default stat\")\n", "p_bunch_2 = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_point(stat='density') + \\\n", " ggtitle(\"Point geom, density stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "9649bada", "metadata": {}, "source": [ "### Two Variables " ] }, { "cell_type": "markdown", "id": "d3d83c78", "metadata": {}, "source": [ "#### Both Continuous " ] }, { "cell_type": "code", "execution_count": 71, "id": "efa46c12", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.164811Z", "iopub.status.busy": "2024-04-17T07:30:00.164672Z", "iopub.status.idle": "2024-04-17T07:30:00.169400Z", "shell.execute_reply": "2024-04-17T07:30:00.169222Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " stat_summary_bin()" ] }, { "cell_type": "code", "execution_count": 72, "id": "4a06fa1a", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.170322Z", "iopub.status.busy": "2024-04-17T07:30:00.170248Z", "iopub.status.idle": "2024-04-17T07:30:00.177035Z", "shell.execute_reply": "2024-04-17T07:30:00.176861Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_smooth() + \\\n", " ggtitle(\"Smooth geom, default stat\")\n", "p_bunch_2 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_crossbar(aes(y='hwy', ymin='..ymin..', ymax='..ymax..'), stat='smooth') + \\\n", " ggtitle(\"Crossbar geom, smooth stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "a6873ce4", "metadata": {}, "source": [ "#### One Discrete, One Continuous " ] }, { "cell_type": "code", "execution_count": 73, "id": "63d74d5e", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.177999Z", "iopub.status.busy": "2024-04-17T07:30:00.177889Z", "iopub.status.idle": "2024-04-17T07:30:00.181583Z", "shell.execute_reply": "2024-04-17T07:30:00.181413Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " stat_summary()" ] }, { "cell_type": "code", "execution_count": 74, "id": "59020839", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.182481Z", "iopub.status.busy": "2024-04-17T07:30:00.182407Z", "iopub.status.idle": "2024-04-17T07:30:00.189242Z", "shell.execute_reply": "2024-04-17T07:30:00.189028Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " geom_boxplot() + \\\n", " ylim(10, 50) + \\\n", " ggtitle(\"Boxplot geom, default stat\")\n", "p_bunch_2 = ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " geom_linerange(aes(ymin='..ymin..', ymax='..ymax..'), stat='boxplot', color='black') + \\\n", " geom_errorbar(aes(ymin='..lower..', ymax='..upper..'), stat='boxplot', width=.9) + \\\n", " ylim(10, 50) + \\\n", " ggtitle(\"Linerange and errorbar geoms, boxplot stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "9bc5c9af-08e4-4766-bb18-caf5420e32d1", "metadata": {}, "source": [ "#### Both Discrete " ] }, { "cell_type": "code", "execution_count": 75, "id": "05b9e285-3a40-4d64-9f76-94af22303f2c", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.190160Z", "iopub.status.busy": "2024-04-17T07:30:00.190085Z", "iopub.status.idle": "2024-04-17T07:30:00.193721Z", "shell.execute_reply": "2024-04-17T07:30:00.193551Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('fl', 'drv')) + \\\n", " stat_sum()" ] }, { "cell_type": "markdown", "id": "6d6d9563", "metadata": {}, "source": [ "#### Continuous Bivariate Distribution " ] }, { "cell_type": "code", "execution_count": 76, "id": "1f2772c7", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.194636Z", "iopub.status.busy": "2024-04-17T07:30:00.194564Z", "iopub.status.idle": "2024-04-17T07:30:00.200682Z", "shell.execute_reply": "2024-04-17T07:30:00.200512Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_bin2d() + \\\n", " ggtitle(\"Bin2d geom, default stat\")\n", "p_bunch_2 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(color='..count..'), stat='bin2d') + \\\n", " ggtitle(\"Point geom, bin2d stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 77, "id": "9946eff6", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.201503Z", "iopub.status.busy": "2024-04-17T07:30:00.201391Z", "iopub.status.idle": "2024-04-17T07:30:00.308002Z", "shell.execute_reply": "2024-04-17T07:30:00.307756Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_density2d(aes(color='..group..')) + \\\n", " ggtitle(\"Density2d geom, default stat\")\n", "p_bunch_2 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_tile(aes(color='..group..'), stat='density2d', size=.5) + \\\n", " ggtitle(\"Tile geom, density2d stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "7d0d9160", "metadata": {}, "source": [ "### Three Variables " ] }, { "cell_type": "code", "execution_count": 78, "id": "dadfb339", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.309327Z", "iopub.status.busy": "2024-04-17T07:30:00.309239Z", "iopub.status.idle": "2024-04-17T07:30:00.346938Z", "shell.execute_reply": "2024-04-17T07:30:00.346736Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(random_df, aes('x', 'y')) + \\\n", " geom_contour(aes(z='z')) + \\\n", " ggtitle(\"Contour geom, default stat\")\n", "p_bunch_2 = ggplot(random_df, aes('x', 'y')) + \\\n", " geom_path(aes(z='z'), stat='contour') + \\\n", " ggtitle(\"Path geom, contour stat\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "960c4bdf", "metadata": {}, "source": [ "## Scales " ] }, { "cell_type": "markdown", "id": "a27361da", "metadata": {}, "source": [ "### General Purpose Scales " ] }, { "cell_type": "code", "execution_count": 79, "id": "4066412f", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.348191Z", "iopub.status.busy": "2024-04-17T07:30:00.348094Z", "iopub.status.idle": "2024-04-17T07:30:00.355052Z", "shell.execute_reply": "2024-04-17T07:30:00.354869Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(fill='fl'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Bar geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_continuous() + \\\n", " ggtitle(\"Bar geom, continuous fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 80, "id": "898658f7", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.356183Z", "iopub.status.busy": "2024-04-17T07:30:00.356083Z", "iopub.status.idle": "2024-04-17T07:30:00.361780Z", "shell.execute_reply": "2024-04-17T07:30:00.361580Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram(aes(fill='hwy'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Histogram geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_discrete(guide='none') + \\\n", " ggtitle(\"Histogram geom, discrete fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 81, "id": "6874ccba", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.362939Z", "iopub.status.busy": "2024-04-17T07:30:00.362816Z", "iopub.status.idle": "2024-04-17T07:30:00.369579Z", "shell.execute_reply": "2024-04-17T07:30:00.369401Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(alpha='fl'), color='#0c2c84', fill='#0c2c84')\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Bar geom, default alpha scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_alpha_manual(values=[.4, .1, .8, .85, .9]) + \\\n", " ggtitle(\"Bar geom, manual alpha scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 82, "id": "60066cf0", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.370780Z", "iopub.status.busy": "2024-04-17T07:30:00.370666Z", "iopub.status.idle": "2024-04-17T07:30:00.380875Z", "shell.execute_reply": "2024-04-17T07:30:00.380698Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(economics_df, aes('date', 'unemploy')) + \\\n", " scale_x_datetime() + \\\n", " geom_point(aes(size='psavert'), shape=21, alpha=.3, show_legend=False)\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default size scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_size_identity() + \\\n", " ggtitle(\"Point geom, identity size scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "ae1e3c01", "metadata": {}, "source": [ "### X & Y Location Scales " ] }, { "cell_type": "code", "execution_count": 83, "id": "e2e12ce8", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.382046Z", "iopub.status.busy": "2024-04-17T07:30:00.381933Z", "iopub.status.idle": "2024-04-17T07:30:00.396562Z", "shell.execute_reply": "2024-04-17T07:30:00.396361Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "breaks = [economics_df.date.min(), economics_df.date.median(), economics_df.date.max()]\n", "labels = [str(date).split('-')[0] for date in breaks]\n", "p_common = ggplot(economics_df, aes('date', 'pce')) + geom_line()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Line geom, default x scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_x_datetime() + \\\n", " ggtitle(\"Line geom, datetime x scale\")\n", "p_bunch_3 = p_common + \\\n", " scale_x_time(breaks=breaks, labels=labels) + \\\n", " ggtitle(\"Line geom, time x scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2, p_bunch_3])" ] }, { "cell_type": "code", "execution_count": 84, "id": "7efb859a", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.397729Z", "iopub.status.busy": "2024-04-17T07:30:00.397611Z", "iopub.status.idle": "2024-04-17T07:30:00.415652Z", "shell.execute_reply": "2024-04-17T07:30:00.415461Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(midwest_df, aes('state', 'poptotal')) + \\\n", " geom_jitter(aes(color='state')) + \\\n", " coord_flip()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Jitter geom, default y scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_y_log10() + \\\n", " ggtitle(\"Jitter geom, log10 y scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 85, "id": "5dd0c259", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.416918Z", "iopub.status.busy": "2024-04-17T07:30:00.416786Z", "iopub.status.idle": "2024-04-17T07:30:00.426473Z", "shell.execute_reply": "2024-04-17T07:30:00.426272Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(economics_df, aes('date', 'pce')) + \\\n", " geom_line()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Line geom, default x scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_x_reverse() + \\\n", " ggtitle(\"Line geom, reversed x scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "4751206c", "metadata": {}, "source": [ "### Color & Fill Scales " ] }, { "cell_type": "markdown", "id": "f85061d4", "metadata": {}, "source": [ "#### Continuous " ] }, { "cell_type": "code", "execution_count": 86, "id": "714551e6", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.427685Z", "iopub.status.busy": "2024-04-17T07:30:00.427572Z", "iopub.status.idle": "2024-04-17T07:30:00.433088Z", "shell.execute_reply": "2024-04-17T07:30:00.432907Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram(aes(fill='hwy'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Histogram geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_grey() + \\\n", " ggtitle(\"Histogram geom, grey fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 87, "id": "be790919", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.434194Z", "iopub.status.busy": "2024-04-17T07:30:00.434075Z", "iopub.status.idle": "2024-04-17T07:30:00.439543Z", "shell.execute_reply": "2024-04-17T07:30:00.439372Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram(aes(fill='hwy'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Histogram geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_gradient(low='#006d2c', high='#edf8e9') + \\\n", " ggtitle(\"Histogram geom, gradient fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 88, "id": "67431865", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.440604Z", "iopub.status.busy": "2024-04-17T07:30:00.440475Z", "iopub.status.idle": "2024-04-17T07:30:00.445907Z", "shell.execute_reply": "2024-04-17T07:30:00.445736Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram(aes(fill='hwy'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Histogram geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_brewer(type='seq', palette='GnBu', direction=-1) + \\\n", " ggtitle(\"Histogram geom, brewer fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 89, "id": "c689cb7d", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.446939Z", "iopub.status.busy": "2024-04-17T07:30:00.446810Z", "iopub.status.idle": "2024-04-17T07:30:00.452264Z", "shell.execute_reply": "2024-04-17T07:30:00.452093Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram(aes(fill='hwy'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Histogram geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_viridis(option='inferno') + \\\n", " ggtitle(\"Histogram geom, viridis fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 90, "id": "b1dd77e9", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.453145Z", "iopub.status.busy": "2024-04-17T07:30:00.453026Z", "iopub.status.idle": "2024-04-17T07:30:00.458532Z", "shell.execute_reply": "2024-04-17T07:30:00.458360Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_histogram(aes(fill='hwy'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Histogram geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_hue(l=80, c=150) + \\\n", " ggtitle(\"Histogram geom, hue fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 91, "id": "6184d37f", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.459423Z", "iopub.status.busy": "2024-04-17T07:30:00.459346Z", "iopub.status.idle": "2024-04-17T07:30:00.469540Z", "shell.execute_reply": "2024-04-17T07:30:00.469368Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(random_df, aes('x', 'y')) + \\\n", " geom_histogram(aes(fill='x'), bins=7)\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Histogram geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_gradient2(low='#4575b4', mid='#ffffbf', high='#d73027') + \\\n", " ggtitle(\"Histogram geom, gradient2 fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "f23dc5d7", "metadata": {}, "source": [ "#### Discrete " ] }, { "cell_type": "code", "execution_count": 92, "id": "827e7040", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.470509Z", "iopub.status.busy": "2024-04-17T07:30:00.470389Z", "iopub.status.idle": "2024-04-17T07:30:00.476702Z", "shell.execute_reply": "2024-04-17T07:30:00.476524Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(fill='fl'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Bar geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_brewer(type='qual', palette='Set1') + \\\n", " ggtitle(\"Bar geom, brewer fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 93, "id": "09736ae3", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.477590Z", "iopub.status.busy": "2024-04-17T07:30:00.477514Z", "iopub.status.idle": "2024-04-17T07:30:00.484146Z", "shell.execute_reply": "2024-04-17T07:30:00.483972Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(fill='fl'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Bar geom, default fill scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_manual(values=['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6']) + \\\n", " ggtitle(\"Bar geom, manual fill scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "35d89329", "metadata": {}, "source": [ "### Size & Shape Scales " ] }, { "cell_type": "code", "execution_count": 94, "id": "02c92038", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.485076Z", "iopub.status.busy": "2024-04-17T07:30:00.485001Z", "iopub.status.idle": "2024-04-17T07:30:00.490933Z", "shell.execute_reply": "2024-04-17T07:30:00.490758Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(size='cyl'), shape=21, alpha=.2)\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default size scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_size_area() + \\\n", " ggtitle(\"Point geom, area size scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 95, "id": "23ecb885", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.491841Z", "iopub.status.busy": "2024-04-17T07:30:00.491758Z", "iopub.status.idle": "2024-04-17T07:30:00.497816Z", "shell.execute_reply": "2024-04-17T07:30:00.497646Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(size='cyl'), shape=21, alpha=.2)\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default size scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_size(range=[3, 6]) + \\\n", " ggtitle(\"Point geom, size scale in range 3..6\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 96, "id": "4654598b", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.498756Z", "iopub.status.busy": "2024-04-17T07:30:00.498638Z", "iopub.status.idle": "2024-04-17T07:30:00.502986Z", "shell.execute_reply": "2024-04-17T07:30:00.502814Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df[mpg_df[\"fl\"] == \"p\"], aes('hwy', 'cty')) + \\\n", " geom_lollipop(aes(linewidth='cyl'), slope=.7, intercept=.8, dir='s') + \\\n", " coord_fixed()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Lollipop geom, default linewidth scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_linewidth(range=[.5, 2]) + \\\n", " ggtitle(\"Lollipop geom, scaled linewidth\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 97, "id": "ad1238f9", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.503885Z", "iopub.status.busy": "2024-04-17T07:30:00.503808Z", "iopub.status.idle": "2024-04-17T07:30:00.509950Z", "shell.execute_reply": "2024-04-17T07:30:00.509778Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(stroke='cyl'), shape=1, alpha=.2)\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default stroke scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_stroke(range=[.5, 2]) + \\\n", " ggtitle(\"Point geom, scaled stroke\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 98, "id": "e2cd66c6", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.510903Z", "iopub.status.busy": "2024-04-17T07:30:00.510784Z", "iopub.status.idle": "2024-04-17T07:30:00.514593Z", "shell.execute_reply": "2024-04-17T07:30:00.514412Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(fl_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(shape='fl'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default shape scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_shape(solid=False) + \\\n", " ggtitle(\"Point geom, shape scale with solid=False\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 99, "id": "69b61ad5", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.515501Z", "iopub.status.busy": "2024-04-17T07:30:00.515428Z", "iopub.status.idle": "2024-04-17T07:30:00.518838Z", "shell.execute_reply": "2024-04-17T07:30:00.518661Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(fl_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(shape='fl'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default shape scale\")\n", "p_bunch_2 = p_common + \\\n", " scale_shape_manual(values=[0, 12, 1, 10, 3, 13, 2, 4]) + \\\n", " ggtitle(\"Point geom, manual shape scale\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "62ebbaca", "metadata": {}, "source": [ "## Coordinate Systems " ] }, { "cell_type": "code", "execution_count": 100, "id": "06df1a82", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.519750Z", "iopub.status.busy": "2024-04-17T07:30:00.519671Z", "iopub.status.idle": "2024-04-17T07:30:00.525051Z", "shell.execute_reply": "2024-04-17T07:30:00.524878Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Bar geom, default coordinate system\")\n", "p_bunch_2 = p_common + \\\n", " coord_cartesian(ylim=[0, 250]) + \\\n", " ggtitle(\"Bar geom, cartesian coordinate system\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 101, "id": "cee1841e-efd0-4861-b989-a8754b376749", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.525958Z", "iopub.status.busy": "2024-04-17T07:30:00.525879Z", "iopub.status.idle": "2024-04-17T07:30:00.531444Z", "shell.execute_reply": "2024-04-17T07:30:00.531270Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default coordinate system\")\n", "p_bunch_2 = p_common + \\\n", " coord_polar() + \\\n", " ggtitle(\"Point geom, polar coordinate system\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 102, "id": "4c1f0f7d", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.532399Z", "iopub.status.busy": "2024-04-17T07:30:00.532270Z", "iopub.status.idle": "2024-04-17T07:30:00.537913Z", "shell.execute_reply": "2024-04-17T07:30:00.537738Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Point geom, default coordinate system\")\n", "p_bunch_2 = p_common + \\\n", " coord_fixed() + \\\n", " ggtitle(\"Point geom, fixed coordinate system\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 103, "id": "228f4f81", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.538855Z", "iopub.status.busy": "2024-04-17T07:30:00.538734Z", "iopub.status.idle": "2024-04-17T07:30:00.563093Z", "shell.execute_reply": "2024-04-17T07:30:00.562893Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot() + \\\n", " geom_polygon(data=states_df)\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Polygon geom, default coordinate system\")\n", "p_bunch_2 = p_common + \\\n", " coord_map() + \\\n", " ggtitle(\"Polygon geom, map coordinate system\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 104, "id": "411e8799", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.564072Z", "iopub.status.busy": "2024-04-17T07:30:00.563992Z", "iopub.status.idle": "2024-04-17T07:30:00.570406Z", "shell.execute_reply": "2024-04-17T07:30:00.570225Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Bar geom, default coordinate system\")\n", "p_bunch_2 = p_common + \\\n", " coord_flip() + \\\n", " ggtitle(\"Bar geom, flipped coordinates\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "f972e481", "metadata": {}, "source": [ "## Position Adjustments " ] }, { "cell_type": "code", "execution_count": 105, "id": "4392f94e", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.571401Z", "iopub.status.busy": "2024-04-17T07:30:00.571287Z", "iopub.status.idle": "2024-04-17T07:30:00.577724Z", "shell.execute_reply": "2024-04-17T07:30:00.577549Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(fill='drv')) + \\\n", " ggtitle(\"Bar geom, default position\")\n", "p_bunch_2 = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(fill='drv'), position='dodge') + \\\n", " ggtitle(\"Bar geom, dodge position\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 106, "id": "41fdb119", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.578562Z", "iopub.status.busy": "2024-04-17T07:30:00.578449Z", "iopub.status.idle": "2024-04-17T07:30:00.633224Z", "shell.execute_reply": "2024-04-17T07:30:00.632993Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_density(aes(fill='drv'), color=\"black\") + \\\n", " ggtitle(\"Density geom, default position\")\n", "p_bunch_2 = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_density(aes(fill='drv'), color=\"black\", position='stack') + \\\n", " ggtitle(\"Density geom, stack position\")\n", "p_bunch_3 = ggplot(mpg_df, aes(x='hwy')) + \\\n", " geom_density(aes(fill='drv'), color=\"black\", position='fill') + \\\n", " ggtitle(\"Density geom, fill position\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2, p_bunch_3])" ] }, { "cell_type": "code", "execution_count": 107, "id": "c47ff5a9", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.634408Z", "iopub.status.busy": "2024-04-17T07:30:00.634322Z", "iopub.status.idle": "2024-04-17T07:30:00.641605Z", "shell.execute_reply": "2024-04-17T07:30:00.641321Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_bunch_1 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point() + \\\n", " ggtitle(\"Point geom, default position\")\n", "p_bunch_2 = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(position='jitter') + \\\n", " ggtitle(\"Point geom, jitter position\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 108, "id": "2d3c01ac", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.642688Z", "iopub.status.busy": "2024-04-17T07:30:00.642492Z", "iopub.status.idle": "2024-04-17T07:30:00.652341Z", "shell.execute_reply": "2024-04-17T07:30:00.652159Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cyl', 'hwy', fill='drv'))\n", "p_bunch_1 = p_common + \\\n", " geom_boxplot() + \\\n", " geom_point(color='black', shape=21) + \\\n", " ggtitle(\"Point geom, default position\")\n", "p_bunch_2 = p_common + \\\n", " geom_boxplot() + \\\n", " geom_point(position='jitterdodge', \\\n", " color='black', shape=21) + \\\n", " ggtitle(\"Point geom, jitterdodge position\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 109, "id": "cccf951d", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.653311Z", "iopub.status.busy": "2024-04-17T07:30:00.653175Z", "iopub.status.idle": "2024-04-17T07:30:00.659336Z", "shell.execute_reply": "2024-04-17T07:30:00.659161Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('class', 'hwy')) + \\\n", " geom_bar()\n", "p_bunch_1 = p_common + \\\n", " geom_text(aes(label='..count..'), stat='count') + \\\n", " ggtitle(\"Text geom, default position\")\n", "p_bunch_2 = p_common + \\\n", " geom_text(aes(label='..count..'), stat='count', color='white', \\\n", " position=position_nudge(y=-2.5)) + \\\n", " ggtitle(\"Text geom, nudge position\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "6efb0aad", "metadata": {}, "source": [ "## Themes " ] }, { "cell_type": "code", "execution_count": 110, "id": "939ffac3", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.660251Z", "iopub.status.busy": "2024-04-17T07:30:00.660172Z", "iopub.status.idle": "2024-04-17T07:30:00.677801Z", "shell.execute_reply": "2024-04-17T07:30:00.677619Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point()\n", "p_bunch = []\n", "p_bunch.append(p_common + ggtitle(\"Default theme\"))\n", "p_bunch.append(p_common + theme_none() + ggtitle(\"Empty theme\"))\n", "p_bunch.append(p_common + theme_void() + ggtitle(\"Void theme\"))\n", "p_bunch.append(p_common + theme_minimal() + ggtitle(\"Minimalistic theme\"))\n", "p_bunch.append(p_common + theme_classic() + ggtitle(\"Classic theme\"))\n", "p_bunch.append(p_common + theme_grey() + ggtitle(\"Grey theme\"))\n", "p_bunch.append(p_common + theme_light() + ggtitle(\"Light theme\"))\n", "p_bunch.append(p_common + theme_bw() + ggtitle(\"Dark-on-light theme\"))\n", "\n", "gggrid(p_bunch, ncol=2)" ] }, { "cell_type": "code", "execution_count": 111, "id": "a9da20f0", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.678870Z", "iopub.status.busy": "2024-04-17T07:30:00.678749Z", "iopub.status.idle": "2024-04-17T07:30:00.683813Z", "shell.execute_reply": "2024-04-17T07:30:00.683643Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "background_color_light = '#ffffe5'\n", "main_color_dark = '#00441b'\n", "main_color_normal = '#238b45'\n", "main_color_light = '#f7fcf5'\n", "\n", "custom_theme = theme(\n", " line=element_line(color=main_color_normal, size=2),\n", " rect=element_rect(color=main_color_normal, fill=main_color_light, size=2),\n", " text=element_text(color=main_color_dark, family=\"Courier\", face=\"bold\"),\n", " geom=element_geom(pen=main_color_normal),\n", " axis_ontop=True,\n", " axis_ticks=element_line(color=main_color_normal, size=1),\n", " axis_ticks_length=7,\n", " legend_background=element_rect(size=1),\n", " legend_position='bottom',\n", " panel_grid_major=element_line(color=main_color_normal, size=.5),\n", " panel_grid_minor='blank',\n", " plot_background=element_rect(fill=background_color_light, size=1),\n", " axis_tooltip=element_rect(color=main_color_dark)\n", ")\n", "\n", "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point() + \\\n", " theme_none() + \\\n", " custom_theme + \\\n", " ggtitle(\"Custom theme\")" ] }, { "cell_type": "markdown", "id": "92b52211", "metadata": {}, "source": [ "## Flavors " ] }, { "cell_type": "code", "execution_count": 112, "id": "f7fa6852", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.684952Z", "iopub.status.busy": "2024-04-17T07:30:00.684838Z", "iopub.status.idle": "2024-04-17T07:30:00.698106Z", "shell.execute_reply": "2024-04-17T07:30:00.697834Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point() + \\\n", " theme_grey()\n", "p_bunch = []\n", "p_bunch.append(p_common + ggtitle(\"Without flavor\"))\n", "p_bunch.append(p_common + flavor_darcula() + ggtitle(\"flavor_darcula()\"))\n", "p_bunch.append(p_common + flavor_solarized_light() + ggtitle(\"flavor_solarized_light()\"))\n", "p_bunch.append(p_common + flavor_solarized_dark() + ggtitle(\"flavor_solarized_dark()\"))\n", "p_bunch.append(p_common + flavor_high_contrast_light() + ggtitle(\"flavor_high_contrast_light()\"))\n", "p_bunch.append(p_common + flavor_high_contrast_dark() + ggtitle(\"flavor_high_contrast_dark()\"))\n", "\n", "gggrid(p_bunch, ncol=2)" ] }, { "cell_type": "markdown", "id": "918134ba", "metadata": {}, "source": [ "## Faceting " ] }, { "cell_type": "code", "execution_count": 113, "id": "3c0d116a", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.699021Z", "iopub.status.busy": "2024-04-17T07:30:00.698910Z", "iopub.status.idle": "2024-04-17T07:30:00.703964Z", "shell.execute_reply": "2024-04-17T07:30:00.703786Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point() + \\\n", " facet_grid(x='fl', y='year')" ] }, { "cell_type": "code", "execution_count": 114, "id": "30eb87af", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.704879Z", "iopub.status.busy": "2024-04-17T07:30:00.704796Z", "iopub.status.idle": "2024-04-17T07:30:00.709104Z", "shell.execute_reply": "2024-04-17T07:30:00.708934Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point() + \\\n", " facet_wrap(facets='fl', ncol=3)" ] }, { "cell_type": "markdown", "id": "5fba9d79", "metadata": {}, "source": [ "## Labels & Legends " ] }, { "cell_type": "code", "execution_count": 115, "id": "99f13f41", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.710046Z", "iopub.status.busy": "2024-04-17T07:30:00.709922Z", "iopub.status.idle": "2024-04-17T07:30:00.715615Z", "shell.execute_reply": "2024-04-17T07:30:00.715445Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Default plot\")\n", "p_bunch_2 = p_common + \\\n", " labs(x='City miles per gallon', y='Highway miles per gallon') + \\\n", " ggtitle(\"Use labs()\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 116, "id": "0c33b33c", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.716506Z", "iopub.status.busy": "2024-04-17T07:30:00.716423Z", "iopub.status.idle": "2024-04-17T07:30:00.722121Z", "shell.execute_reply": "2024-04-17T07:30:00.721951Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Default plot\")\n", "p_bunch_2 = p_common + \\\n", " xlab('City miles per gallon') + \\\n", " ylab('Highway miles per gallon') + \\\n", " ggtitle(\"Use xlab() and ylab()\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 117, "id": "8805e861", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.722964Z", "iopub.status.busy": "2024-04-17T07:30:00.722822Z", "iopub.status.idle": "2024-04-17T07:30:00.729008Z", "shell.execute_reply": "2024-04-17T07:30:00.728837Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(fill='fl'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Default plot\")\n", "p_bunch_2 = p_common + \\\n", " theme(legend_position='top') + \\\n", " ggtitle(\"Use legend_position='top'\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 118, "id": "08b89306", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.729795Z", "iopub.status.busy": "2024-04-17T07:30:00.729718Z", "iopub.status.idle": "2024-04-17T07:30:00.735729Z", "shell.execute_reply": "2024-04-17T07:30:00.735560Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes('cty', 'hwy')) + \\\n", " geom_point(aes(color='hwy'))\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Default plot\")\n", "p_bunch_2 = p_common + \\\n", " scale_color_gradient(\n", " guide=guide_colorbar(nbin=40, barwidth=10, barheight=200)\n", " ) + \\\n", " ggtitle(\"Use guide_colorbar()\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "code", "execution_count": 119, "id": "1c43a537", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.736515Z", "iopub.status.busy": "2024-04-17T07:30:00.736428Z", "iopub.status.idle": "2024-04-17T07:30:00.743808Z", "shell.execute_reply": "2024-04-17T07:30:00.743630Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot(mpg_df, aes(x='fl')) + \\\n", " geom_bar(aes(fill='manufacturer')) + \\\n", " theme(legend_position='bottom')\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Default plot\")\n", "p_bunch_2 = p_common + \\\n", " scale_fill_discrete(guide=guide_legend(nrow=3)) + \\\n", " ggtitle(\"Use guide_legend()\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2])" ] }, { "cell_type": "markdown", "id": "ae6bfc21", "metadata": {}, "source": [ "## Zooming " ] }, { "cell_type": "code", "execution_count": 120, "id": "b18cb051", "metadata": { "execution": { "iopub.execute_input": "2024-04-17T07:30:00.744637Z", "iopub.status.busy": "2024-04-17T07:30:00.744560Z", "iopub.status.idle": "2024-04-17T07:30:00.780758Z", "shell.execute_reply": "2024-04-17T07:30:00.780437Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_common = ggplot() + \\\n", " geom_map(data=states_df) + \\\n", " theme_classic()\n", "p_bunch_1 = p_common + \\\n", " ggtitle(\"Default plot\")\n", "p_bunch_2 = p_common + \\\n", " scale_x_continuous(limits=[-92, -82]) + \\\n", " ylim(36, 43) + \\\n", " ggtitle(\"Zoom with clipping\")\n", "p_bunch_3 = p_common + \\\n", " coord_map(xlim=[-92, -82], ylim=[36, 43]) + \\\n", " ggtitle(\"Zoom without clipping\")\n", "\n", "gggrid([p_bunch_1, p_bunch_2, p_bunch_3])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 5 }