1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化 简单绘制柱状

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化 简单绘制柱状

时间:2022-11-19 00:58:53

相关推荐

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化 简单绘制柱状

本文是视频Python数据分析三剑客 数学建模基础 numpy、pandas、matplotlib的学习笔记。

————————————————————————————————————————————————————

目录

matplotlib基础导入包:plt.show函数plt.plot()函数基本用法绘制线型图字符参数表示颜色的字符参数:表示类型的字符参数:画出红色圆点:显示范围传入Numpy数组在一个图里画多条线传入多组数据使用plt.plot()的返回值来设置线条属性plt.setp()修改线条性质子图figure()函数subplot()函数电影数据绘图——数据可视化导入包绘制每个国家或地区的电影数量的柱状图使用bar()函数绘制柱状图绘图:绘制每年上映的电影数量的曲线图反映变化趋势绘图:根据电影长度绘制饼图pie函数解释将电影时长进行离散化操作绘制:根据电影的评分绘制频率分布直方图hist函数绘图:第六次课作业(1)画出𝑦=𝑥2+2𝑥+1在区间[-5,3]的函数图像。(2)在同一张图中创建两个子图,分别画出sinx和cosx在[-3.14,3.14]上的函数图像。设置线条宽度为2.5.(3)读取上次作业保存的酒店数据,画出每个地区酒店数量的柱状图,柱状颜色为红色(4)画出每个价格等级酒店数量的柱状图。(5)画出各个价格等级占比的饼图。(6)画出酒店评分的直方图。(7)画出每个热门等级酒店评分均值的柱状图。(按照评分均值从小到大排序。)

matplotlib基础

matplotlib是一个Python的2D图形包。pyplot封装了很多画图的函数。

导入包:

import matplotlib.pyplot as pltimport numpy as np

matplotlib. pyplot包含一系列类似 MATILAB中绘图函数的相关函数。

每个matplotlib. pyplot中的函数对当前的图像进行一些修改 ,例如:产生新的图像,在图 像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等… matplotlib. pyplot会自动记住当前的图像和绘图区域,因此这些函数会直接作用在当前 的图像上。 在实际的使用过程中,常常以plt作为matplotlib. pyplot的省略。

plt.show函数

默认情况下, matplotlib. pyplot不会直接显示图像,调用plt. show()函数时,图像才会显示出来。

plt. show()默认是在新窗口打开一幅图像 ,且提供了对图像进行操作的按钮。

不过在ipython命令行中,我们可以将它插入notebook中,并且不需要调用plt. show()也可以显示:

%matplotlib notebook%matplotlib inline

以百分号开头的是魔术命令,调用魔术命令可以在不使用show函数的情况下显示图像

不过在实际写程序中,我们还是习惯调用plt. show()函数将图像显示出来。

plt.plot()函数

plt.plot()函数主要用于折线图的绘制。

plot()函数参数解释:

plt.plot(x, y, format_string, **kwargs)

x: X轴数据,列表或数组,可选

y: Y轴数据,列表或数组 format_string 控制曲线的格式字符串,可选

**kwargs第二组或更多(x,y,format_string),可画多条曲线

来自:/weixin_44010756/article/details/109326364

具体函数参数参见:plt.plot()函数详解

二、Matplotlib系列—pyplot的plot( )函数

基本用法

plot函数基本的用法: 指定x和y

●plt. plot(x, y)

默认参数, x为0~N-1

●plt. plot(y)

绘制线型图

plt.plot([1,2,3,4])plt.ylabel('y')plt.xlabel('x')#使用中文会出现乱码

在上面的例子中,我们没有给定x的值,所以其默认值为[0, 1, 2, 3]。

传入x,y:

plt.plot([1,2,3,4],[1,4,9,16])plt.show()#不显示内存

字符参数

可以用字符来设定图像的格式。

表示颜色的字符参数:

表示类型的字符参数:

画出红色圆点:

