直方图 hist
直方图(Histogram),又称质量分布图,它是一种条形图的一种,由一系列高度不等的纵向线段来表示数据分布的情况。直方图的横轴表示数据类型,纵轴表示分布情况。
首先,我们需要了解柱状图和直方图的区别。直方图用于概率分布,它显示了一组数值序列在给定的数值范围内出现的概率,其x轴是连续的;而柱状图则用于展示各个类别的频数。
plt. hist(x, bins=None,range=None,density=None,weights=None,cumulative=False, bottom=None,histtype=' bar',aligne'mid', orientation='vertical',rwidth=None,log=False,color=None,label=None,stacked=False,normed=None,*, data=None,**kwargs)
- x:作直方图所要用的数据,必须是一维数组;多维数组可以先进行扁平化再作图;必选参数
- bins:直方图的柱数,即要分的组数,默认为10;
- weights与x形状相同的权重数组;将x中的每个元素乘以对应权重值再计数;如果normed或density取值为True,则会对权重进行归一化处理。这个参数可用于绘制已合并的数据的直方图;
- density:布尔,可选。如果"True"”,返回元组的第一个元素将会将计数标准化以形成一个概率密度,也就是说,直方图下的面积(或积分)总和为1。这是通过将计数除以数字的数量来实现的观察乘以箱子的宽度而不是除以总数数量的观察。如果叠加也是“真实”的,那么柱状图被规范化为1。(替代normed)
- bottom:数组,标量值或None;每个柱子底部相对于y=0的位置。如果是标量值,则每个柱子相对于y=0向上/向下的偏移量相同。如果是数组,则根据数组元素取值移动对应的柱子;即直方图上下便宜距离;
- histtype: {‘bar’, barstacked’, ‘step’, 'stepfiled}; bar’是传统的条形直方图; ‘barstacked’是堆叠的条形直方图; ‘step’是未填充的条形直方图,只有外边框; ‘stepfilled’是有填充的直方图;当histtype取值为’step或’steprilled’,width设置失效,即不能指定柱子之间的间隔,默认连接在一起;
- align:{‘left’, ‘mid , right}; "left’:柱子的中心位于bins的左边缘;'mid ': 柱子位于bins左右边缘之间;'right: 柱子的中心位于bins的右边缘;
- color:具体颜色,数组(元素为颜色)或None。
- label:字符串(序列)或None;有多个数据集时,用label参数做标注区分;
- normed:是否将得到的直方图向量归一化,即显示占比,默认为0,不归一化;不推荐使用
建议改用density参数; - edgecolor:直方图边框颜色;
- alpha:透明度;
x = np.random.randint(50,101,100) plt.xticks(np.arange(50,101,5)) plt.hist(x,bins=10,edgecolor='white')
同时直方图函数拥有返回值
- n:数组或数组列表
直方图的值 - bins:数组
返回各个bin的区间范围 - patches : 返回每个bin里面包含的数据,是一个list
n,bins,patches = plt.hist(x,bins=10,edgecolor='white') print('n是分组区间对应的频率',n,end='\n') print('bins是分组时的间隔值',bins,end='\n') print('patches是值直方图中列表对象',type(patches),end='\n') for i in patches: print(i) print(i.get_x()) print(i.get_y()) print(i.get_height())
饼状图 pie
pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None)
饼状图用来显示一个数据系列,具体来说,饼状图显示一个数据系列中各项目的占项目总和的百分比.
Matplotlib 提供了一个pie()函数,该函数可以生成数组中数据的饼状图。您可使用xlsum(x)来计算各个扇形区域占饼图总和的百分比。pie()函数的参数说明如下:
- x:数组序列,数组元素对应扇形区域的数量大小。
- labels:列表字符串序列,为每个扇形区域备注一个标签名字
- colors;为每个扇形区域设置颜色,默认按照颜色周期自动设置。
- autopct:格式化字符串"fmt%pct",使用百分比的格式设置每个扇形区的标签,并将其放置在扇形区内。
- pctdistance:设置百分比标签与圆心的距离;
- labeldistance:设置各扇形标签(图例)与圆心的距离;
- explode:指定饼图某些部分的突出显示,即呈现爆炸式;
- shadow:是否添加饼图的阴影效果
plt.rcParams['figure.figsize']=(5,5) labels=['吃饭','睡觉','学习','打游戏'] # 数据标签 x = [100,200,300,400] # 数据占比 explode = [0.1,0,0,0] # 设置离圆心的距离 plt.pie(x,labels=labels,autopct='%.2f%%',explode=explode,labeldistance=1.2,pctdistance=1.05) plt.axis('equal') # 设置图形为正圆 plt.legend() # 开启图例
散点图scatter
matplotlib.pyplot.scatter(x,y, s=None, c=None, marker=None,cmap=None, norm=None,
vmin=None,vmax=None, alpha=None, linewidths=None, , edgecolors=None, plotnonfinite=Falsedata=None,
*kwargs)
散点图也叫X-Y图,它将所有的数据以点的形式展现在直角坐标系上,以显示变量之间的相互影响程度,点的位置由变量的数值决定。
通过观察散点图上数据点的分布情况,我们可以推断出变量间的相关性。如果变量之间不存在相互关系,那么在散点图上就会表现为随机分布的离散的点,如果存在某种相关性,那么大部分的数据点就会相对密集并以某种趋势呈现。
数据的相关关系主要分为:正相关(两个变量值同时增长)、负相关(一个变量值增加另一个变量值下降)、不相关、线性相关、指数相关等,表现在散点图上的大致分布如下图所示。那些离点集群较远的点我们称为离群点或者异常点。
- x,y→散点的坐标
- s→散点的面积
- c→散点的颜色(默认值为蓝色,‘b’,其余颜色同plt.plot( ))
- marker →散点样式(默认值为实心圆, ‘o’,其余样式同plt.plot( ))
- alpha→散点透明度([0,1]之间的数,0表示完全透明,1则表示完全不透明)
- linewidths→散点的边缘线宽
- edgecolors→散点的边缘颜色
- cmap →Colormap,默认None,标量或者是一个colormap的名字,只有c是一个浮点数数组的时才使用
plt.figure(figsize=(2,2)) x = np.array([1,2,3,4,5,6]) y = [1,2,3,4,5,6] s=np.array([1,2,3,4,5,6]) # plt.scatter(x,y,s=s**2,alpha=0.9,c=np.random.randint(90,100,6)) plt.scatter(np.random.rand(100),np.random.rand(100),cmap='Blues',c=np.random.rand(100)) # plt.plot(x,y)
箱线图boxplot
**matploti.pyplot.boxplot(x, notch=None, sym=None, ert=None, whis=None, postions=None, widths=None,
patch_artist=None,
bootstrap=None,usermedians=None,conf_intervals=None, meanline=None, showmeans=None, showcaps=None,showbox=None,showiers=None, boxprops=None,labels=None, fierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None,
** manage_ticks=Ture,autorange=False,zorder=None, *, data=None)
箱线图(Boxplot)是一种用作显示一组数据分散情况资料的统计图表
箱线图,又称箱形图(boxplot)或盒式图,不同于一般的折线图、柱状图或饼图等图表,其包含一些统计学的均值、分位数、极值等统计量,该图信息量较大,不仅能够分析不同类别数据平均水平差异,还能揭示数据间离散程度、异常值、分布差异等。
- x:输入数据。类型为数组或向量序列。必备参数。
- notch:控制箱体中央是否有V型凹槽。当取值为True时,箱体中央有V型凹槽,凹槽表示中位数的置信区间;取值为Fase时,箱体为矩形。类型为布尔值,默认值为False。可选参数。
- vert: 箱体的方向,当取值为True时,绘制垂直箱体,当取值为False时,绘制水平箱体。类型为布尔值,默认值为True。可选参数
- positions:指定箱体的位置。刻度和极值会自动匹配箱体位置。类型为类数组结构。可选参数。默认值为range(1,N+1),N方为箱线图的个数
- widths:箱体的宽度。类型为浮点数或类数组结构。默认值为0.5或0.15*极值间的距离。
- labels:每个数据集的标签,默认值为’None’。类型为序列。可选参数。
- autorange:类型为布尔值,默认值为False。可选参数。当取值为True且数据分布满足上四分位数(75%)和下四分位数(25%)
- showmeans:是否显示算术平均值。类型为布尔值,默认值为False。可选参数。
- meanline:均值显示为线还是点。类型为布尔值,默认值为False。可选参数。当取值为True,且showmeans、
shownotches参数均为Tue,时显示为线 - capprops:箱须横杠的样式。类型为字典,默认值为None。可选参数。
- boxprops:箱体的样式。类型为字典,默认值为None。可选参数
- whiskerprops:箱须的样式。类型为字典,默认值为None。可选参数。
- flierprops:离群点的样式。类型为字典,默认值为None。可选参数。
- medianprops:中位数的样式。类型为字典,默认值为None。可选参数。
- meanprops:算术平均值的样式。类型为字典,默认值为None。可选参数。
图片保存
savefig(fname,dpi=None, facecolor=' w', edgecolor='w' , orientation=’portrait’,papertype=None,format=None,transparent=False, bbox_inches=None,pad_inches=0.1,frameon=None,metadata=None)
- fname:(字符串或者仿路径或仿文件)如果格式已经设置,这将决定输出的格式并将文件按fname来保存。如果格式没有设置,在fname有扩展名的情况下推断按此保存,没有扩展名将按照黑人格式存储为“png"格式,并将适当的扩展名添加在fname后面。
- dpi:分辨率,每英寸的点数
- facecolor(颜色或" auto”,默认值是“auto")︰图形表面颜色。如果是“auto”,使用当前图形的表面颜色。
- edgecolor(颜色或" auto”,默认值: “auto"):图形边缘颜色。如果是“auto”,使用当前图形的边缘颜色。
- format(字符串)︰文件格式,比如"png",“pdf",“svg"等,未设置的行为将被记录在fname中。
- transparent:用于将图片背景设置为透明。图形也会是透明,除非通过关键字参数指定了表面颜色和/或边缘
特别主意:
第一个参数frame就是保存的路径,如果路径中包含未创建的文件夹就会报错,该方法只能用来创建文件,不会自动创建文件夹.同时,该方法必须要在show方法调用之前执行
plt.figure(figsize=(2,2)) x = np.array([1,2,3,4,5,6]) y = [1,2,3,4,5,6] s=np.array([1,2,3,4,5,6]) plt.scatter(np.random.rand(100),np.random.rand(100),cmap='Blues',c=np.random.rand(100)) plt.savefig('photo.png') # savefig方法必须写在show方法前面 plt.show()
x = np.random.rand(20) plt.boxplot(x,showmeans=True,meanline=True) plt.grid() plt.show()
词云图
wordcloud
wordcloud用于进行词云图的绘制
首先需要进行安装,方式为pip/conda install jieba
from wordcloud import WordCloud with open('./learn/test.txt',encoding='utf-8') as file: txt = file.read() # 如果数据文件中包含中文,那么font_path必须指定字体,否则中文会乱码 wordcloud = WordCloud(font_path = 'C:/Windows/Fonts/simfang.ttf', collocations=False,background_color='black', width=800, height=600, max_words=50).generate(txt) # 生成图片 image = wordcloud.to_image() # 展示图片 image.show() # 写入文件 wordcloud.to_file('./wordcloud.jpg')
jieba
jieba用于进行分词
如果没有安装,那么可以通过pip/conda install jieba进行安装
import jieba # 导入jieba进行分词 seg_list = jieba.cut('我来自东北呀,你来自哪里',cut_all=True) print('全模式 '+' '.join(seg_list)) seg_list = jieba.cut('我来自东北亚,你来自哪里',cut_all=False) print('精确模式 '+' '.join(seg_list))
txt = '我来自东北呀,是个美丽的地方,其实我来自福建,我喜欢玩尬的' jieba_list = jieba.cut(txt) txt_list = " ".join(jieba_list) # 如果数据文件中包含中文,那么font_path必须指定字体,否则中文会乱码 wordcloud = WordCloud(font_path = 'C:/Windows/Fonts/simfang.ttf', collocations=False,background_color='black', width=800, height=600, max_words=50).generate(txt_list) # 生成图片 image = wordcloud.to_image() # 展示图片 image.show() # 写入文件 wordcloud.to_file('./jieba.jpg')
jieba.analyse
作用为提取关键字
- 第一个参数:待提取关键词的文本
- 第二个参数 topK:返回关键词的数量,重要性从高到低排序
- 第三个参数withWeight:是否同时返回每个关键词的权重
- 第四个参数allowPOS=():词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词,查看:jieba词性表.txt
import jieba import jieba.analyse text = '真的编不出什么话了,但是如果你认为本文有用的话请点赞吧,球球了,好的,非常感谢你,中国软件开发社区' set_list = jieba.analyse.extract_tags(text,allowPOS=('n')) print(str(set_list)) txt = " ".join(set_list) # 如果数据文件中包含中文,那么font_path必须指定字体,否则中文会乱码 wordcloud = WordCloud(font_path = 'C:/Windows/Fonts/simfang.ttf', collocations=False,background_color='black', width=800, height=600, max_words=50).generate(txt) # 要求传入一段话 # 生成图片 image = wordcloud.to_image() # 展示图片 image.show() # 写入文件 wordcloud.to_file('./jieba.jpg')
报错解决
x.label调用出现TypeError: ‘str’ object is not callable
考核
试用matplotlib绘制笛卡尔♥型曲线