文章目录
1 matplotlib绘图
在此只简单介绍matplotlib一些常用操作,当作小字典工具使用就可,具体详细内容请转到matplotlib中文网
在使用扩展库matplotlib进行数据可视化之前,首先导入必要的工具包。
import numpy as np # matplotlib 依赖numpy库
import matplotlib.pyplot as plt
这样,后面的代码使用plt表示类似MATLAB的pyplot模块。此外,若希望代码能够访问全部matplotlib函数集合,也需要导入matplotlib库。
import matplotlib as mpl
1.1 绘图步骤
-
创建画布(figure),相当于绘画前准备图纸。
-
根据需要在画布上创建一个或多个绘图区域。可以在一张画布上绘制一个图形,也可以将画布分成部分,在每个组成部分分别绘制相同或不同的图形。图形的不同组成部分拥有各自独立的坐标系。
-
在选定的区域描绘点、线、图形等。
-
为绘图线或坐标轴添加刻度、范围及修饰标签等,使得图形容易理解,更具表现力。
-
根据需要为图形添加其他信息,如:旋转标签、添加图例和标题等。
-
保存或显示绘图结果。
import numpy as np
import matplotlib.pyplot as plt
# 创建画布
plt.figure()
# 生成数据
data = [1,2,3,4,5]
# 可视化结果
plt.plot(data)
plt.show()
2 matplotlib基本元素
扩展库matplotlib中基本元素之间呈层级关系。画布上可以创建多个绘图区域,因此画布fig内可以包含多个子图ax ;其中每一个子图拥有自己的数据data、标题title以及包括横轴xaxis和纵轴yaxis的坐标系;每个坐标轴包含单独的刻度tick和坐标轴标签label;刻度tick还可以拥有自己的刻度标签tick label,刻度标签tick label是根据实际需要,为刻度赋予的有意义名字。
2.1 matplotlib 画布
用户绘制的matplotlib图形位于画布上,可以通过plt.figure()函数创建画布。格式∶
plt.figure([num,figsize,dpi,facecolor,edgecolor,frameon])
# 参数num:指定图形编号或名称,数字表示图形编号,字符串表示图形名称;
# 参数figsize:指定画布的宽和高,单位为英寸,1英寸等于2.5厘米;
# 参数dpi:指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80,A4纸是21*30cm的纸张;
# 参数facecolor: 指定画布背景颜色;
# 参数edgecolor:指定画布边框颜色;
# 参数frameon; 指定是否显示画布边框;
plt.figure('fig1',figsize=(10, 5))
# 生成一组数据
x = np.random.randn(50)
y = x ** 4
# 可视化结果
plt.scatter(x, y)
plt.show()
plt.figure('fig2',figsize=(15, 5),facecolor='purple',frameon=True) # 创建画布
random_data = np.random.randn(100) # 生成数据
plt.plot(random_data) #绘制图形
plt.show() # 可视化结果
2.2 设置坐标轴长度和范围
可以调用plt.axis()
函数设置x轴和y轴的属性值
plt.axis() #默认的坐标轴范围
ax=[-1,1,-100,100]
plt.axis(ax) #重新设置坐标轴范围
plt.show() # 可视化结果
plt.axis(ymax=20) #单独设置y轴 另外还有 xmin xmax ymin
2.3 设置图形的线型和颜色
matplotlib绘图时,可以设置线条的颜色、线宽、点标记等线条风格,满足用户的个性化绘制需求。若使用plt.plat(函数绘图,可以设置相关参数值确定图形的线型和颜色。
plt.plot([x], y,[fmt])
# 参数x和y:分别表示绘制在横轴和纵轴上的数据;
# 可选参数fmt:以一个字符串来定义图的基本属性,如:颜色( color ),点型( marker ),线型( linestyle)具体形式为“fmt = '[color][marker][line]"”,分别表示图形“颜色、点标记和线型”的样式。
x = np.random.randn(50)
y = x * 2
plt.plot(x,y,color='blue', marker='*', linestyle='dashed', linewidth=1, markersize=6)
2.4 设置图形刻度范围、刻度标签和坐标轴标签等
与数据本身相比,使用图形可以直观地表达出更多实际意义。为了提供更多图形信息,可以在图形中加入许多配置,如坐标刻度、刻度标签和网格等。在为用户提供可视化数据分析的同时,展示了更丰富的图形信息。这里使用plt模块的相关函数设置图形刻度范围、刻度标签和坐标轴标签。
2.4.1 设置刻度范围
如果用户没有设置坐标轴的范围,那么matplotlib默认按照数据的范围自动选择它认为最合适的区间来展示所有的数据。
若系统产出的数据范围并不是自己想要的,用户可以使用xlim()
和ylim()
函数分别设置x轴、y轴的刻度显示范围,调用格式分别为:plt.xlim(xmin, xmax)
和plt.ylim(ymin, ymax)
。其中参数xmin和ymin分别表示x轴和y轴刻度的最小值;参数xmax和ymax分别表示x轴和y轴刻度的最大值。
x = np.linspace(5,10,100)
y = np.random.rand(100)
plt.plot(x,y)
plt.xlim(4,11) # 设置x轴范围
plt.ylim(-0.2,1.2) # 设置y轴范围
plt.show()
"""
代码段中,首先调用np.linspace(5,10,100)生成[5,10]范围内的100个数据并赋值给变量x,调用np.random.rand(100)生成[0,1)范围内的100个数据并赋值给变量y,然后设置x轴刻度范围[4,11]可视化显示变量x,其取值范围[5,10];设置y轴刻度范围[-0.2,1.2]可视化显示变量y,其取值范围[0,1)。
"""
2.4.2 设置坐标轴刻度
xticks()
和yticks()
函数分别设置x轴、y轴的刻度值,增加图形的可读性,它们的语法格式分别为:xticks(locs, [labels])
和yticks(locs, [labels])
。
其中参数locs表示x轴或y轴刻度线上显示刻度标签的位置,即放置刻度值的地方,locs参数为数组参数(array like, optional),包含刻度的范围值和个数等信息;可选参数labels表示在参数locs设置的相应位置需要添加的标签名称,为数组参数,允许使用文本作为刻度标签。
此外,plt.xticks()和plt. yticks()函数还可以使用参数fontsize设置刻度的字体大小,使用参数rotation设置刻度旋转的度数值等。
x = np.random.randn(100)
y=x.cumsum()
plt.plot(y) # cumsum() 累加和
# 设置x轴的刻度
plt.xticks(np.linspace(0,100,5),list('abcde'),fontsize=15)
# 设置y轴的刻度
plt.yticks(np.linspace(-10,20,3),['max','min',0],fontsize=15,rotation=60)
x = np.linspace(0,10,100)
y = np.random.rand(100)
fig, ax = plt.subplots(1)
ax.plot(x,y, label='line1')
# 设置刻度
ax.set_xlim([-1, 11])
ax.set_ylim([-0.2, 1.2])
# 设置显示的刻度
ax.set_xticks([0, 2, 4, 6, 8, 10])
ax.set_yticks([-0.2, 0, 0.2, 0.4, 0.6, 0.8,1.0,1.2])
# 设置刻度标签
ax.set_xticklabels(['x_0', 'x_2', 'x_4', 'x_6', 'x_8', 'x_10'])
# 设置坐标轴标签
ax.set_xlabel('Number')
ax.set_ylabel('Random')
2.5 文本标签图例
legend()
函数标识图形中不同变量的文本标签图例,语法格式示例: plt.legend(loc='lower left')
,其中参数loc指定图例在图形中的位置。选择合适的位置,可以避免图例覆盖图表内容。loc参数取值如表所示。
# 生成数据
data1 = np.random.randn(1000).cumsum()
data2 = np.random.randn(1000).cumsum()
data3 = np.random.randn(1000).cumsum()
plt.figure()
plt.plot(data1)
plt.plot(data2)
plt.plot(data3)
plt.show()
plt.figure()
# 设置刻度范围
plt.xlim([0,500])
# 设置显示的刻度
plt.xticks([0, 100, 200], ['x1', 'x2', 'x3'])
# 设置坐标轴标签
plt.xlabel('Number')
plt.ylabel('Random')
# 设置标题
plt.title('Example')
# 图例
plt.plot(data1, label='line1')
plt.plot(data2, label='line2')
plt.plot(data3, label='line3')
plt.legend(loc='best')
plt.show()
3 matplotlib的ax对象绘图
使用扩展库matplotlib绘制图形时,首先使用figure函数创建画布,然后图形的绘制操作可以使用plt模块的相关函数完成。实际上,使用画布中坐标对象ax的相关方法同样可以实现整个图形的绘制过程。
分别使用plt模块和ax对象绘图,结果相同。二者的区别在于: plt.plot()
函数首先创建一个figure对象,然后在这个画布隐式生成的画图区域上绘图;而ax.plot()
方法同时生成了fig对象和ax对象,然后使用ax对象在其区域上绘图。
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(1,10)
y=x**2
#plt.plot()
plt.figure()
plt.plot(x,y)
plt.show()
#ax.plot()
fig,ax=plt.subplots()
ax.plot(x,y)
plt.show()
可以使用ax对象的set_xticks()
、set_yticks()
方法设置坐标轴刻度值,使用ax对象的set_xticklabels()
,set_yticklabels()
方法设置刻度标签等等。
x = np.random.randn(100)
ax = plt.subplot(111)
ax.plot(x.cumsum())
'''设置x轴和y轴刻度值'''
ax.set_xticks([0,25,50,75,100])
ax.set_yticks([-10,-5,0,5,10])
'''设置刻度标签'''
ax.set_xticklabels(list('abcde'))
plt.show()
# 生成数据
data1 = np.random.randn(1000).cumsum()
data2 = np.random.randn(1000).cumsum()
data3 = np.random.randn(1000).cumsum()
fig, ax = plt.subplots(1)
ax.plot(data1, label='line1')
ax.plot(data2, label='line2')
ax.plot(data3, label='line3')
# 设置刻度
ax.set_xlim([0, 800])
# 设置显示的刻度
ax.set_xticks([0, 100, 200, 300, 400, 500])
# 设置刻度标签
ax.set_xticklabels(['x1', 'x2', 'x3', 'x4', 'x5'])
# 设置坐标轴标签
ax.set_xlabel('Number')
ax.set_ylabel('Random')
# 设置标题
ax.set_title('An example of ax drawing')
# 图例
ax.legend(loc=0)
plt.show()
4 绘制子图
使用扩展库matplotlib绘图,其中Axes对象代表画布中的一片区域。当使用plt模块绘图时,Axes对象是隐式生成的,因此只需要在画布上绘制一个图形就可以,无须显式生成Axes对象,这时使用plt.plot()函数完成图形绘制是比较方便的。
如果需要在一个图中绘制多个子图,通常使用ax对象绘图:首先显式调用 plt.subplot()
函数,使用生成的fig对象和ax对象分别对画布Figure和绘图区域Axes进行控制,然后使用ax对象对各个子图执行更多的操作。显然,使用ax对象实现多个子图的绘制更方便且易于解释。因此,在实际绘图,特别是绘制多个子图时,推荐使用ax对象完成。
扩展库matplotlib.pyplot中的subplot()函数可以划分绘图区域并创建子图,其语法格式及重要参数如下:
subplot(numbRow, numbCol, plotNum)或者:subplot(numbRow numbCol plotNum)
# 参数numbRow:表示绘图区域中子图的行数;
# 参数numbCol:表示绘图区域中子图的列数;
# 参数plotNum:指定Axes对象所在的绘图区域;
# 此外,subplot函数中可以使用可选参数设置图形的更多属性,例如∶参数facecolor可以设置当前子图的背景颜色;参数polar设置当前子图是否为极坐标图,默认为False;参数sharex.sharey设置与哪个子图共享x轴或y轴坐标使得共享轴坐标的子图具有相同的起止范围、刻度和缩放比例。
subplot函数的返回值包括一个绘图区( figure )和一系列Axes实例对象组成的数组,将整个绘图区域划分为numRows 行和numCols 列个子区域,按照从左到右,从上到下的顺序对每个子区域依次编号。用户可以方便地访问每一个Axes对象,绘制并独立配置每一个子图。例如:函数subplot(2,2,1)
表示此figure代表的绘图区域划分成2*2个子区域,也就是共有4个子图,其中1代表第一幅图所在的子区域,即左上方的子区域编号为1,也可以写成subplot(221)
。
fig, subplot_arr = plt.subplots(2, 2, figsize=(8, 8),sharex=True)
data = np.random.randn(20)
subplot_arr[0, 0].plot(data, 'r.--')
subplot_arr[0, 1].plot(data, 'gv:')
subplot_arr[1, 0].plot(data, 'b<-')
subplot_arr[1, 1].plot(data, 'ys-.')
如果绘制的图形包含3幅或者5幅子图的话,需要对编号较大的子区域进行重新排列。例如:当绘制一幅包含三个子图的图形时,如果将整个绘图区域按照2*2划分,那么前两个子区域分别是(2,2,1)和(2,2.2),第三个子图需要占用(2,2, 3)和(2,2,4)这两个子区域,因此需要再次使用subplot函数对这个子区域按照2*1重新划分,使得前两个子图占用(2,1,1)的位置,第三个子图占用(2,1,2)的位置。
plt.figure(figsize=(6,6), dpi=80,facecolor='lightcyan')
plt.figure(1)
ax1 = plt.subplot(221)
ax1.plot(data, color="red",linestyle = "--")
ax2 = plt.subplot(222)
ax2.plot(data,color="blue",linestyle = "-")
ax3 = plt.subplot(212)
ax3.plot(data,color="green",linestyle = "-.")
5 中文字体显示
使用matplotlib绘制的图形中显示中文时经常出现乱码问题。这是因为扩展库matplotlib默认安装和使用的“sans-serif”字体并不支持中文显示,当用户将图形标题、标签或图例设置为中文字符串的时候,这些中文字体无法正常显示出来。
使用 matplotlib的font_manager工具,主要由三个步骤组成:
- 首先导入font_manager模块
- 找到中文字体在电脑中的位置 (常在C盘),导入中文字体库
- 接着根据绘图时中文字体出现的不同位置,采取适当的解决方案:
- 若在图例中出现中文字体,设置legend函数的prop属性
- 若在标题和横坐标等地方出现中文,设置对应函数的fontproperties属性
- 若需要显示希腊字母,采用latex格式,即使用双“$…$”符号。
# 生成数据
data1 = np.random.randn(1000).cumsum()
data2 = np.random.randn(1000).cumsum()
data3 = np.random.randn(1000).cumsum()
# 导入库
import matplotlib.font_manager as fm
#定位中文字体文件
zhfont1 = fm.FontProperties(fname="中文字体路径", size=15)
plt.figure()
plt.plot(data1, label='线条1')
plt.plot(data2, label='线条2')
plt.plot(data3, label='线条3')
# 设置刻度
plt.xlim([0, 700])
# 设置刻度标签:中文字体
plt.xticks((100, 200, 300, 400, 500,600),('一', '二', '三', '四', '五','六'),fontproperties=zhfont1)
# 设置坐标轴标签:中文字体
plt.xlabel('数据个数',fontproperties=zhfont1)
plt.ylabel('随机数',fontproperties=zhfont1)
# 设置中文标题
plt.title('中文字体显示',fontproperties=zhfont1)
# 图例
plt.legend(loc='upper left',prop=zhfont1)
6 定性数据可视化
6.1 条形图
条形图或柱状图适用于中小规模的二维数据集,且只有一个维度的数据需要进行比较的情况。条形图是用宽度相同条形的高度或长短来表示数据变动的图形。绘制条形图时,各类别可以放在纵轴,称为条形图,也可以放在横轴,称为柱状图。条形图有单式、复式等形式。
扩展库matplotlib.pyplot中的函数bar()
可以根据给定的数据绘制条形图或柱状图,其语法格式及重要参数如
bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwaras)
# 参数left: 指定每根柱子的横坐标
# 参数height: 指定每根柱子的高度,即待比较数据的统计值
# 参数width: 指定每根柱子的宽度,默认为0.8
# 可选参数bottom:指定每根柱子底部边框的y坐标值
# 可选参数color:指定每根柱子的颜色,可以指定一个颜色值,使所有柱子呈现相同颜色,也可以指定包含不同颜色值的列表,使柱子呈现不同颜色
# 可选参数edgecolor:指定每根柱子边框的颜色
# 可选参数linewidth:指定每根柱子边框的宽度,默认值为“无边框”
# 可选参数align: 指定每根柱子的对齐方式,以柱状图为例: 参数align='edge且width>0表示柱子左侧边框与给定的横坐标对齐;参数align='edge且width<0表示柱子右侧边框与给定的横坐标对齐;align='center"表示给定的横坐标对齐柱子的中间位置;
#可选参数orientation : 设置柱子的显示方式当orientation='vertical'时绘制柱状图;当orientation='horizontal时绘制条形图,不建议通过设置此参数绘制条形图,通常使用函数barh(绘制条形图
# 可选参数alpha:设置透明度
# 可选参数antialiased :设置是否启用抗锯齿功能
# 可选参数fill : 设置是否填充
# 可选参数hatch : 指定内部填充符号,可选值有'/' '|' '-' '+' 'x' 'o' 'O' '.' '*'
# 可选参数label: 指定图例中显示的文本标签
# 可选参数linestvle:指定边框的线型
# 可选参数visible:设置绘制的柱子是否可见
import numpy as np
import matplotlib.plot as plt
# 准备数据
x = np.arange(10)
y = x**2
plt.figure()
plt.bar(x,y)
# 设置坐标轴标签
plt.xlabel('x')
plt.ylabel('y',rotation = 0)
plt.plot()
plt.show()
x1 = [1, 3, 5, 7, 9, 11, 13] # 多组数据
y1 = [5, 3, 7, 8, 2,6,4]
plt.bar(x1, y1, color='b',label='data1')
x2 = np.array(x1) + 0.8 # 需要设置不同的横坐标,避免重叠
y2 = [8, 6, 2, 5, 6,9,7]
plt.bar(x2, y2, color='y',label='data2') #复式条形图
plt.xlim([0,15]) # 设置刻度范围
# 设置显示的刻度
plt.xticks([1, 3,5,7,9,11,13], ['x1', 'x2', 'x3', 'x4', 'x5','x6', 'x7'])
plt.xlabel('Type') # 设置坐标轴标签
plt.ylabel('Frequency')
plt.title('Double bar chart') # 设置标题
plt.legend(loc='best')
plt.show()
6.2 帕累托图
该图是按照各类别数据出现的频率高低排序后绘制的条形图。通过对条形图的排序,很容易看出哪类数据出现得多,哪类数据出现得少。
x = [1, 2, 3, 4, 5, 6,7] # 单组数据
data = [5,3,7,8,2,9,4]
data1=sorted(data,reverse=True) # 对数据进行排序
plt.bar(x,data1) # 帕累托图
plt.xlim([0,8]) # 设置刻度范围
plt.xticks([1,2,3,4,5,6,7], ['x6','x4','x3','x1','x7','x2','x5'])
plt.xlabel('Type') # 设置坐标轴标签
plt.ylabel('Number')
plt.title('Pareto chart') # 设置标题
plt.show()
6.3 饼图
饼图是用圆形及圆内扇形的角度来表示数值大小的图形,主要用于表示一个样本( 或总体 ) 中各组成部分的数据占全部数据的比例,对于研究结构性问题十分有用。
扩展库matplotlib.pyplot中的函数pie0可以根据给定的数据绘制饼图,其语法格式及重要参数如下
pie(x,explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,shadow=Falsestartanale=None,labeldistance=1.1,radius=None,counterclock=True,wedaeprops=Nonetextprops=None, center=(0,0), frame=False, hold=None, data=None)
# 参数x:取值为数据序列,自动计算每个数据的百分比并确定对应的扇形面积;
# 参数explode:取值为None或与x等长的数据序列,用于指定每个扇形沿半径方向偏离圆心的距离,取值为None表示无偏移,正数表示远离圆心
# 参数colors: 取值None或元素为颜色值的数据序列,指定每个扇形的颜色,如果颜色值序列长度小于扇形数量则循环使用颜色值
# 参数labels: 与x长度相同的字符串序列,用于指定每个扇形对应的文本标签
# 参数autopct: 设置扇形内部标签的显示格式,一般为一个格式化字符串
# 参数pctdistance:设置每个扇形中心与autopct指定文本的距离,默认值为0.6
# 参数labeldistance:设置每个饼标签与圆心的径向距离,1.1表示1.1倍半径
# 参数shadow: 布尔类型的数据,设置是否显示阴影,默认值为False
# 参数startangle: 设置饼图中第一个扇形的起始角度,沿x轴逆时针方向计算,默认值为0
# 参数radius: 设置饼的半径,默认值为1
# 参数counterlock:布尔类型的数据,设置饼图中每个扇形的绘制方向
# 参数center: 形式为(xv)的组数据,设置饼的圆心位置
# 参数frame: 布尔类型的数据,设置是否显示边框。
data = np.arange(5) + 1 # 准备数据 1 2 3 4 5
labels = ['1','2','3','4','5']
explode = (0,0,0,0,0.1)
plt.pie(data,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False)
plt.title('12345')
plt.axis('equal') # 设置饼状图为圆形 否则略椭圆
plt.legend(loc="best",fontsize=10,bbox_to_anchor=(1.2,0.05),borderaxespad=0.3)
# bbox_to_anchor=[0.5, 0.5] # 外边距 上边 右边
# ncol=2 分两列
# borderaxespad = 0.3 图例的内边距
plt.show()
6.4 环形图
饼图只能显示一个样本中各部分所占的比例。如果需要展示多个样本的构成比例,可以把多个饼图叠加在一起,挖去中间的部分,这就形成了环形图。环形图中间有一个“空洞”,每个样本用一个环来表示。样本中的每一部分数据用环中的每一段来表示。因此,环形图可以显示多个样本各部分所占的相应比例,有利于展示构成的比较研究结果。
扩展库matplotlib.pyplot中的函数pie()除了绘制饼图,也可以绘制环形图,与之相关的主要参数及含义如下
# 参数radius:设置圆环的半径,据此区分不同的圆环
# 参数pctdistance:设置每个扇形中心与autopct指定文本的开始位置
# 参数textprops:设置标签文本的颜色,其值为字典类型数据
# 参数wedqeprops:设置环形的宽度和边框颜色,其值为字典类型数据
#不同年份的家庭支出构成比较研究
labels1 = ['amusement','education','diet','mortgage',' transportation','others']
sizes3 = [16,12,22,33,8,9]
sizes2 = [10,15,18,40,8,9]
sizes1 = [8,12,15,50,6,9]
colors=('blue','red','green','orange','gray','cyan')
explode = (0,0,0,0,0,0)
plt.figure()
plt.pie(sizes3, explode=explode, radius=1.3, autopct='%1.0f%%',pctdistance=0.85,colors=colors, shadow=False, startangle=170,wedgeprops={'width':0.3,'edgecolor':'w'})
plt.pie(sizes2, explode=explode, radius=1.0, autopct='%1.0f%%',pctdistance=0.85,colors=colors, shadow=False, startangle=170,wedgeprops={'width':0.3,'edgecolor':'w'})
plt.pie(sizes1, explode=explode, radius=0.7, autopct='%1.0f%%',pctdistance=0.85,colors=colors, shadow=False, startangle=170,wedgeprops={'width':0.3,'edgecolor':'w'})
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.title("Demo")
plt.legend(loc="best",labels=labels1,fontsize=10,bbox_to_anchor=(1.05,0.05),borderaxespad=0.2,prop=proptease)
plt.show()
7 定量数据可视化
7.1 直方图
按照某种标准分组后的数值型数据,可以使用直方图呈现。直方图是用于展示连续型数据分布特征的统计图形,它用矩形的宽度和高度(即面积)表示频数分布。在平面直角坐标系中,用横轴表示数据分组,纵轴表示频数或频率这样,每个数据分组与相应的频数就形成了一个矩形,即直方图。
条形图与直方图区别:
- 条形图是用条形的长度(横置时)表示各类别频数的多少,宽度( 表示类别 )是固定的;直方图是用面积表示每个分组频数的多少矩形的高度表示每组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
- 条形图各矩形是分开排列的;由于分组数据具有连续性,直方图的各矩形通常是连续排列。
- 条形图主要用于展示分类数据;直方图主要用于展示数值型数据
扩展库matplotlib.pyplot中的hist()
函数可以根据给定的数据绘制直方图,其语法格式及重要参数如下:
hist(x, bins=None, range=None, density=None, bottom=None, histtype='bar', align='mid', log=Falsecolor=None, label=None, stacked=False, normed=None)
# 参数x: 数据集,最终的直方图将对该数据集进行统计
# 参数bins: 指定分组个数或分组边界,除了最后一组,其余分组有开放的边界,如:[1,2,3,4]的对应区间为[1,2)、[2,3)和[3,4]
# 参数range: 元组类型的数据,指定直方图中显示的数据区间,默认包含绘图数据的最大值和最小值,参数range在没有给出bins时生效
# 参数density: 布尔型数据,默认取值False,显示频数统计结果,当取值True显示频率统计结果,频率统计结果=区间数目/(总数*区间宽度)
# 参数histtype:指定直方图类型,取值可选{}'bar','barstacked','step','stepfilledy'}之一,默认值为bar,推荐使用默认配置;取值step表示梯状;取值stepfilled将对梯状内部填充,效果与bar类似
# 参数align:取值可选(left,mid,right)之一,默认值为mid,控制直方图的水平分布;取值若为left或者right,会有部分空白区域,推荐使用默认值;
# 参数orientation: 设置直方图的摆放方向,默认值为vertical,表示垂直方向;
# 参数log:布尔型数据,默认值为False,用于设置y轴是否选择指数刻度;
# 参数stacked:布尔型数据,默认值为False,设置是否绘制为堆积状图。
x = np.random.randn(1000) # 1000个正态分布的数据
bins = np.around(np.linspace(min(x), max(x), 10,endpoint=True),2)
h = plt.hist(x, bins=bins, color='navy', edgecolor='white',alpha=0.5)
plt.xlabel('value',)
plt.ylabel('frequency', rotation='horizontal',y=1)
plt.xticks(bins, bins)
plt.grid(axis='y',linewidth=0.5,linestyle='--') # 网格线
plt.show()
7.2 折线图
时间序列数据通常指在不同时间取得的数值型数据。折线图比较适合刻画多组数据随时间变化的趋势,或描述一组数据对另一组数据的依赖关系。绘制折线图时,时间一般放在横轴,观测值一般放在纵轴,可以形成横轴略大于纵轴的长方形,长宽比例大致为10:7。图形过扁或过瘦,容易让人产生视觉上的错觉,不便于对数据变化的理解。通常情况下,纵轴数据下端从“0”开始;如果数据与“0的差距过大,可以在纵轴上使用折断符号表示。
扩展库matplotlib.pyplot中的plot()函数可以根据给定得数据绘制折线图,其语法格式如下:
plot(*args,scalex=True,scaley=True,data=None,**kwargs)
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.random.randint(0,100,10)
plt.figure()
plt.title('An example of line chart',fontsize = 20)
plt.xlabel('x',fontsize=15)
plt.ylabel('y',fontsize=15)
plt.plot(x,y,color='darkblue',linewidth=2,linestyle='-',label='x-y',marker='o')
plt.legend(loc=0)
plt.show()
7.3 散点图
散点图是用二维坐标展示两个变量之间关系的图形。其中横轴代表变量x,纵轴代表变量y,每组数据在坐标系中用一个点来表示,n组数据在坐标系中形成的n个点称为散点,由坐标和散点形成的二维数据图称为散点图散点图比较适合描述数据在平面或空间中的分布和聚合情况,有助于分析数据之间的联系,例如:观察聚类算法的初始点选择和参数设置对聚类效果的影响等。
扩展库matplotlib.pyplot中的scatter0函数可以根据给定的数据绘制散点图,其语法格式如下:
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwaras)
# 参数x,y:分别用于指定绘制散点的x轴、y轴输入数据,可以是标量或数组形式的数据
# 参数s:数值或一维数组,用于指定散点图中点的大小,若是一维数组,则表示散点图中每个点的大小
# 参数c: 字符串或一维数组,用于表示散点图中点的颜色,若是一维数组,则表示散点图中每个点的颜色,# 参数marker:字符串类型的数据,用于表示散点的类型
# 参数alpha : 0~1之间的小数,用于表示散点的透明度
# 参数edqecolors: 用于指定散点符号的边线颜色,可以是颜色值或包含若干颜色值的序列。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.random.randint(0,100,10)
plt.figure(figsize=(10,5))#设置画布的尺寸
plt.title('An example of bubble chart',fontsize=20)#标题,并设定字号大小
plt.xlabel('x',fontsize=14)#设置x轴,并设定字号大小
plt.ylabel('y',fontsize=14)#设置y轴,并设定字号大小
plt.scatter(x,y,s=100,color='deeppink',marker='o')
plt.legend(['y-x'])
plt.show()