plt.plot([1,2,3,4],[1,4,9,16],'ro')plt.show()

显示范围

与matlab类型,可以使用axis函数指定坐标轴显示的范围:plt.axis([xmin,xmax,ymin,ymax])

plt.plot([1,2,3,4],[1,4,9,16],'ro')plt.axis([0,6,0,20])plt.show()

传入Numpy数组

之前我们传给plot的参数都是列表,事实上,向plot中传入numpy数组是更常用的做法。

事实上,如果传入的是列表, matplotlib会在内部将它转化成数组再进行处理:

在一个图里画多条线

事实上,在上面的例子中,我们不仅仅向plot函数传入了数组,还传入了多组(x, y, format_ str)参数,它们在同一张图上显示。

这意味着我们不需要使用多个plot函数来画多组数组,只需要可以将这些组合放到一个plot函数中去即可。

t=np.arange(0.,5.,0.2)plt.plot(t,t,'r--',t,t**2,'bs',t,t**3,'g^')plt.show()

传入多组数据

线条属性:linewidth可以改变线条的宽度,color可以改变线条颜色

x=np.linspace(-np.pi,np.pi) #生成等差数列y=np.sin(x)plt.plot(x,y,linewidth=4.0,color='r') #设置线条宽度为4,颜色为红色plt.show()

使用plt.plot()的返回值来设置线条属性

plot函数返回-个Line2D对象组成的列表,每个对象代表输入的一对组合,例如:

line1, line2两个Line2D对象

linel, line2 = plt. plot(x1, y1, x2, y2)

返回3个Line2D对象组成的列表

lines = plt.plot(x1, yl, x2, y2, x3, y3)

我们可以使用这个返回值来对线条属性进行设置:

接收单个返回值进行修改:

line1,line2=plt.plot(x,y,'r-',x,y+1,'g-')line1.set_antialiased(False)#关闭抗锯齿plt.show()

接收列表进行修改:

line=plt.plot(x,y,'r-',x,y+1,'g-')line.set_antialiased(False)#关闭抗锯齿

发现报错!

说明可以对单个返回值进行属性设置,但不能对列表进行属性设置

plt.setp()修改线条性质

函数解释:

setp(obj, *args, **kwargs)

obj:所要进行操作的对象

*args:可变参数,可传入列表,进行所要进行的操作,如:x = arange(0,1.0,0.01)

**kwargs 关键字参数,接收字典值,进行所要进行的操作,如:linewidth=2

详细可参见:setp函数–Matplotlib

line=plt.plot(x,y)plt.setp(line,color='r',linewidth=4)

line=plt.plot(x,y)plt.setp(line,'color','b','linewidth',2)#matlab风格的调用方式

子图

个人理解 :figure()函数可以用来生成画布,各种参数可以定义画布大小,而subplot()可以帮助生成多个画布,帮助我们更好的定位各个画布

figure()函数会产生一个指定编号为num的图:

plt. figure (num)

这里, figure(1)实可以省略的,因为默认情况下plt自动产生一幅图像。

使用subplot可以在一副图中生成多个子图,其参数为:

plt. subplot (numrows, numcols, fi gnum)

当numrows * numcols < 10时,中间的逗号可以省略,因此plt. subplot (211)就相当于plt. subplot(2, 1, 1)。

figure()函数

figure语法说明:

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

num:图像编号或名称,数字为编号 ,字符串为名称

figsize:指定figure的宽和高,单位为英寸;

dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张

facecolor:背景颜色

edgecolor:边框颜色

frameon:是否显示边框

来自:/m0_37362454/article/details/81511427

subplot()函数

subplot(nrows,ncols,sharex,sharey,subplot_kw,**fig_kw)

来自:/m0_37362454/article/details/81511427

