avatarBen Hui

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

5366

Abstract

<span class="hljs-string">'size'</span>:<span class="hljs-number">10</span>})

<span class="hljs-comment"># Decorations </span> plt.yticks(df.index, df.model, fontsize=<span class="hljs-number">12</span>) plt.xticks(fontsize=<span class="hljs-number">10</span>) plt.title(<span class="hljs-string">'Diverging Text Bars of Car Mileage'</span>, fontdict={<span class="hljs-string">'size'</span>:<span class="hljs-number">15</span>}) plt.grid(linestyle=<span class="hljs-string">'--'</span>, alpha=<span class="hljs-number">0.5</span>) plt.xlim(-<span class="hljs-number">2.5</span>, <span class="hljs-number">2.5</span>) plt.show()</pre></div><figure id="f3cd"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*MWvtq1S_Q954gI983fsfPA.png"><figcaption></figcaption></figure><p id="9dd1">13. Diverging Bars with texts (<b>vertical)</b></p><div id="5436"><pre>x = df.loc[:, [<span class="hljs-string">'mpg'</span>]] df[<span class="hljs-string">'mpg_z'</span>] = (x - x.mean()) / x.std() df[<span class="hljs-string">'colors'</span>] = [<span class="hljs-string">'red'</span> <span class="hljs-keyword">if</span> x < <span class="hljs-number">0</span> <span class="hljs-keyword">else</span> <span class="hljs-string">'green'</span> <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> df[<span class="hljs-string">'mpg_z'</span>]] df.sort_values(<span class="hljs-string">'mpg_z'</span>, inplace=<span class="hljs-literal">True</span>) df.reset_index(inplace=<span class="hljs-literal">True</span>)

<span class="hljs-comment"># Draw plot</span> plt.figure(figsize=(<span class="hljs-number">10</span>, <span class="hljs-number">6</span>), dpi=<span class="hljs-number">80</span>) plt.vlines(x=df.index, ymin=<span class="hljs-number">0</span>, ymax=df.mpg_z, color=df.colors, alpha=<span class="hljs-number">0.8</span>, linewidth=<span class="hljs-number">5</span>) <span class="hljs-keyword">for</span> y, x, tex <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(df.mpg_z, df.index, df.mpg_z): t = plt.text(x, y+<span class="hljs-number">0.2</span>, <span class="hljs-built_in">round</span>(tex, <span class="hljs-number">1</span>), horizontalalignment=<span class="hljs-string">'center'</span>, fontdict={ <span class="hljs-string">'color'</span>: <span class="hljs-string">'black'</span> <span class="hljs-keyword">if</span> x < <span class="hljs-number">0</span> <span class="hljs-keyword">else</span> <span class="hljs-string">'black'</span>, <span class="hljs-string">'size'</span>: <span class="hljs-number">8</span> })

<span class="hljs-comment"># Decorations</span> plt.xticks(df.index, df.model, fontsize=<span class="hljs-number">12</span>, rotation=<span class="hljs-number">90</span>) plt.yticks(fontsize=<span class="hljs-number">12</span>) plt.title(<span class="hljs-string">'Diverging Text Bars of Car Mileage'</span>, fontdict={<span class="hljs-string">'size'</span>: <span class="hljs-number">12</span>}) plt.grid(linestyle=<span class="hljs-string">'--'</span>, alpha=<span class="hljs-number">0.5</span>) plt.show()</pre></div><figure id="63ff"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*BwOzzpBRlTh0Na85ps9xuQ.png"><figcaption></figcaption></figure><p id="3702">14. Diverging Dot Plot</p><div id="7707"><pre>x = df.loc[:, [<span class="hljs-string">'mpg'</span>]] df[<span class="hljs-string">'mpg_z'</span>] = (x - x.mean()) / x.std() df[<span class="hljs-string">'colors'</span>] = [<span class="hljs-string">'red'</span> <span class="hljs-keyword">if</span> x < <span class="hljs-number">0</span> <span class="hljs-keyword">else</span> <span class="hljs-string">'darkgreen'</span> <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> df[<span class="hljs-string">'mpg_z'</span>]] df.sort_values(<span class="hljs-string">'mpg_z'</span>, inplace=<span class="hljs-literal">True</span>) df.reset_index(inplace=<span class="hljs-literal">True</span>)

