From 0cafc182bb6e9e5c61effb52354d5f69533dcdc3 Mon Sep 17 00:00:00 2001 From: kdorr Date: Wed, 15 Aug 2018 16:49:57 -0500 Subject: [PATCH 1/4] Add complex scatter --- _posts/altair-to-mpl-scatter-part2.md | 107 ++++++++++++++++++ _posts/pics/altair-to-mpl-scatter-part2_0.png | Bin 0 -> 42835 bytes _posts/pics/altair-to-mpl-scatter-part2_1.png | Bin 0 -> 18199 bytes _posts/pics/altair-to-mpl-scatter-part2_2.png | Bin 0 -> 17987 bytes 4 files changed, 107 insertions(+) create mode 100644 _posts/altair-to-mpl-scatter-part2.md create mode 100644 _posts/pics/altair-to-mpl-scatter-part2_0.png create mode 100644 _posts/pics/altair-to-mpl-scatter-part2_1.png create mode 100644 _posts/pics/altair-to-mpl-scatter-part2_2.png diff --git a/_posts/altair-to-mpl-scatter-part2.md b/_posts/altair-to-mpl-scatter-part2.md new file mode 100644 index 0000000..8cc7946 --- /dev/null +++ b/_posts/altair-to-mpl-scatter-part2.md @@ -0,0 +1,107 @@ +--- +layout: post +title: "Making a Scatter Plot - Part 2" +date: 2018-08-15 17:00:00 -0500 +author: "Kimberly Orr and Nabarun Pal" +categories: user-guide +tags: "intro about scatter" +excerpt_separator: +--- + +# Making a Complex Scatter Plot +At the time of writing, mpl-altair does not support bar charts, so this post will show how to create a bar chart in Altair, Matplotlib, and how mpl-altair _should_ implement bar chart conversion in the future. + +In the first part, we made a simple scatter plot. This post will look at a more complex plot. +We'll use the cars dataset again: +```python +from vega_datasets import data +cars = data.cars() +cars.head() +``` +**Acceleration** | **Cylinders** | **Displacement** | **Horsepower** | **Miles_per_Gallon** | **Name** | **Origin** | **Weight_in_lbs** | **Year** +:---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: +12.0 | 8 | 307.0 | 130.0 | 18.0 | chevrolet chevelle malibu | USA | 3504 | 1970-01-01 +11.5 | 8 | 350.0 | 165.0 | 15.0 | buick skylark 320 | USA | 3693 | 1970-01-01 +11.0 | 8 | 318.0 | 150.0 | 18.0 | plymouth satellite | USA | 3436 | 1970-01-01 +12.0 | 8 | 304.0 | 150.0 | 16.0 | amc rebel sst | USA | 3433 | 1970-01-01 +10.5 | 8 | 302.0 | 140.0 | 17.0 | ford torino | USA | 3449 | 1970-01-01 + +In addition to looking at Horsepower vs Weight, let's color each point by its origin country. + +## Altair +Since Altair is based on linking columns to encodings, we just have to specify +that the color encoding comes from the Origin column. + +Also, notice that a legend is automatically generated. +```python +import altair as alt +alt.Chart(cars).mark_point().encode( + alt.X('Weight_in_lbs'), + alt.Y('Horsepower'), + alt.Color('Origin') +) +``` +![png](pics/altair-to-mpl-scatter-part2_0.png) + +## Matplotlib +If we wanted to color our points by a quantitative variable, we could have just +used +```python +ax.scatter('Weight_in_lbs', 'Horsepower', c='quantitative_column', data=cars) +``` +However, the scatter function currently doesn't allow scalar mappables for categorical data. +So, we have to plot points from each country as separate scatter plots on the same axes object. + +There are a couple options for this. One is to create subsets of your data via `df['col'].unique()`. Another is to use the `df.groupby('col')` function to create the subset within the for loop. + +Specifying the label as a parameter in scatter allows us to call `ax.legend()` to generate a legend. +```python +import matplotlib.pyplot as plt +``` +```python +# Option 1: df['col'].unique() +fig, ax = plt.subplots() +for car in cars['Origin'].unique(): + d_ = cars[cars['Origin'] == car] + ax.scatter(data=d_, x='Weight_in_lbs', y='Horsepower', label=car) +ax.set_xlabel('Weight_in_lbs') +ax.set_ylabel('Horsepower') +ax.set_xlim([0, None]) +ax.set_ylim([0, None]) +ax.legend(title='Origin') +plt.grid() +plt.show() +``` +![png](pics/altair-to-mpl-scatter-part2_1.png) + +```python +# Option 2: df.groupby() +fig, ax = plt.subplots() +for car_origin, cars_subset in cars.groupby(['Origin']): + ax.scatter(data=cars_subset, x='Weight_in_lbs', y='Horsepower', label=car_origin) +ax.set_xlabel('Weight_in_lbs') +ax.set_ylabel('Horsepower') +ax.set_xlim([0, None]) +ax.set_ylim([0, None]) +ax.legend(title='Origin') +plt.grid() +plt.show() +``` +![png](pics/altair-to-mpl-scatter-part2_2.png) + +## mpl-altair +At the time of writing, mpl-altair doesn't support bar charts. + +If mpl-altair supported bar charts, this is how an Altair chart would get rendered in mpl-altair: +```python +import altair as alt +import matplotlib.pyplot as plt +import mplaltair +chart = alt.Chart(cars).mark_point().encode( + alt.X('Weight_in_lbs'), + alt.Y('Horsepower'), + alt.Color('Origin') +) +fig, ax = mplaltair.convert(chart) +plt.show() +``` \ No newline at end of file diff --git a/_posts/pics/altair-to-mpl-scatter-part2_0.png b/_posts/pics/altair-to-mpl-scatter-part2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3197cefcdf904db0e7a6074aec9638bdd7e724cb GIT binary patch literal 42835 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 J&eO8G{!jP@Mjg1fuB+ceKJ@0$76 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 Y=gqd+v$yIc@DLjYPgg&ebxsLQ03Q4=@Bjb+ literal 0 HcmV?d00001 diff --git a/_posts/pics/altair-to-mpl-scatter-part2_2.png b/_posts/pics/altair-to-mpl-scatter-part2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8499fa204f682e291b1315d8d0a2a75e9ca87b9c GIT binary patch literal 17987 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 literal 0 HcmV?d00001 From 7b13fa59875c2f238919722470418d2cadd41eef Mon Sep 17 00:00:00 2001 From: kdorr Date: Wed, 15 Aug 2018 17:24:40 -0500 Subject: [PATCH 2/4] Fix wording --- _posts/altair-to-mpl-scatter-part2.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_posts/altair-to-mpl-scatter-part2.md b/_posts/altair-to-mpl-scatter-part2.md index 8cc7946..c64922c 100644 --- a/_posts/altair-to-mpl-scatter-part2.md +++ b/_posts/altair-to-mpl-scatter-part2.md @@ -9,7 +9,7 @@ excerpt_separator: --- # Making a Complex Scatter Plot -At the time of writing, mpl-altair does not support bar charts, so this post will show how to create a bar chart in Altair, Matplotlib, and how mpl-altair _should_ implement bar chart conversion in the future. +At the time of writing, mpl-altair does not support scatter plots with nominal or ordinal color encodings, so this post will show how to create a complex scatter plot in Altair, Matplotlib, and how mpl-altair _should_ implement the chart conversion in the future. In the first part, we made a simple scatter plot. This post will look at a more complex plot. We'll use the cars dataset again: @@ -90,9 +90,9 @@ plt.show() ![png](pics/altair-to-mpl-scatter-part2_2.png) ## mpl-altair -At the time of writing, mpl-altair doesn't support bar charts. +At the time of writing, mpl-altair doesn't support scatter plots with categorical colors. -If mpl-altair supported bar charts, this is how an Altair chart would get rendered in mpl-altair: +If mpl-altair supported categorical colors with scatter plots, this is how an Altair chart would get rendered in mpl-altair: ```python import altair as alt import matplotlib.pyplot as plt From 603ddf964266f48c1ffd8aac855c9a4998796d34 Mon Sep 17 00:00:00 2001 From: korr Date: Mon, 20 Aug 2018 16:49:14 -0500 Subject: [PATCH 3/4] Wording fixes --- _posts/altair-to-mpl-scatter-part2.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/_posts/altair-to-mpl-scatter-part2.md b/_posts/altair-to-mpl-scatter-part2.md index c64922c..1997437 100644 --- a/_posts/altair-to-mpl-scatter-part2.md +++ b/_posts/altair-to-mpl-scatter-part2.md @@ -11,7 +11,7 @@ excerpt_separator: # Making a Complex Scatter Plot At the time of writing, mpl-altair does not support scatter plots with nominal or ordinal color encodings, so this post will show how to create a complex scatter plot in Altair, Matplotlib, and how mpl-altair _should_ implement the chart conversion in the future. -In the first part, we made a simple scatter plot. This post will look at a more complex plot. +In the [first part]({{ site.baseurl }}{% link _posts/altair-to-mpl-scatter-part1.md %}), we made a simple scatter plot. This post will look at a more complex plot. We'll use the cars dataset again: ```python from vega_datasets import data @@ -29,8 +29,8 @@ cars.head() In addition to looking at Horsepower vs Weight, let's color each point by its origin country. ## Altair -Since Altair is based on linking columns to encodings, we just have to specify -that the color encoding comes from the Origin column. +Since Altair is based on linking columns to encodings, we have to specify +that the color encoding comes from the _Origin_ column. Also, notice that a legend is automatically generated. ```python @@ -49,7 +49,7 @@ used ```python ax.scatter('Weight_in_lbs', 'Horsepower', c='quantitative_column', data=cars) ``` -However, the scatter function currently doesn't allow scalar mappables for categorical data. +However, the scatter function currently doesn't allow categorical color definitions for categorical data. So, we have to plot points from each country as separate scatter plots on the same axes object. There are a couple options for this. One is to create subsets of your data via `df['col'].unique()`. Another is to use the `df.groupby('col')` function to create the subset within the for loop. @@ -69,8 +69,8 @@ ax.set_ylabel('Horsepower') ax.set_xlim([0, None]) ax.set_ylim([0, None]) ax.legend(title='Origin') -plt.grid() -plt.show() +ax.grid() +fig.show() ``` ![png](pics/altair-to-mpl-scatter-part2_1.png) @@ -84,8 +84,8 @@ ax.set_ylabel('Horsepower') ax.set_xlim([0, None]) ax.set_ylim([0, None]) ax.legend(title='Origin') -plt.grid() -plt.show() +ax.grid() +fig.show() ``` ![png](pics/altair-to-mpl-scatter-part2_2.png) From abb3d056bbb99ad7e35c39d1dfb8ae22cda066de Mon Sep 17 00:00:00 2001 From: korr Date: Mon, 20 Aug 2018 18:55:03 -0500 Subject: [PATCH 4/4] Update filename to follow Jekyll convention --- ...ter-part2.md => 2018-08-15-altair-to-mpl-scatter-part2.md} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename _posts/{altair-to-mpl-scatter-part2.md => 2018-08-15-altair-to-mpl-scatter-part2.md} (94%) diff --git a/_posts/altair-to-mpl-scatter-part2.md b/_posts/2018-08-15-altair-to-mpl-scatter-part2.md similarity index 94% rename from _posts/altair-to-mpl-scatter-part2.md rename to _posts/2018-08-15-altair-to-mpl-scatter-part2.md index 1997437..7ac2f4d 100644 --- a/_posts/altair-to-mpl-scatter-part2.md +++ b/_posts/2018-08-15-altair-to-mpl-scatter-part2.md @@ -2,7 +2,7 @@ layout: post title: "Making a Scatter Plot - Part 2" date: 2018-08-15 17:00:00 -0500 -author: "Kimberly Orr and Nabarun Pal" +author: "Kimberly Orr", "Nabarun Pal" categories: user-guide tags: "intro about scatter" excerpt_separator: @@ -11,7 +11,7 @@ excerpt_separator: # Making a Complex Scatter Plot At the time of writing, mpl-altair does not support scatter plots with nominal or ordinal color encodings, so this post will show how to create a complex scatter plot in Altair, Matplotlib, and how mpl-altair _should_ implement the chart conversion in the future. -In the [first part]({{ site.baseurl }}{% link _posts/altair-to-mpl-scatter-part1.md %}), we made a simple scatter plot. This post will look at a more complex plot. +In the [first part]({{ site.baseurl }}{% link _posts/2018-08-15-altair-to-mpl-scatter-part1.md %}), we made a simple scatter plot. This post will look at a more complex plot. We'll use the cars dataset again: ```python from vega_datasets import data