def f(t):return np.exp(-t)*np.cos(2*np.pi*t)t1=np.arange(0.0,5.0,0.1)t2=np.arange(0.0,5.0,0.02)​plt.figure(figsize=(10,6))plt.subplot(211)plt.plot(t1,f(t1),'bo',t2,f(t2),'k')#第一幅图​plt.subplot(212)plt.plot(t2,np.cos(2*np.pi*t2),'r--')#第二幅图plt.show()

电影数据绘图——数据可视化

常见函数:

【matplotlib】 图解pyplot figure、subplot、axes、axis的区别

matplotlib常见函数- plt.rcParams、matshow/坐标轴设置

导入包

先操作一发忽略警告

这个警告其实没啥大问题,就是看着难受QAQ

import warningswarnings.filterwarnings('ignore')#忽略警告

否则会出现:

写上就好啦

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt

预处理:

#设置黑体,从而可以显示中文plt.rcParams['font.sans-serif']=['SimHei'] #设置符号显示plt.rcParams['axes.unicode_minus']=False df=pd.read_excel('movie_data3.xlsx')df[:5]

rcParams函数可参考:/douzujun/p/10327963.html

绘制每个国家或地区的电影数量的柱状图

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

柱状图亦可横向排列,或用多维方式表达。

使用bar()函数绘制柱状图

函数解释:

bar(left, height, width, color, align, yerr)

left为x轴的位置序列,一般采用arange函数产生一个序列;

height为y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;

width为柱形图的宽度,一般这是为1即可;color为柱形图填充的颜色;

align设置plt.xticks()函数中的标签的位置;

yerr让柱形图的顶端空出一部分。

color设置柱状的颜色

alpha设置柱状填充颜色的透明度 大于0 小于等于1

linewidth设置线条的宽度

来自:matplotlib 直方图 和堆叠直方图 plt.bar()

这个也不错:Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解

绘图:

data=df['产地'].value_counts()#找到横纵轴x=data.indexy=data.values#画10*6的图案plt.figure(figsize=(10,6))plt.bar(x,y,color='g')#定义标题plt.title('各国家或地区电影数量',fontsize=20)#对横纵轴进行设定plt.xlabel('国家或地区',fontsize=18)plt.ylabel('电影数量',fontsize=18)#坐标轴字体调整plt.tick_params(labelsize=14) #设置纵轴字体大小plt.xticks(rotation=90) #将横轴字旋转90度#给图形添加数据标签for a,b in zip(x,y):plt.text(a,b+10,b,ha='center',va='bottom',fontsize=10) #ha设定对齐方式,va设定垂直对齐方式#增加网格线#plt.grid()plt.show()

绘制每年上映的电影数量的曲线图反映变化趋势

曲线图又称折线图,是利用曲线的升、降变化来表示被研究现象发展变化趋势的一种图形。它在分析研究社会经济现象的发展变化、依存关系等方面具有重要作

绘制曲线图时,如果是某一现象的时间指标 应将时间绘在坐标的横轴上指标绘在坐标的纵轴上。如果是两个现象依存关系的显示,可以将表示原因的指标绘在横

轴上,表示结果的指标绘在纵轴上。同时还应注意整个图形的长宽比例。

主要用1888-数据,以后数据不完整

data=df['年代'].value_counts()data=data.sort_index()[:-2] #利用切片将不完整数据清除data

绘图:

#横纵轴值x=data.indexy=data.valuesplt.plot(x,y,color='b')plt.title('每年电影数量',fontsize=20)plt.ylabel('电影数量',fontsize=18)plt.xlabel('年份',fontsize=18)for a,b in zip(x[::10],y[::10]): #间隔十年标记数据plt.text(a,b+10,b,ha='center',va='bottom',fontsize=10)#用箭头标记极值点plt.annotate('达到最大值',xy=(,data[]),xytext=(2025,2100),arrowprops=dict(facecolor='black',edgecolor='red'))#设置语句plt.text(1980,200,'电影数量开始快速增长')plt.show()

