matplotlib学习笔记(三)
柱状图
柱状图用其每根柱子的长度表示值的大小,它们通常用来比较两组或多组值。下面的程序从文件中读入中国人口的年龄分布数据,并使用柱状图比较男性和女性的年龄分布。
import numpy as np import matplotlib.pyplot as plt data = np.loadtxt("china_population.txt") width = (data[1,0] - data[0,0])*0.4 plt.figure(figsize=(8,5)) plt.bar(data[:,0]-width, data[:,1]/1e7, width, color="b", label=u"男") plt.bar(data[:,0], data[:,2]/1e7, width, color="r", label=u"女") plt.xlim(-width, 100) plt.xlabel(u"年龄") plt.ylabel(u"人口(千万)") plt.legend() plt.show()
读入的数据中,第0列为年龄,它将作为柱状图的横坐标。首先计算柱状图中每根柱子 的宽度,因为要在每个年龄段上绘制两根柱子,因此柱子的宽度应该小于年龄段的二分之 一。这里以年龄段的0.4倍作为柱子的宽度。
bar()的第一个参数是柱状图的横坐标(柱子的左边缘)列表,第二个是纵坐标列表,后面是柱子的宽度和颜色。
散点图
使用plot()绘图时,如果指定样式参数为仅绘制数据点,那么所绘制的就是一幅散列图。 例如:
plt.plot(np.random.random(100),np.random.random(100),"o")
但是这种方法无法为每个点设置样式,scatter方法可以
plt.figure(figsize=(8,4)) x = np.random.random(100) y = np.random.random(100) plt.scatter(x, y, s=x*1000, c=y, marker=(5, 1), alpha=0.8, lw=2, facecolors="none") plt.xlim(0,1) plt.ylim(0,1) plt.show()
效果图
scatter()的前两个参数是数组,分别指定每个点的X轴和Y轴的坐标。s参数指定点的大 小,值和点的面积成正比。它可以是一个数,定所有点的大小;也可以是数组,分别对每个点指定大小。
c参数指定每个点的颜色,可以是数值或数组。这里使用一维数组为每个点指定了一个数值。通过颜色映射表,每个数值都会与一个颜色相对应。默认的颜色映射表中蓝色与最小值对应,红色与最大值对应。当c参数是形状为(N,3)或(N,4)的二维数组时,则直接表示每个点的RGB颜色。
marker参数设置点的形状,可以是个表示形状的字符串,也可以是表示多边形的两个元素的元组,第一个元素表示多边形的边数,
第二个元素表示多边形的样式,取值范围为0、1、2、3。0表示多边形,1表示星形,2表示放射形,3表示忽略边数而显示为圆形。
最后,通过alpha参数设置点的透明度,通过lw参数设置线宽,lw是line width的缩写。 facecolors参数为“none”时,表示散列点没有填充色。