<span class="hljs-comment"># Draw plot</span> plt.figure(figsize=(<span class="hljs-number">12</span>, <span class="hljs-number">10</span>), dpi=<span class="hljs-number">80</span>) plt.scatter(df.mpg_z, df.index, s=<span class="hljs-number">250</span>, alpha=<span class="hljs-number">.6</span>, color=df.colors) <span class="hljs-keyword">for</span> x, y, tex <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(df.mpg_z, df.index, df.mpg_z): t = plt.text(x, y, <span class="hljs-built_in">round</span>(tex, <span class="hljs-number">1</span>), horizontalalignment=<span class="hljs-string">'center'</span>, verticalalignment=<span class="hljs-string">'center'</span>, fontdict={<span class="hljs-string">'color'</span>: <span class="hljs-string">'black'</span>,<span class="hljs-string">'size'</span>: <span class="hljs-string">'10'</span>})

<span class="hljs-comment"># Decorations</span> <span class="hljs-comment"># Lighten borders</span> plt.gca().spines[<span class="hljs-string">"top"</span>].set_alpha(<span class="hljs-number">.3</span>) plt.gca().spines[<sp

Options

an class="hljs-string">"bottom"</span>].set_alpha(<span class="hljs-number">.3</span>) plt.gca().spines[<span class="hljs-string">"right"</span>].set_alpha(<span class="hljs-number">.3</span>) plt.gca().spines[<span class="hljs-string">"left"</span>].set_alpha(<span class="hljs-number">.3</span>)

plt.yticks(df.index, df.model,fontsize=<span class="hljs-number">10</span>) plt.xticks(fontsize=<span class="hljs-number">10</span>) plt.title(<span class="hljs-string">'Diverging Dotplot of Car Mileage'</span>, fontdict={<span class="hljs-string">'size'</span>: <span class="hljs-number">15</span>}) plt.xlabel(<span class="hljs-string">'Mileage'</span>,fontsize=<span class="hljs-number">10</span>) plt.grid(linestyle=<span class="hljs-string">'--'</span>, alpha=<span class="hljs-number">0.5</span>) plt.xlim(-<span class="hljs-number">2.5</span>, <span class="hljs-number">2.5</span>) plt.show()</pre></div><figure id="139f"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*YTeiUjs2rLp_S-Bi2mTqBA.png"><figcaption></figcaption></figure><p id="ffac">15. Diverging Lollipop Chart with Markers</p><div id="35a5"><pre>x = df.loc[:, [<span class="hljs-string">'mpg'</span>]] df[<span class="hljs-string">'mpg_z'</span>] = (x - x.mean()) / x.std() df[<span class="hljs-string">'colors'</span>] = <span class="hljs-string">'black'</span>

<span class="hljs-comment"># color fiat differently</span> df.loc[df.model == <span class="hljs-string">'Fiat X1-9'</span>, <span class="hljs-string">'colors'</span>] = <span class="hljs-string">'darkorange'</span> df.sort_values(<span class="hljs-string">'mpg_z'</span>, inplace=<span class="hljs-literal">True</span>) df.reset_index(inplace=<span class="hljs-literal">True</span>)

<span class="hljs-comment"># Draw plot</span> <span class="hljs-keyword">import</span> matplotlib.patches <span class="hljs-keyword">as</span> patches

plt.figure(figsize=(<span class="hljs-number">10</span>, <span class="hljs-number">12</span>), dpi=<span class="hljs-number">80</span>) plt.hlines(y=df.index, xmin=<span class="hljs-number">0</span>, xmax=df.mpg_z, color=df.colors, alpha=<span class="hljs-number">0.4</span>, linewidth=<span class="hljs-number">1</span>) plt.scatter(df.mpg_z, df.index, color=df.colors, s=[<span class="hljs-number">600</span> <span class="hljs-keyword">if</span> x == <span class="hljs-string">'Fiat X1-9'</span> <span class="hljs-keyword">else</span> <span class="hljs-number">300</span> <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> df.model], alpha=<span class="hljs-number">0.6</span>) plt.yticks(df.index, df.model) plt.xticks(fontsize=<span class="hljs-number">12</span>)

