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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图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所示。
图3.15
Last updated
Was this helpful?