{
"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",
" Unnamed: 0 | \n",
" manufacturer | \n",
" model | \n",
" displ | \n",
" year | \n",
" cyl | \n",
" trans | \n",
" drv | \n",
" cty | \n",
" hwy | \n",
" fl | \n",
" class | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" audi | \n",
" a4 | \n",
" 1.8 | \n",
" 1999 | \n",
" 4 | \n",
" auto(l5) | \n",
" f | \n",
" 18 | \n",
" 29 | \n",
" p | \n",
" compact | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" audi | \n",
" a4 | \n",
" 1.8 | \n",
" 1999 | \n",
" 4 | \n",
" manual(m5) | \n",
" f | \n",
" 21 | \n",
" 29 | \n",
" p | \n",
" compact | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" audi | \n",
" a4 | \n",
" 2.0 | \n",
" 2008 | \n",
" 4 | \n",
" manual(m6) | \n",
" f | \n",
" 20 | \n",
" 31 | \n",
" p | \n",
" compact | \n",
"
\n",
" \n",
"
\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",
" class | \n",
" min | \n",
" median | \n",
" max | \n",
" count | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2seater | \n",
" 23 | \n",
" 25.0 | \n",
" 26 | \n",
" 5 | \n",
"
\n",
" \n",
" 1 | \n",
" compact | \n",
" 23 | \n",
" 27.0 | \n",
" 44 | \n",
" 47 | \n",
"
\n",
" \n",
" 2 | \n",
" midsize | \n",
" 23 | \n",
" 27.0 | \n",
" 32 | \n",
" 41 | \n",
"
\n",
" \n",
"
\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",
" cty | \n",
" hwy | \n",
" fl | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 9 | \n",
" 12 | \n",
" e | \n",
"
\n",
" \n",
" 1 | \n",
" 11 | \n",
" 14 | \n",
" [e, p] | \n",
"
\n",
" \n",
" 2 | \n",
" 11 | \n",
" 15 | \n",
" r | \n",
"
\n",
" \n",
"
\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",
" Unnamed: 0 | \n",
" date | \n",
" pce | \n",
" pop | \n",
" psavert | \n",
" uempmed | \n",
" unemploy | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 1967-07-01 | \n",
" 506.7 | \n",
" 198712.0 | \n",
" 12.6 | \n",
" 4.5 | \n",
" 2944 | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 1967-08-01 | \n",
" 509.8 | \n",
" 198911.0 | \n",
" 12.6 | \n",
" 4.7 | \n",
" 2945 | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 1967-09-01 | \n",
" 515.6 | \n",
" 199113.0 | \n",
" 11.9 | \n",
" 4.6 | \n",
" 2958 | \n",
"
\n",
" \n",
"
\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",
" Unnamed: 0 | \n",
" PID | \n",
" county | \n",
" state | \n",
" area | \n",
" poptotal | \n",
" popdensity | \n",
" popwhite | \n",
" popblack | \n",
" popamerindian | \n",
" ... | \n",
" percollege | \n",
" percprof | \n",
" poppovertyknown | \n",
" percpovertyknown | \n",
" percbelowpoverty | \n",
" percchildbelowpovert | \n",
" percadultpoverty | \n",
" percelderlypoverty | \n",
" inmetro | \n",
" category | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 561 | \n",
" ADAMS | \n",
" IL | \n",
" 0.052 | \n",
" 66090 | \n",
" 1270.961540 | \n",
" 63917 | \n",
" 1702 | \n",
" 98 | \n",
" ... | \n",
" 19.631392 | \n",
" 4.355859 | \n",
" 63628 | \n",
" 96.274777 | \n",
" 13.151443 | \n",
" 18.011717 | \n",
" 11.009776 | \n",
" 12.443812 | \n",
" 0 | \n",
" AAR | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 562 | \n",
" ALEXANDER | \n",
" IL | \n",
" 0.014 | \n",
" 10626 | \n",
" 759.000000 | \n",
" 7054 | \n",
" 3496 | \n",
" 19 | \n",
" ... | \n",
" 11.243308 | \n",
" 2.870315 | \n",
" 10529 | \n",
" 99.087145 | \n",
" 32.244278 | \n",
" 45.826514 | \n",
" 27.385647 | \n",
" 25.228976 | \n",
" 0 | \n",
" LHR | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 563 | \n",
" BOND | \n",
" IL | \n",
" 0.022 | \n",
" 14991 | \n",
" 681.409091 | \n",
" 14477 | \n",
" 429 | \n",
" 35 | \n",
" ... | \n",
" 17.033819 | \n",
" 4.488572 | \n",
" 14235 | \n",
" 94.956974 | \n",
" 12.068844 | \n",
" 14.036061 | \n",
" 10.852090 | \n",
" 12.697410 | \n",
" 0 | \n",
" AAR | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 564 | \n",
" BOONE | \n",
" IL | \n",
" 0.017 | \n",
" 30806 | \n",
" 1812.117650 | \n",
" 29344 | \n",
" 127 | \n",
" 46 | \n",
" ... | \n",
" 17.278954 | \n",
" 4.197800 | \n",
" 30337 | \n",
" 98.477569 | \n",
" 7.209019 | \n",
" 11.179536 | \n",
" 5.536013 | \n",
" 6.217047 | \n",
" 1 | \n",
" ALU | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 565 | \n",
" BROWN | \n",
" IL | \n",
" 0.018 | \n",
" 5836 | \n",
" 324.222222 | \n",
" 5264 | \n",
" 547 | \n",
" 14 | \n",
" ... | \n",
" 14.475999 | \n",
" 3.367680 | \n",
" 4815 | \n",
" 82.505140 | \n",
" 13.520249 | \n",
" 13.022889 | \n",
" 11.143211 | \n",
" 19.200000 | \n",
" 0 | \n",
" AAR | \n",
"
\n",
" \n",
"
\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",
" state | \n",
" population | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" IL | \n",
" 11430602 | \n",
"
\n",
" \n",
" 1 | \n",
" IN | \n",
" 5544159 | \n",
"
\n",
" \n",
" 2 | \n",
" MI | \n",
" 9295297 | \n",
"
\n",
" \n",
"
\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",
" state | \n",
" found name | \n",
" geometry | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" IL | \n",
" Illinois | \n",
" MULTIPOLYGON (((-89.13301 36.98200, -89.16777 ... | \n",
"
\n",
" \n",
" 1 | \n",
" IN | \n",
" Indiana | \n",
" MULTIPOLYGON (((-84.81993 39.10544, -84.83405 ... | \n",
"
\n",
" \n",
" 2 | \n",
" MI | \n",
" Michigan | \n",
" MULTIPOLYGON (((-90.41862 46.56636, -90.00014 ... | \n",
"
\n",
" \n",
"
\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",
" x | \n",
" y | \n",
" z | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" -1.000000 | \n",
" -1.0 | \n",
" 0.094354 | \n",
"
\n",
" \n",
" 1 | \n",
" -0.959184 | \n",
" -1.0 | \n",
" 0.096849 | \n",
"
\n",
" \n",
" 2 | \n",
" -0.918367 | \n",
" -1.0 | \n",
" 0.099189 | \n",
"
\n",
" \n",
"
\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
}