<span class="hljs-comment"># Annotate</span> plt.annotate(<span class="hljs-string">'Mercedes Models'</span>, xy=(<span class="hljs-number">0.0</span>, <span class="hljs-number">11.0</span>), xytext=(<span class="hljs-number">1.0</span>, <span class="hljs-number">11</span>), xycoords=<span class="hljs-string">'data'</span>, fontsize=<span class="hljs-number">15</span>, ha=<span class="hljs-string">'center'</span>, va=<span class="hljs-string">'center'</span>, bbox=<span class="hljs-built_in">dict</span>(boxstyle=<span class="hljs-string">'square'</span>, fc=<span class="hljs-string">'firebrick'</span>), arrowprops=<span class="hljs-built_in">dict</span>(arrowstyle=<span class="hljs-string">'-[, widthB=2.0, lengthB=1.5'</span>, lw=<span class="hljs-number">2.0</span>, color=<span class="hljs-string">'steelblue'</span>), color=<span class="hljs-string">'white'</span>)

<span class="hljs-comment"># Add Patches</span> p1 = patches.Rectangle((-<span class="hljs-number">2.0</span>, -<span class="hljs-number">1</span>), width=<span class="hljs-number">.3</span>, height=<span class="hljs-number">3</span>, alpha=<span class="hljs-number">.2</span>, facecolor=<span class="hljs-string">'red'</span>) p2 = patches.Rectangle((<span class="hljs-number">1.5</span>, <span class="hljs-number">27</span>), width=<span class="hljs-number">.8</span>, height=<span class="hljs-number">5</span>, alpha=<span class="hljs-number">.2</span>, facecolor=<span class="hljs-string">'green'</span>) plt.gca().add_patch(p1) plt.gca().add_patch(p2) plt.xticks(fontsize=<span class="hljs-number">10</span>) plt.yticks(fontsize=<span class="hljs-number">10</span>)

<span class="hljs-comment"># Decorate</span> plt.title(<span class="hljs-string">'Diverging Bars of Car Mileage'</span>, fontdict={<span class="hljs-string">'size'</span>: <span class="hljs-number">15</span>}) plt.grid(linestyle=<span class="hljs-string">'--'</span>, alpha=<span class="hljs-number">0.5</span>) plt.show()</pre></div><figure id="68d8"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*H0hhiTQHCBIpy2k6m2wvpw.png"><figcaption></figcaption></figure><p id="f3b6">To be continued…</p><p id="512f">Thank you for reading.</p></article></body>

The most 50 valuable charts drawn by Python Part III

Part I: https://medium.com/@benhui.ca/the-most-50-valuable-charts-drawn-by-python-4584d4626e55

Part II: https://medium.com/@benhui.ca/the-most-50-valuable-charts-drawn-by-python-part-ii-39ea11311d89

Setup environment:

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings(action='once')
plt.style.use('seaborn-whitegrid')
sns.set_style("whitegrid")

We use mtcars dataset here: https://gist.github.com/seankross/a412dfbd88b3db70b74b

11. Diverging Bars

x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean()) / x.std()
df['colors'] = ['red' if x < 0 else 'green' for x in df['mpg_z']]
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
plt.figure(figsize=(10, 6), dpi=80)
plt.hlines(y=df.index,
           xmin=0,
           xmax=df.mpg_z,
           color=df.colors,
           alpha=0.8,
           linewidth=5)

# Decorations
plt.gca().set(ylabel='Model', xlabel='Mileage')
plt.yticks(df.index, df.model, fontsize=12)
plt.xticks(fontsize=12)
plt.title('Diverging Bars of Car Mileage')
plt.grid(linestyle='--', alpha=0.5)
plt.show()

12. Diverging Bars with texts (horizontal)

x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean())/x.std()
df['colors'] = ['red' if x < 0 else 'green' for x in df['mpg_z']]
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
plt.figure(figsize=(10,8), dpi= 80)
plt.hlines(y=df.index, xmin=0, xmax=df.mpg_z,color=df.colors, alpha=0.8, linewidth=5)
for x, y, tex in zip(df.mpg_z, df.index, df.mpg_z):
    t = plt.text(x, y, round(tex, 2), horizontalalignment='right' if x < 0 else 'left', 
                 verticalalignment='center', fontdict={'color':'black' if x < 0 else 'black', 'size':10})

