From 325027106a3561fac7988238838dc0468969b8b4 Mon Sep 17 00:00:00 2001 From: kdorr Date: Wed, 15 Aug 2018 15:44:33 -0500 Subject: [PATCH 1/5] Add altair to mpl line plot --- _posts/altair-to-mpl-line.md | 147 +++++++++++++++++++++++++++ _posts/pics/altair-to-mpl-line_0.png | Bin 0 -> 21158 bytes _posts/pics/altair-to-mpl-line_1.png | Bin 0 -> 19440 bytes 3 files changed, 147 insertions(+) create mode 100644 _posts/altair-to-mpl-line.md create mode 100644 _posts/pics/altair-to-mpl-line_0.png create mode 100644 _posts/pics/altair-to-mpl-line_1.png diff --git a/_posts/altair-to-mpl-line.md b/_posts/altair-to-mpl-line.md new file mode 100644 index 0000000..a3139c5 --- /dev/null +++ b/_posts/altair-to-mpl-line.md @@ -0,0 +1,147 @@ +--- +layout: post +title: "Making a Line Plot" +date: 2018-08-15 15:30:00 -0500 +author: "Kimberly Orr and Nabarun Pal" +categories: user-guide +tags: "intro about line" +excerpt_separator: +--- + +# Making a Line Plot +Altair works best with [long-form](https://altair-viz.github.io/user_guide/data.html#long-form-vs-wide-form-data) data. This is where each row contains a single observation along with all of its metadata stored as values. + +Matplotlib works a little better with wide-form data. + +Since mpl-altair converts from Altair to Matplotlib, let's look at how to create a line plot using Altair, Matplotlib, and mpl-altair with the following long-form data. + +```python +import pandas as pd +df = pd.DataFrame({ + 'set': [1, 2, 1, 2, 1, 2, 1, 2], + 'amount': [1, 4, 5, 3, 1, 7, 2, 9], + 'location': ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'] +}) +``` +If you need a scenario to help think about the data, imagine that you're running an experiment in several different locations and you take two measurements for each location. Now you want to visualize how the amount changed between the two sets of measurements at each location. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
setamountlocation
011a
124a
215b
323b
411c
527c
612d
729d
+
+ +## Altair +If we want to plot lines to show how each location changed between set one and set two, +we need to specify the data, tell Altair to plot lines with `mark_line()`, link the x +encoding channel with 'set', the y channel with 'amount', and the color channel with 'location'. +```python +import altair as alt +alt.Chart(df).mark_line().encode( + alt.X('set'), + alt.Y('amount'), + alt.Color('location') +) +``` +![png](pics/altair-to-mpl-line_0.png) + +## Matplotlib +In Matplotlib, just like with a categorical scatter plot, we have to plot a new line for every location. +Specifying a label with each line allows us to generate a legend with `ax.legend()`. +```python +import matplotlib.pyplot as plt +fig, ax = plt.subplots() +for loc, subset in df.groupby('location'): + ax.plot('set', 'amount', data=subset, label=loc) +ax.set_xlabel('set') +ax.set_ylabel('amount') +ax.legend(title='location') +plt.grid() +plt.show() +``` +![png](pics/altair-to-mpl-line_1.png) + +## mpl-altair +To render the Altair chart using Matplotlib: +```python +import altair as alt +import matplotlib.pyplot as plt +import mplaltair +chart = alt.Chart(df).mark_line().encode( + alt.X('set'), + alt.Y('amount'), + alt.Color('location') +) +fig, ax = mplaltair.convert(chart) +plt.show() +``` \ No newline at end of file diff --git a/_posts/pics/altair-to-mpl-line_0.png b/_posts/pics/altair-to-mpl-line_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2b0ab92e28a7033384a24bbba7efacc0263aaad0 GIT binary patch literal 21158 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 A*Z=?k literal 0 HcmV?d00001 diff --git a/_posts/pics/altair-to-mpl-line_1.png b/_posts/pics/altair-to-mpl-line_1.png new file mode 100644 index 0000000000000000000000000000000000000000..dabc708d6bd31f51a8b6be4fd8a02339c2705d5a GIT binary patch literal 19440 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
G0+##yIlLYg;KEGRAO?u1(a3pMJq1D}~ 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 bEGPaCLLJUF;?nd`00000NkvXXu0mjfCmUVV literal 0 HcmV?d00001 From cc3d833241d52754074e1e7c66ea2ae6ff07bcca Mon Sep 17 00:00:00 2001 From: kdorr Date: Wed, 15 Aug 2018 15:59:57 -0500 Subject: [PATCH 2/5] Add mpl-altair plot --- _posts/altair-to-mpl-line.md | 3 ++- _posts/pics/altair-to-mpl-line_2.png | Bin 0 -> 31534 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 _posts/pics/altair-to-mpl-line_2.png diff --git a/_posts/altair-to-mpl-line.md b/_posts/altair-to-mpl-line.md index a3139c5..4adf5ab 100644 --- a/_posts/altair-to-mpl-line.md +++ b/_posts/altair-to-mpl-line.md @@ -144,4 +144,5 @@ chart = alt.Chart(df).mark_line().encode( ) fig, ax = mplaltair.convert(chart) plt.show() -``` \ No newline at end of file +``` +![png](pics/altair-to-mpl-line_2.png) \ No newline at end of file diff --git a/_posts/pics/altair-to-mpl-line_2.png b/_posts/pics/altair-to-mpl-line_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a32249095b98cb0eb79d8a42016d6cf63d04b290 GIT binary patch literal 31534 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 Date: Wed, 15 Aug 2018 16:27:04 -0500 Subject: [PATCH 3/5] Clean up table --- _posts/altair-to-mpl-line.md | 86 +++++------------------------------- 1 file changed, 11 insertions(+), 75 deletions(-) diff --git a/_posts/altair-to-mpl-line.md b/_posts/altair-to-mpl-line.md index 4adf5ab..b67d34f 100644 --- a/_posts/altair-to-mpl-line.md +++ b/_posts/altair-to-mpl-line.md @@ -23,83 +23,19 @@ df = pd.DataFrame({ 'location': ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'] }) ``` -If you need a scenario to help think about the data, imagine that you're running an experiment in several different locations and you take two measurements for each location. Now you want to visualize how the amount changed between the two sets of measurements at each location. -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
setamountlocation
011a
124a
215b
323b
411c
527c
612d
729d
-
+A possible scenario for this dataset would be an experiment being run in several different locations with 2 measurements taken at each location. The goal with the visualization being to visualize how the amount changed between the two sets of measurements at each location. ## Altair If we want to plot lines to show how each location changed between set one and set two, From 14931c1457a5c784ae7ec6bdbadeb2e31f3c70e6 Mon Sep 17 00:00:00 2001 From: korr Date: Mon, 20 Aug 2018 17:59:17 -0500 Subject: [PATCH 4/5] Fixes The reference to the other post is untested. --- _posts/altair-to-mpl-line.md | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/_posts/altair-to-mpl-line.md b/_posts/altair-to-mpl-line.md index b67d34f..ff4d197 100644 --- a/_posts/altair-to-mpl-line.md +++ b/_posts/altair-to-mpl-line.md @@ -2,7 +2,7 @@ layout: post title: "Making a Line Plot" date: 2018-08-15 15:30:00 -0500 -author: "Kimberly Orr and Nabarun Pal" +author: "Kimberly Orr", "Nabarun Pal" categories: user-guide tags: "intro about line" excerpt_separator: @@ -35,12 +35,17 @@ df = pd.DataFrame({ 1 | 2 | d 2 | 9 | d -A possible scenario for this dataset would be an experiment being run in several different locations with 2 measurements taken at each location. The goal with the visualization being to visualize how the amount changed between the two sets of measurements at each location. +A possible scenario for this dataset would be an experiment being run in several different locations with 2 measurements taken at each location. The goal of the visualization being to visualize how the amount changed between the two sets of measurements at each location. ## Altair If we want to plot lines to show how each location changed between set one and set two, -we need to specify the data, tell Altair to plot lines with `mark_line()`, link the x -encoding channel with 'set', the y channel with 'amount', and the color channel with 'location'. +we need to +1. specify the data: `alt.chart(df)` +2. tell Altair to plot lines with `.mark_line()` +3. link the encoding channels: + - x with 'set' + - y with 'amount' + - color with 'location'. ```python import altair as alt alt.Chart(df).mark_line().encode( @@ -52,8 +57,8 @@ alt.Chart(df).mark_line().encode( ![png](pics/altair-to-mpl-line_0.png) ## Matplotlib -In Matplotlib, just like with a categorical scatter plot, we have to plot a new line for every location. -Specifying a label with each line allows us to generate a legend with `ax.legend()`. +In Matplotlib, just like with a [categorical scatter plot]({{ site.baseurl }}{% link _posts/2018-08-15-altair-to-mpl-scatter-part2.md %}), we have to plot a new line for every location. +Specifying a label for each line allows us to generate a legend with `ax.legend()`. ```python import matplotlib.pyplot as plt fig, ax = plt.subplots() @@ -81,4 +86,20 @@ chart = alt.Chart(df).mark_line().encode( fig, ax = mplaltair.convert(chart) plt.show() ``` -![png](pics/altair-to-mpl-line_2.png) \ No newline at end of file +![png](pics/altair-to-mpl-line_2.png) + +Since the Altair chart has been converted to Matplotlib objects, it's now possible to modify the chart using Matplotlib: +```python +import altair as alt +import matplotlib.pyplot as plt +import mplaltair +chart = alt.Chart(df).mark_line().encode( + alt.X('set'), + alt.Y('amount'), + alt.Color('location') +) +fig, ax = mplaltair.convert(chart) +ax.set_xlabel('set') +ax.set_ylabel('amount') +plt.show() +``` \ No newline at end of file From dbefbc06aba3224664c4df24f356ee4eb0569be5 Mon Sep 17 00:00:00 2001 From: korr Date: Mon, 20 Aug 2018 18:50:34 -0500 Subject: [PATCH 5/5] Update filename to follow Jekyll convention --- .../{altair-to-mpl-line.md => 2018-08-15-altair-to-mpl-line.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename _posts/{altair-to-mpl-line.md => 2018-08-15-altair-to-mpl-line.md} (100%) diff --git a/_posts/altair-to-mpl-line.md b/_posts/2018-08-15-altair-to-mpl-line.md similarity index 100% rename from _posts/altair-to-mpl-line.md rename to _posts/2018-08-15-altair-to-mpl-line.md