tynbl.github.io

数据分析常用图表的绘制

%matplotlib notebook

import matplotlib.pyplot as plt
import numpy as np

1. Subplots

plt.figure()
# 表示1行2列,现在在第一个子图上进行操作
plt.subplot(1, 2, 1)

linear_data = np.arange(1, 9)
plt.plot(linear_data, '-o')
<IPython.core.display.Javascript object>

[<matplotlib.lines.Line2D at 0x1f259057780>]
exponential_data = linear_data ** 2
plt.subplot(1, 2, 2)
plt.plot(exponential_data, '-x')
[<matplotlib.lines.Line2D at 0x1f258edf0f0>]
plt.subplot(1, 2, 1)
plt.plot(exponential_data, '-x')
[<matplotlib.lines.Line2D at 0x1f259205f28>]
# 保证子图中坐标范围一致
plt.figure()
ax1 = plt.subplot(1, 2, 1)
plt.plot(linear_data, '-o')
ax2 = plt.subplot(1, 2, 2, sharey=ax1)
plt.plot(exponential_data, '-x')
<IPython.core.display.Javascript object>

[<matplotlib.lines.Line2D at 0x1f25924d710>]
fig, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(2, 3,
                                                      sharex=True, sharey=True)
ax5.plot(exponential_data, '-')
<IPython.core.display.Javascript object>

[<matplotlib.lines.Line2D at 0x1f25a74a978>]

2. 直方图

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True)
axs = [ax1, ax2, ax3, ax4]

for n in range(len(axs)):
    sample_size = 10 ** (n + 1)
    sample = np.random.normal(loc=0., scale=1., size=sample_size)
    # 默认bin的个数为10
    axs[n].hist(sample)
    axs[n].set_title('n={}'.format(sample_size))
<IPython.core.display.Javascript object>

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True)
axs = [ax1, ax2, ax3, ax4]

for n in range(len(axs)):
    sample_size = 10 ** (n + 1)
    sample = np.random.normal(loc=0., scale=1., size=sample_size)
    # bin设为100
    axs[n].hist(sample, bins=100)
    axs[n].set_title('n={}'.format(sample_size))
<IPython.core.display.Javascript object>

# 使用gridspec和直方图绘制一个复杂分析图
import matplotlib.gridspec as gridspec

x = np.random.random(size=10000)
y = np.random.normal(loc=0., scale=1., size=10000)

plt.figure()
gspec = gridspec.GridSpec(3, 3)

top_hist = plt.subplot(gspec[0, 1:])
side_hist = plt.subplot(gspec[1:, 0])
lower_right = plt.subplot(gspec[1:, 1:])

lower_right.scatter(x, y)
top_hist.hist(x, bins=100, normed=True)
side_hist.hist(y, bins=100, orientation='horizontal', normed=True)
side_hist.invert_xaxis()
<IPython.core.display.Javascript object>

3. 盒形图

import pandas as pd
# 正态分布采样
normal_sample = np.random.normal(loc=0., scale=1., size=10000)
# 随机数采样
random_sample = np.random.random(size=10000)
# gamma分布采样
gamma_sample = np.random.gamma(2, size=10000)

df = pd.DataFrame({'normal': normal_sample,
                  'random': random_sample,
                  'gamma': gamma_sample})
df.describe()
gamma normal random
count 10000.000000 10000.000000 10000.000000
mean 2.004713 -0.003639 0.506060
std 1.398316 0.999177 0.289620
min 0.014152 -4.245805 0.000165
25% 0.983928 -0.673015 0.253994
50% 1.697079 -0.006095 0.508406
75% 2.680493 0.664267 0.755801
max 12.017532 4.193779 0.999936
plt.figure()
plt.boxplot(df['normal'], whis='range')
<IPython.core.display.Javascript object>