# Decorations    
plt.yticks(df.index, df.model, fontsize=12)
plt.xticks(fontsize=10)
plt.title('Diverging Text Bars of Car Mileage', fontdict={'size':15})
plt.grid(linestyle='--', alpha=0.5)
plt.xlim(-2.5, 2.5)
plt.show()

13. Diverging Bars with texts (vertical)

x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean()) / x.std()
df['colors'] = ['red' if x < 0 else 'green' for x in df['mpg_z']]
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
plt.figure(figsize=(10, 6), dpi=80)
plt.vlines(x=df.index,
           ymin=0,
           ymax=df.mpg_z,
           color=df.colors,
           alpha=0.8,
           linewidth=5)
for y, x, tex in zip(df.mpg_z, df.index, df.mpg_z):
    t = plt.text(x,
                 y+0.2,
                 round(tex, 1),
                 horizontalalignment='center',
                 fontdict={
                     'color': 'black' if x < 0 else 'black',
                     'size': 8
                 })

# Decorations
plt.xticks(df.index, df.model, fontsize=12, rotation=90)
plt.yticks(fontsize=12)
plt.title('Diverging Text Bars of Car Mileage', fontdict={'size': 12})
plt.grid(linestyle='--', alpha=0.5)
plt.show()

14. Diverging Dot Plot

x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean()) / x.std()
df['colors'] = ['red' if x < 0 else 'darkgreen' for x in df['mpg_z']]
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
plt.figure(figsize=(12, 10), dpi=80)
plt.scatter(df.mpg_z, df.index, s=250, alpha=.6, color=df.colors)
for x, y, tex in zip(df.mpg_z, df.index, df.mpg_z):
    t = plt.text(x,
                 y,
                 round(tex, 1),
                 horizontalalignment='center',
                 verticalalignment='center',
                 fontdict={'color': 'black','size': '10'})

# Decorations
# Lighten borders
plt.gca().spines["top"].set_alpha(.3)
plt.gca().spines["bottom"].set_alpha(.3)
plt.gca().spines["right"].set_alpha(.3)
plt.gca().spines["left"].set_alpha(.3)

plt.yticks(df.index, df.model,fontsize=10)
plt.xticks(fontsize=10)
plt.title('Diverging Dotplot of Car Mileage', fontdict={'size': 15})
plt.xlabel('Mileage',fontsize=10)
plt.grid(linestyle='--', alpha=0.5)
plt.xlim(-2.5, 2.5)
plt.show()

15. Diverging Lollipop Chart with Markers

x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean()) / x.std()
df['colors'] = 'black'

# color fiat differently
df.loc[df.model == 'Fiat X1-9', 'colors'] = 'darkorange'
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
import matplotlib.patches as patches

plt.figure(figsize=(10, 12), dpi=80)
plt.hlines(y=df.index,
           xmin=0,
           xmax=df.mpg_z,
           color=df.colors,
           alpha=0.4,
           linewidth=1)
plt.scatter(df.mpg_z,
            df.index,
            color=df.colors,
            s=[600 if x == 'Fiat X1-9' else 300 for x in df.model],
            alpha=0.6)
plt.yticks(df.index, df.model)
plt.xticks(fontsize=12)

# Annotate
plt.annotate('Mercedes Models',
             xy=(0.0, 11.0),
             xytext=(1.0, 11),
             xycoords='data',
             fontsize=15,
             ha='center',
             va='center',
             bbox=dict(boxstyle='square', fc='firebrick'),
             arrowprops=dict(arrowstyle='-[, widthB=2.0, lengthB=1.5',
                             lw=2.0,
                             color='steelblue'),
             color='white')

# Add Patches
p1 = patches.Rectangle((-2.0, -1),
                       width=.3,
                       height=3,
                       alpha=.2,
                       facecolor='red')
p2 = patches.Rectangle((1.5, 27),
                       width=.8,
                       height=5,
                       alpha=.2,
                       facecolor='green')
plt.gca().add_patch(p1)
plt.gca().add_patch(p2)
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)

# Decorate
plt.title('Diverging Bars of Car Mileage', fontdict={'size': 15})
plt.grid(linestyle='--', alpha=0.5)
plt.show()

To be continued…

Thank you for reading.

Python
Data Science
Data Analysis
Data Visualization
Data
Recommended from ReadMedium