对于这幅图形。我们使用xlabel,ylabel.title,text方法设置了文字,其中:

●xlabel : x轴标注

●ylabel : y轴标注

●title :图形标题

●text :在指定位置放入文字

输入特殊符号支持使用Tex语法.用$<some Tex code>$隔开。

除了使用text在指定位置标上文字之外,还可以使用annotate函数进行注释,annotate主要有两个参数:

●xy :注释位置

●xytext :注释文字位置

根据电影长度绘制饼图

饼图英文学名为Sector Graph,有名Pie Graph。常用于统计学模块。2D饼图为圆形,手画时.常用圆规作图。

仅排列在工作表的一列或一行中的数据可以绘制到饼图中。 饼图显示一个数据系列( 数据系列:在图表中绘制的相关数据点,这些数据源自数据表的行或列。图表中的每个数据系列具有唯一的颜色或图案并且在图表的图例中表示。 可以在图表中绘制一个或多个数据系列。饼图只有一个数据系列。) 中各项的大小与各项总

和的比例。

饼图中的数据点( 数据点:在图表中绘制的单个值,这些值由条形、柱形、折线、饼图或圆环图的扇面、圆点和其他被称为数据标记的图形表示。相同颜色的数据标记组成一个数据系列。) 显示为整个饼图的百分比。

饼图反映占比,适合类别较少的数据分类

pie函数解释

def pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)