{'boxes': [<matplotlib.lines.Line2D at 0x9b6b5f8>],
 'caps': [<matplotlib.lines.Line2D at 0x9b77f60>,
  <matplotlib.lines.Line2D at 0x9b83898>],
 'fliers': [<matplotlib.lines.Line2D at 0x9b89908>],
 'means': [],
 'medians': [<matplotlib.lines.Line2D at 0x9b83a20>],
 'whiskers': [<matplotlib.lines.Line2D at 0x9b6bfd0>,
  <matplotlib.lines.Line2D at 0x9b77828>]}
plt.figure()
plt.boxplot([df['normal'], df['random'], df['gamma']], whis='range')
<IPython.core.display.Javascript object>

{'boxes': [<matplotlib.lines.Line2D at 0xb174198>,
  <matplotlib.lines.Line2D at 0xb1865f8>,
  <matplotlib.lines.Line2D at 0xb194390>],
 'caps': [<matplotlib.lines.Line2D at 0xb179c18>,
  <matplotlib.lines.Line2D at 0xb179da0>,
  <matplotlib.lines.Line2D at 0xb140e48>,
  <matplotlib.lines.Line2D at 0xb1402e8>,
  <matplotlib.lines.Line2D at 0xb197c50>,
  <matplotlib.lines.Line2D at 0xb19db38>],
 'fliers': [<matplotlib.lines.Line2D at 0xb180e10>,
  <matplotlib.lines.Line2D at 0x9babac8>,
  <matplotlib.lines.Line2D at 0xb1a5ba8>],
 'means': [],
 'medians': [<matplotlib.lines.Line2D at 0xb1805f8>,
  <matplotlib.lines.Line2D at 0xb135470>,
  <matplotlib.lines.Line2D at 0xb19dcc0>],
 'whiskers': [<matplotlib.lines.Line2D at 0xb174ba8>,
  <matplotlib.lines.Line2D at 0xb174d30>,
  <matplotlib.lines.Line2D at 0xb186e48>,
  <matplotlib.lines.Line2D at 0xb18cd30>,
  <matplotlib.lines.Line2D at 0xb194be0>,
  <matplotlib.lines.Line2D at 0xb197ac8>]}
plt.figure()
plt.boxplot([df['normal'], df['random'], df['gamma']])
<IPython.core.display.Javascript object>

{'boxes': [<matplotlib.lines.Line2D at 0xb488d68>,
  <matplotlib.lines.Line2D at 0xb491b70>,
  <matplotlib.lines.Line2D at 0x9a0bc18>],
 'caps': [<matplotlib.lines.Line2D at 0xb459c18>,
  <matplotlib.lines.Line2D at 0xb434b70>,
  <matplotlib.lines.Line2D at 0xb140d30>,
  <matplotlib.lines.Line2D at 0x9ad5a90>,
  <matplotlib.lines.Line2D at 0x99ffba8>,
  <matplotlib.lines.Line2D at 0x99ffd30>],
 'fliers': [<matplotlib.lines.Line2D at 0xb1b6278>,
  <matplotlib.lines.Line2D at 0x9a0bb00>,
  <matplotlib.lines.Line2D at 0xb4a4da0>],
 'means': [],
 'medians': [<matplotlib.lines.Line2D at 0xb447c88>,
  <matplotlib.lines.Line2D at 0x9ad5c18>,
  <matplotlib.lines.Line2D at 0xb4a4588>],
 'whiskers': [<matplotlib.lines.Line2D at 0xb488f28>,
  <matplotlib.lines.Line2D at 0xb449208>,
  <matplotlib.lines.Line2D at 0xb497a90>,
  <matplotlib.lines.Line2D at 0xb14e550>,
  <matplotlib.lines.Line2D at 0x9a05b38>,
  <matplotlib.lines.Line2D at 0x9a05cc0>]}

4. 热图

plt.figure()
y = np.random.normal(loc=0., scale=1., size=10000)
x = np.random.random(size=10000)
plt.hist2d(x, y, bins=25)
<IPython.core.display.Javascript object>

