# 11.3 统计图基础

在第二节中我们通过一些函数的学习感受到了用matplotlib绘制图形的强大功能，从本节开始，我们就继续感受用matplotlib将数据可视化的魅力吧。

**10.3.1折线图（与前文重复？？？，建议删除10.2.2众多与的实例，同时把散点图放到这一章）**

折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间(根据常用比例设置)而变化的连续数据，因此非常适用于显示在相等时间间隔下数据的趋势。

**（1）plot()函数**

函数调用：plt.plot(x,y)

参数说明：x:x轴上的数值

y:y轴上的数值

**（2）代码示例**

**案例1：绘制一个平方数的折线图**

\[5]: x = \[1, 2, 3, 4, 5]

y= \[1, 2, 4, 16, 25]

plt.plot(x,y)

plt.title("Square Numbers", fontsize = 15)

plt.xlabel("Value", fontsize = 10)

plt.ylabel("Square of Value", fontsize = 10)

plt.show()

运行结果如图3.1所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-a576ab69fefe73be4f6f4d3457679679e340db21%2F0158bcbb2610716d0ef58af33749c764.png?alt=media)

图3.1

**案例2：在一个figure里同时画出两条折线**

plt.plot(\[1, 2, 3],\[3, 5, 10], label="a")

plt.plot(\[1, 2, 3], \[1, 7, 9], label="b")

plt.xlabel("x")

plt.ylabel("y")

plt.legend()

plt.title("two lines")

plt.show()

运行结果如图3.2所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-8480b3aa0de4b6db73ba2d95d133cca98e3b65b8%2F14703016b39a2d0d496a885618807062.png?alt=media)

图3.2

**10.3.2柱状图**

柱状图(bar chart)，是一种以长方形的长度为变量的表达图形的统计报告图，由一系列高度不等的纵向条纹表示数据分布的情况，用来比较两个或以上的价值(不同时间或者不同条件)，只有一个变量，通常利用于较小的数据集分析。

**（1）bar()函数**

函数调用：plt.bar(x,y)

参数说明：x:标示在x轴上数据的类别

y:每种数据类别对应的数量

**（2）代码示例**

**案例1：柱状图的绘制**

mpl.rcParams\["axes.unicode\_minus"]=False

x=\[1,2,3,4,5,6,7,8]

y=\[3,5,4,9,6,1,7,2]

plt.bar(x,y,align="center",color="red",tick\_label=\["a","b","c","d","e","f","g","h"],hatch="/")

plt.xlabel("x轴")

plt.ylabel("y轴")

plt.show()

运行结果如图3.3所示。

![C:\Users\Johan\AppData\Local\Microsoft\Windows\INetCache\Content.MSO\EA71519E.tmp](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-c68d73d430279189da6e875e9e14ba36861338c2%2Fb9c7fd7bd516b374f3610dad29784d93.png?alt=media)

图3.3

**10.3.3条形图**

条形图（bar chart）是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置，纵置时也称为柱形图。

**（1）barh()函数**

函数调用：plt.barh(x,y)

参数说明：x:标示在y轴上的数据的类别

y:每种数据类别对应的数量

**（2）代码示例**

**案例1：条形图的绘制**

index = \['A','B','C','D','E']

values = np.random.randint(1,10,5)

plt.barh(index,values)

plt.title('figure')

plt.show()

运行结果如图3.5所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-113e8e0e7a9d20525f8a1462fec5174b74655303%2Fcf55addaaddaf1cb3d92e89640ffc770.png?alt=media)

图3.4

**10.3.4堆积图**

**（1）堆积柱状图**

如果将bar()函数中的bottom参数的取值进行设定，就会出现堆积柱状图的情形。

**案例1：堆积柱状图的绘制**

mpl.rcParams\["font.sans-serif"]=\["SimHei"]

mpl.rcParams\["axes.unicode\_minus"]=False

x=\[1,2,3,4,5,6,7,8]

y=\[3,5,4,9,6,1,7,2]

y1=\[4,2,3,2,2,8,5,3]

plt.bar(x,y,align="center",color="red",tick\_label=\["a","b","c","d","e","f","g","h"],hatch="/",label="A")

plt.bar(x,y1,align="center",color="blue",bottom=y,hatch="-",label="B")

plt.xlabel("x轴")

plt.ylabel("y轴")

plt.legend()

plt.show()

运行结果如图3.5所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-8e0c009b4b6808fe7a0598eeabd57004e9b66c52%2Fc3d0f99550787b3cd9352fcaae333a1f.png?alt=media)

图3.5

**（2）堆积条形图**

如果将barh()函数中的left参数的取值进行设定，就会出现堆积条形图的情形。

