Python一般使用Matplotlib制作统计图形,用它自己的说法是‘让简单的事情简单,让复杂的事情变得可能’。(你说国外的“码农”咋这么会说,我就整不出来这工整的句子!)用它可以制作折线图,直方图,条形图,散点图,饼图,谱图等等你能想到的和想不到的统计图形,这些图形可以导出为多种具有出版质量的格式。此外,它和ipython结合使用,确实方便,谁用谁知道!
在Matplotlib里面经常使用到的是pylab和pyplot,它之间的区别在于pyplot是封装好的调用matplotlib底层制图库的接口,制图时用户不用关心底层的实现,而pylab则是为了使用者的方便,将numpy和pyplot的功能集中在了一个命名空间中。这么解释,可能还是不太清楚,因此在此次举个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import
pylab
import
numpy as np
import
matplotlib.pyplot as plt
pylab.randn(
2
,
3
)
array([[
1.22356117
,
-
0.62786477
,
-
0.02927331
],
[
1.11739661
,
-
1.64112491
,
2.24982297
]])
np.random.randn(
2
,
3
)
array([[
-
1.41691502
,
-
1.43500335
,
-
0.68452086
],
[
-
0.53925581
,
-
0.18478012
,
-
0.0126745
]])
pylab.hist([
1
,
1
,
1
,
2
,
3
,
3
])
plt.hist([
1
,
1
,
1
,
2
,
3
,
3
])
|
从上面的例子可以看在pylab中可以使用numpy中的一些方法,而在pyplot中不能使用numpy的方法;pylab和pyplot都可以制作统计图形。
接下来通过4个常用的统计图形–直方图,条形图,折线图和散点图来介绍首先matplot的使用。直方图和条形图主要刻画的是一维随机变量的分布,折线图和散点图主要刻画的是两个随机变量之间的相关性。首先要展示的是条形图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
N
=
5
ind
=
np.arange(N)
width
=
0.35
menMeans
=
(
20
,
35
,
30
,
35
,
27
)
menStd
=
(
2
,
3
,
4
,
1
,
2
)
womenMeans
=
(
25
,
32
,
34
,
20
,
25
)
womenStd
=
(
3
,
5
,
2
,
3
,
3
)
plt.bar(ind, menMeans, width, color
=
'r'
, yerr
=
menStd)
plt.bar(ind
+
width, womenMeans, width, color
=
'y'
, yerr
=
womenStd)
plt.title(
'Men-Women'
)
|
图中红色的矩形代表的是Men,黄色代表的是Women,矩形的高度代表的是改组数据的均值,矩形顶部蓝色短线代表标准差,短线自矩形的顶部分别向上和向下延伸标准差的长度。
接下来要展示的是直方图,
1
2
3
4
5
6
7
8
|
x1
=
10
+
5
*
np.random.randn(
10000
)
x2
=
20
+
5
*
np.random.randn(
10000
)
num_bins
=
50
plt.hist(x1, num_bins, normed
=
1
, facecolor
=
'green'
, alpha
=
0.5
)
plt.hist(x2, num_bins, normed
=
1
, facecolor
=
'blue'
, alpha
=
0.5
)
plt.title(
'Histogram'
)
plt.show()
|
上面的代码得到的图形
如果是连续性型随机变量,其中的每个矩形的高度表示该对应随机变量的概率密度函数的值,如果是离散型随机变量,其中每个矩形的高度代表对应随机变量的概率。条形图在使用时要事先计算出数据的均值和方差,而使用直方图时,pyplot会自动统计数据的分布;条形图主要刻画数据的样本均值和方差,直方图主要刻画样本的总体分布。
接下来要展示的是折线图,代码如下:
1
2
3
4
5
6
7
|
import
numpy as np
import
matplotlib.pyplot as plt
x
=
np.linspace(
0
,
10
, num
=
100
)
y
=
np.sin(x)
plt.plot(x,y)
plt.show()
|
得到的正弦函数的图形如下:
上面的图可以看做是y=sin(x)在区间[0,10]上的函数图形,每一个x有且只有一个y的值相对应,如果有多个y的值,则应该使用散点图。
1
2
3
4
5
6
7
8
|
import
numpy as np
import
matplotlib.pyplot as plt
x
=
np.random.randn(
1000
)
y
=
np.random.randn(
1000
)
plt.scatter(x,y)
plt.title(
'Scatter'
)
plt.show()
|
得到散点图如下:
本文出自 杂七杂八,转载时请注明出处及相应链接。
本文永久链接: https://www.dcharm.com/?p=15
本文出自 杂七杂八,转载时请注明出处及相应链接。
本文永久链接: https://www.dcharm.com/?p=15