(array([[  0.,   0.,   1.,   0.,   4.,   8.,  13.,  19.,  28.,  35.,  50.,
          51.,  47.,  42.,  39.,  24.,  15.,  17.,   4.,   1.,   0.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   1.,   1.,   6.,   3.,  15.,  20.,  32.,  27.,  38.,
          58.,  43.,  51.,  35.,  31.,  23.,  10.,   5.,   1.,   1.,   2.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   3.,   4.,   5.,  12.,  30.,  30.,  46.,  53.,
          53.,  49.,  42.,  52.,  25.,  12.,  15.,   5.,   1.,   0.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   2.,   7.,   5.,  10.,  13.,  19.,  35.,  41.,  59.,
          48.,  35.,  37.,  27.,  25.,  16.,   9.,   7.,   5.,   1.,   0.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   3.,   3.,   7.,  16.,  26.,  35.,  39.,  43.,
          51.,  53.,  42.,  30.,  15.,  16.,  10.,   6.,   4.,   2.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   3.,   1.,  10.,  13.,  20.,  30.,  36.,  41.,
          48.,  59.,  42.,  45.,  29.,  13.,  16.,   6.,   3.,   2.,   0.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   1.,   3.,   6.,  13.,  16.,  31.,  43.,  52.,
          49.,  51.,  46.,  35.,  25.,  15.,  12.,   3.,   1.,   3.,   0.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   1.,   4.,   7.,  15.,  13.,  29.,  41.,  37.,
          36.,  42.,  49.,  30.,  25.,  18.,   9.,   8.,   2.,   0.,   2.,
           0.,   0.,   0.],
        [  0.,   1.,   0.,   1.,   3.,  12.,  17.,  20.,  34.,  41.,  43.,
          42.,  53.,  48.,  37.,  28.,  16.,  10.,   7.,   2.,   1.,   0.,
           0.,   0.,   0.],
        [  1.,   0.,   1.,   4.,   4.,  10.,  13.,  23.,  23.,  40.,  50.,
          43.,  58.,  45.,  32.,  24.,  22.,  17.,   2.,   5.,   2.,   0.,
           0.,   0.,   1.],
        [  0.,   0.,   1.,   1.,   4.,   8.,  20.,  28.,  29.,  42.,  52.,
          46.,  47.,  40.,  29.,  25.,  13.,  10.,   8.,   2.,   0.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   1.,   1.,   3.,   7.,  10.,  23.,  25.,  48.,  40.,
          41.,  55.,  43.,  30.,  26.,  13.,  14.,   5.,   3.,   0.,   2.,
           0.,   0.,   1.],
        [  1.,   1.,   2.,   5.,   5.,   6.,  15.,  23.,  32.,  34.,  46.,
          46.,  58.,  44.,  36.,  25.,  15.,  11.,   5.,   3.,   3.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   2.,   2.,   6.,  13.,  26.,  27.,  30.,  56.,
          46.,  39.,  25.,  50.,  26.,  12.,  17.,  10.,   2.,   5.,   0.,
           0.,   0.,   0.],
        [  0.,   0.,   3.,   3.,   3.,   8.,  11.,  28.,  44.,  30.,  45.,
          35.,  45.,  38.,  27.,  17.,  13.,   4.,   3.,   0.,   1.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   1.,   1.,   5.,   4.,  14.,  17.,  33.,  37.,  52.,
          61.,  50.,  51.,  41.,  25.,  19.,   8.,   5.,   1.,   1.,   0.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   1.,   1.,   7.,  10.,  18.,  26.,  40.,  50.,
          49.,  47.,  49.,  33.,  24.,  11.,  15.,   8.,   0.,   0.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   2.,   2.,   6.,  15.,  18.,  25.,  36.,  46.,
          45.,  57.,  43.,  39.,  22.,  17.,  14.,   7.,   2.,   0.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   1.,   1.,   7.,   5.,  21.,  18.,  27.,  38.,  47.,
          59.,  55.,  33.,  43.,  26.,  24.,   8.,   5.,   2.,   5.,   1.,
           0.,   0.,   0.],
        [  0.,   0.,   1.,   1.,   1.,   8.,  14.,  18.,  27.,  38.,  58.,
          41.,  41.,  59.,  37.,  33.,   9.,  11.,   5.,   2.,   2.,   2.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   1.,   5.,  12.,  13.,  24.,  28.,  40.,  28.,
          58.,  32.,  43.,  27.,  26.,  22.,  11.,   3.,   4.,   2.,   0.,
           0.,   1.,   0.],
        [  0.,   0.,   0.,   1.,   8.,   7.,  13.,  14.,  35.,  38.,  46.,
          56.,  37.,  40.,  36.,  21.,  23.,  13.,   7.,   2.,   0.,   0.,
           0.,   1.,   0.],
        [  0.,   0.,   0.,   1.,   2.,   6.,  10.,  15.,  31.,  43.,  46.,
          44.,  50.,  45.,  35.,  18.,  15.,  10.,   7.,   1.,   4.,   0.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   2.,   2.,   6.,   8.,  22.,  33.,  38.,  52.,
          51.,  47.,  40.,  42.,  19.,   9.,  13.,   6.,   1.,   0.,   0.,
           0.,   0.,   0.],
        [  0.,   0.,   0.,   1.,   4.,   9.,  11.,  19.,  30.,  39.,  44.,
          44.,  48.,  43.,  29.,  17.,  13.,   7.,   1.,   3.,   3.,   0.,
           0.,   0.,   0.]]),
 array([  3.66860160e-05,   4.00335689e-02,   8.00304517e-02,
          1.20027335e-01,   1.60024217e-01,   2.00021100e-01,
          2.40017983e-01,   2.80014866e-01,   3.20011749e-01,
          3.60008632e-01,   4.00005515e-01,   4.40002397e-01,
          4.79999280e-01,   5.19996163e-01,   5.59993046e-01,
          5.99989929e-01,   6.39986812e-01,   6.79983695e-01,
          7.19980577e-01,   7.59977460e-01,   7.99974343e-01,
          8.39971226e-01,   8.79968109e-01,   9.19964992e-01,
          9.59961874e-01,   9.99958757e-01]),
 array([-3.66238483, -3.35245834, -3.04253186, -2.73260537, -2.42267888,
        -2.11275239, -1.80282591, -1.49289942, -1.18297293, -0.87304644,
        -0.56311996, -0.25319347,  0.05673302,  0.36665951,  0.67658599,
         0.98651248,  1.29643897,  1.60636546,  1.91629194,  2.22621843,
         2.53614492,  2.84607141,  3.1559979 ,  3.46592438,  3.77585087,
         4.08577736]),
 <matplotlib.image.AxesImage at 0xbbd9588>)