**案例2：堆积条形图的绘制**

mpl.rcParams\["font.sans-serif"]=\["SimHei"]

mpl.rcParams\["axes.unicode\_minus"]=False

x=\[1,2,3,4,5,6,7,8]

y=\[3,5,4,9,6,1,7,2]

y1=\[4,2,3,2,2,8,5,3]

plt.barh(x,y,align="center",color="red",tick\_label=\["a","b","c","d","e","f","g","h"],hatch="/",label="A")

plt.barh(x,y1,align="center",color="blue",left=y,hatch="-",label="B")

plt.xlabel("x轴")

plt.ylabel("y轴")

plt.legend()

plt.show()

运行结果如图3.6所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-bab4a7865fdf610d6414d6b8ecfa510071b3609f%2F6482eaf844af6ec68151f4f780a2ea0f.png?alt=media)

图3.6

**10.3.5分块图**

我们可以通过分块图来对比多数据的分布差异。

**（1）多数据柱状图**

**案例1：柱状分块图的绘制**

mpl.rcParams\["font.sans-serif"]=\["SimHei"]

mpl.rcParams\["axes.unicode\_minus"]=False

x=np.arange(5)

y=\[5,7,3,2,6]

y1=\[2,1,8,6,4]

bar\_width=0.4

tick\_label=\["A","B","C","D","E"]

plt.bar(x,y,bar\_width,align="center",color="blue",hatch="/",label="X")

plt.bar(x+bar\_width,y1,bar\_width,align="center",color="red",label="Y")

plt.xlabel("x轴")

plt.ylabel("y轴")

plt.xticks(x+bar\_width/2,tick\_label)

plt.legend()

plt.show()

运行结果如图3.7所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-2313804028627a4802f40d911511499d14abf48b%2Fc5ff86c54b1c83155b863b9fc1e513b4.png?alt=media)

图3.7

**（2）多数据条形图**

**案例1：条形分块图的绘制**

mpl.rcParams\["font.sans-serif"]=\["SimHei"]

mpl.rcParams\["axes.unicode\_minus"]=False

x=np.arange(5)

y=\[5,7,3,2,6]

y1=\[2,1,8,6,4]

bar\_width=0.4

tick\_label=\["A","B","C","D","E"]

plt.barh(x,y,bar\_width,align="center",color="blue",hatch="/",label="X")

plt.barh(x+bar\_width,y1,bar\_width,align="center",color="red",label="Y")

plt.xlabel("x轴")

plt.ylabel("y轴")

plt.yticks(x+bar\_width/2,tick\_label)

plt.legend()

plt.show()

运行结果如图3.8所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-147d09ac3c448bb856b9891a01ac945acf325b06%2Fffdb43d91a4279d08882f6faf15ea4d8.png?alt=media)

图3.8

**10.3.6直方图**

直方图，是一种二维统计图表，它的两个坐标分别是统计样本和该样本对应的某个属性的度量。

**（1）hist()函数**

函数调用：plt.hist(x)

参数说明：x:连续性数据输入值

**（2）代码示例**

**案例1：直方图的绘制**

mpl.rcParams\["font.sans-serif"]=\["SimHei"]

mpl.rcParams\["axes.unicode\_minus"]=False

boxWeight=np.random.randint(0,10,100)

x=boxWeight

bins=range(0,11,1)

plt.hist(x,bins=bins,color="green",histtype="bar",rwidth=1,alpha=0.5)

plt.xlabel("x轴")

plt.ylabel("y轴")

plt.show()

运行结果如图3.9所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-48f1668797f82389edc573c454fa46ddaaea520e%2F8344b3a0b4f8a63a6e6bb40eb0d50a8c.png?alt=media)

图3.9

**（3）直方图和柱状图的关系**

直观来说，直方图和柱状图是类似的，但是他们还是有一定区别的。

其一，在视觉效果上看，直方图的各个柱体之间没有空隙，而柱状图的主体之间存在空隙；其二，直方图描述的对象是连续型的数据，而柱状图描述的却是离散型的数据。

**10.3.7 扇形图**

扇形图，又称扇形统计图，它是用整个圆表示总数，用圆内各个扇形的大小表示各部分数量占总数的百分数。通过扇形统计图可以很清楚地表示出各部分数量同总数之间的关系。

**（1）pie()函数**

函数调用：plt.pie(x)

参数说明：x:数据不同类别所占百分比

**（2）代码示例：扇形图的绘制**

mpl.rcParams\["font.sans-serif"] = \["SimHei"]

mpl.rcParams\["axes.unicode\_minus"] = False

kinds="第一块","第二块","第三块","第四块","第五块"