x:(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化;

labels:(每一块)饼图外侧显示的说明文字;

explode:(每一块)离开中心距离;

startangle:起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;

shadow:在饼图下面画一个阴影。默认值:False,即不画阴影;

labeldistance:label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;

autopct:控制饼图内百分比设置,可以使用format字符串或者format function%1.1f指小数点前后位数(没有用空格补齐);

pctdistance:类似于labeldistance,指定autopct的位置刻度,默认值为0.6;

radius:控制饼图半径,默认值为1;

counterclock:指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。

wedgeprops:字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={‘linewidth’:3}设置wedge线宽为3。

textprops:设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。

center:浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。

frame:布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。

rotatelabels:布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。

返回值:

如果没有设置autopct,返回(patches, texts)

如果设置autopct,返回(patches, texts, autotexts)

来自:/biyoulin/p/9565350.html

将电影时长进行离散化操作

data=pd.cut(df['时长'],[0,60,90,110,1000]).value_counts()data

绘制:

y=data.valuesy=y/sum(y) #归一化处理,系统会自动进行,可不写plt.figure(figsize=(7,7)) #设置饼图大小plt.title('电影时长占比',fontsize=15)patches,l_text,p_text=plt.pie(y,labels=data.index,autopct='%.2f %%',colors='bygr',startangle=90)#通过函数返回值修改文字for i in p_text:i.set_size(15)i.set_color('w')for i in l_text:i.set_size(15)i.set_color('r')#增加图例plt.legend()plt.show()

根据电影的评分绘制频率分布直方图

频率分布直方图(Histogram)又称质量分布图。是一种统计报告图,由系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。

频率分布直方图是数值数据分布的精确图形表示。这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔皮尔逊( Karl Pearson )首先引入。它是一种条形图。

为了构建直图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔 ,然后计算每个间隔中有多少值。这些值通常被指定为连续的.不重叠的变量间隔。间隔必须相邻,并且通常是(但不是必须的)相等的大小。

直方图也可以被归一化以显示相对频率。然后,它显示了属于几个类别中的每个案例的比例,其高度等于1。

hist函数

matplotlib为我们提供了hist函数,借助hist函数我们可以画出频率分布直方图。

hist的参数非常多.但常用的就这几个.只有第一个是必须的,后面几个可选

arr:需要计算直方图的一维数组

bins:直方图的柱数,可选项,默认为10

normed:否将得到的直方图向量归一化。默认为0

facecolor:直方图颜色

edgecolor:直方图边框颜色

alpha:透明度

histtype:直方图类型, “bar, ‘barstacked’, ‘step’, 'stepilled”

返回值:

n:方图向量.是否归- -化由参数normed设定

bins:返回各个bin的区间范围

patches:返回每个bin里面包含的数据,是一个list

详细可参见:matplotlib.pyplot.hist函数 参数详解

绘图:

plt.figure(figsize=(10,6))plt.hist(df['评分'],bins=20,edgecolor='w',alpha=0.5)plt.show()

第六次课作业

(1)画出𝑦=𝑥2+2𝑥+1在区间[-5,3]的函数图像。

def f(x):return x**2+2*x+1x1=np.linspace(-5,3)y1=f(x1)plt.plot(x1,y1,color='k')plt.show()

(2)在同一张图中创建两个子图,分别画出sinx和cosx在[-3.14,3.14]上的函数图像。设置线条宽度为2.5.

t1=np.linspace(-np.pi,np.pi)plt.figure(figsize=(10,6))plt.subplot(211)plt.plot(t1,np.sin(t1),'b-') #第一幅图plt.grid()plt.subplot(212)plt.plot(t1,np.cos(t1),'r--') #第二幅图plt.grid()plt.show()

(3)读取上次作业保存的酒店数据,画出每个地区酒店数量的柱状图,柱状颜色为红色

plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False df=pd.read_excel('酒店数据22.xlsx',index_col=0)df[:5]

data=df['地区'].value_counts()x=data.indexy=data.valuesplt.figure(figsize=(10,6))plt.bar(x,y,color='r',width=0.5,alpha=0.3,linewidth=1)plt.title('各个地区酒店数量柱状图',fontsize=20)plt.ylabel('酒店数量',fontsize=15)plt.xlabel('地区',fontsize=15)for a,b in zip(x,y):plt.text(a,b+2,b,ha='center',va='bottom',fontsize=10)plt.show()

(4)画出每个价格等级酒店数量的柱状图。

data=df['价格等级'].value_counts()x=data.indexy=data.valuesplt.figure(figsize=(10,6))plt.bar(x,y,color='g',width=0.5,alpha=0.3,linewidth=1)plt.title('各个价格等级数量柱状图',fontsize=20)plt.ylabel('酒店数量',fontsize=15)plt.xlabel('价格等级',fontsize=15)for a,b in zip(x,y):plt.text(a,b+2,b,ha='center',va='bottom',fontsize=12)plt.show()

(5)画出各个价格等级占比的饼图。

data=df['价格等级'].value_counts()plt.figure(figsize=(7,7)) plt.title('各个价格等级酒店占比',fontsize=20)#colors=['lightskyblue','linen','palegreen']patches,l_text,p_text=plt.pie(y,labels=data.index,autopct='%.2f %%',startangle=90,explode=(0.01,0.01,0.01) )for i in p_text:i.set_size(15)i.set_color('w')for i in l_text:i.set_size(15)i.set_color('r')plt.legend()plt.show()

(6)画出酒店评分的直方图。

plt.figure(figsize=(10,6))plt.hist(df['评分'],bins=20,edgecolor='w',alpha=0.5)plt.title('酒店评分直方图',fontsize=20)plt.show()

(7)画出每个热门等级酒店评分均值的柱状图。(按照评分均值从小到大排序。)

data=df['评分'].groupby(df['热门等级']).mean()data=data.sort_values()x=data.indexy=data.valuesplt.figure(figsize=(10,6))plt.bar(x,y,color='r',width=0.5,alpha=0.3,linewidth=1)plt.title('各个热门等级酒店评分均值柱状图',fontsize=20)plt.ylabel('酒店数量',fontsize=15)plt.xlabel('热门等级',fontsize=15)for a,b in zip(x,y):plt.text(a,b+0.05,b,ha='center',va='bottom',fontsize=10)plt.show()

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化 简单绘制柱状图 曲线图 饼图 频率分布直方图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。