plt.figure()
y = np.random.normal(loc=0., scale=1., size=10000)
x = np.random.random(size=10000)
plt.hist2d(x, y, bins=100)
<IPython.core.display.Javascript object>

(array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
        ..., 
        [ 0.,  0.,  0., ...,  0.,  0.,  1.],
        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
        [ 0.,  0.,  0., ...,  0.,  0.,  0.]]),
 array([  1.73330697e-04,   1.01693953e-02,   2.01654598e-02,
          3.01615244e-02,   4.01575889e-02,   5.01536535e-02,
          6.01497181e-02,   7.01457826e-02,   8.01418472e-02,
          9.01379118e-02,   1.00133976e-01,   1.10130041e-01,
          1.20126105e-01,   1.30122170e-01,   1.40118235e-01,
          1.50114299e-01,   1.60110364e-01,   1.70106428e-01,
          1.80102493e-01,   1.90098557e-01,   2.00094622e-01,
          2.10090687e-01,   2.20086751e-01,   2.30082816e-01,
          2.40078880e-01,   2.50074945e-01,   2.60071009e-01,
          2.70067074e-01,   2.80063138e-01,   2.90059203e-01,
          3.00055268e-01,   3.10051332e-01,   3.20047397e-01,
          3.30043461e-01,   3.40039526e-01,   3.50035590e-01,
          3.60031655e-01,   3.70027720e-01,   3.80023784e-01,
          3.90019849e-01,   4.00015913e-01,   4.10011978e-01,
          4.20008042e-01,   4.30004107e-01,   4.40000171e-01,
          4.49996236e-01,   4.59992301e-01,   4.69988365e-01,
          4.79984430e-01,   4.89980494e-01,   4.99976559e-01,
          5.09972623e-01,   5.19968688e-01,   5.29964753e-01,
          5.39960817e-01,   5.49956882e-01,   5.59952946e-01,
          5.69949011e-01,   5.79945075e-01,   5.89941140e-01,
          5.99937204e-01,   6.09933269e-01,   6.19929334e-01,
          6.29925398e-01,   6.39921463e-01,   6.49917527e-01,
          6.59913592e-01,   6.69909656e-01,   6.79905721e-01,
          6.89901786e-01,   6.99897850e-01,   7.09893915e-01,
          7.19889979e-01,   7.29886044e-01,   7.39882108e-01,
          7.49878173e-01,   7.59874237e-01,   7.69870302e-01,
          7.79866367e-01,   7.89862431e-01,   7.99858496e-01,
          8.09854560e-01,   8.19850625e-01,   8.29846689e-01,
          8.39842754e-01,   8.49838819e-01,   8.59834883e-01,
          8.69830948e-01,   8.79827012e-01,   8.89823077e-01,
          8.99819141e-01,   9.09815206e-01,   9.19811270e-01,
          9.29807335e-01,   9.39803400e-01,   9.49799464e-01,
          9.59795529e-01,   9.69791593e-01,   9.79787658e-01,
          9.89783722e-01,   9.99779787e-01]),
 array([-3.55725494, -3.48360653, -3.40995812, -3.33630971, -3.2626613 ,
        -3.18901289, -3.11536447, -3.04171606, -2.96806765, -2.89441924,
        -2.82077083, -2.74712242, -2.67347401, -2.5998256 , -2.52617719,
        -2.45252877, -2.37888036, -2.30523195, -2.23158354, -2.15793513,
        -2.08428672, -2.01063831, -1.9369899 , -1.86334148, -1.78969307,
        -1.71604466, -1.64239625, -1.56874784, -1.49509943, -1.42145102,
        -1.34780261, -1.27415419, -1.20050578, -1.12685737, -1.05320896,
        -0.97956055, -0.90591214, -0.83226373, -0.75861532, -0.68496691,
        -0.61131849, -0.53767008, -0.46402167, -0.39037326, -0.31672485,
        -0.24307644, -0.16942803, -0.09577962, -0.0221312 ,  0.05151721,
         0.12516562,  0.19881403,  0.27246244,  0.34611085,  0.41975926,
         0.49340767,  0.56705609,  0.6407045 ,  0.71435291,  0.78800132,
         0.86164973,  0.93529814,  1.00894655,  1.08259496,  1.15624337,
         1.22989179,  1.3035402 ,  1.37718861,  1.45083702,  1.52448543,
         1.59813384,  1.67178225,  1.74543066,  1.81907908,  1.89272749,
         1.9663759 ,  2.04002431,  2.11367272,  2.18732113,  2.26096954,
         2.33461795,  2.40826637,  2.48191478,  2.55556319,  2.6292116 ,
         2.70286001,  2.77650842,  2.85015683,  2.92380524,  2.99745365,
         3.07110207,  3.14475048,  3.21839889,  3.2920473 ,  3.36569571,
         3.43934412,  3.51299253,  3.58664094,  3.66028936,  3.73393777,
         3.80758618]),
 <matplotlib.image.AxesImage at 0xbea1668>)
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0xc1682e8>