colors="blue","red","yellow","green","purple"

soldNums=\[0.05,0.35,0.15,0.25,0.20]

plt.pie(soldNums,labels=kinds,autopct="%3.1f%%",startangle=90,colors=colors)

plt.title("扇形图示例")

plt.show()

运行结果如图3.10所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-c14d9b80e95b2ec52419b9f78bf5eee2798aa91f%2F26fc150d3dc437cf9c1e5c3ac5cc6d7f.png?alt=media)

图3.10

**10.3.8 极线图**

极限图定义

**（1）polar()函数**

函数调用：plt.polar(theta,r)

参数说明：theta:每个标记所在射线与极径的夹角

r:每个标记到原点的距离

**（2）代码示例：极线图的绘制**

barSlices=12

theta=np.linspace(0.0,2\*np.pi,barSlices,endpoint=False)

r=30\*np.random.rand(barSlices)

plt.polar(theta,r,color="chartreuse",linewidth=2,marker="\*",mfc="b",ms=10)

plt.show()

运行结果如图3.11所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-50284567508943edd3ea3c3bac6b24bdb54932d0%2Fb3462c67dc3ce1c5333e4fb5af521a9a.png?alt=media)

图3.11

**10.3.9箱线图**

箱形图(Box-plot)又称为盒须图、盒式图或箱线图，是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用，常见于品质管理。它主要用于反映原始数据分布的特征，还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的最大值、最小值、中位数和两个四分位数;然后， 连接两个四分位数画出箱子;再将最大值和最小值与箱子相连接，中位数在箱子中间。

**（1）boxplot()函数**

函数调用：plt.boxplot(x)

参数说明：x:绘制图形的输入数据

**（2）代码示例：箱线图的绘制**

mpl.rcParams\["font.sans-serif"]=\["FangSong"]

mpl.rcParams\["axes.unicode\_minus"]=False

x = np.random.randn(1000)

plt.boxplot(x)

plt.xticks=(\[1],\["string"])

plt.ylabel("y")

plt.title("箱线图")

plt.grid(axis="y",ls=":",lw=1,color="gray",alpha=0.4)

plt.show()

运行结果如图3.12所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-1b9a8f09210b2683f82d3a4556f9e47ca0ce483f%2Fcb5276ad3b1892645143f756ed2bbd9f.png?alt=media)

图3.12

**10.3.10误差棒图**

**（1）errorbar()函数**

函数调用：plt.errorbar(x,y,yerr=a,xerr=b)

参数说明：x:数据点的水平位置

y:数据点的垂直位置

yerr:数据点在y轴方向的误差计算方法

xerr:数据点在x轴方向的误差计算方法

**（2）代码示例：误差棒图的绘制**

x = np.linspace(0.1,0.6,6)

y=np.exp(x)

plt.errorbar(x,y,fmt="bo:",yerr=0.2,xerr=0.02)

plt.xlim(0,0.7)

plt.show()

运行结果如图3.13所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-d7d95427551078c55576bd32d0ccc071d02f857f%2F270cd6bddfe7bffad71a7c659dad5925.png?alt=media)

图3.13

**10.3.11棉棒图**

**（1）stem()函数**

函数调用：plt.stem(x,y)

参数说明：x:棉棒在x轴基线上的位置

y:棉棒的长度

linfmt:棉棒的样式

marketfmt:棉棒末端的样式

basefmt:基线的样式

**（2）代码示例：棉棒图的绘制**

x = np.linspace(0.1,1,15)

y=np.random.randn(15)

plt.stem(x,y,linefmt="-.",markerfmt="\*",basefmt="-")

plt.show()

运行结果如图3.14所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-12aceeb8254fcac32d28b4ab516304745f293217%2F8710cae141c39aece96f3a0c3a111ed4.png?alt=media)

图3.14

**10.3.12气泡图**

**（1）scatter()函数**

函数调用：plt.scatter(x,y)

参数说明：x:x轴上的数值

y:y轴上的数值

s:散点标记的大小

c:散点标记的颜色

cmap:将浮点数映射成颜色的颜色映像表

**（2）代码示例：气泡图的绘制**

a=np.random.randn(100)

b=np.random.randn(100)

plt.scatter(a,b,s=np.power(10\*a+20\*b,2),

c=np.random.rand(100),cmap=mpl.cm.RdYlBu,marker="o")

plt.show()

运行结果如图3.15所示。

![](https://914753012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mjx-LkXo6sfWzVc3cno%2Fuploads%2Fgit-blob-ca6b3e39fb3067a6f7d1c7183c790bb0a8940472%2Fe3ba1098aa3d7f52171b0c605c82cf8c.png?alt=media)

图3.15
