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

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

目录

matplotlib基础

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

导入包:

import matplotlib.pyplot as plt
import 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),可画多条曲线
来自:https://blog.csdn.net/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')

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
在上面的例子中,我们没有给定x的值,所以其默认值为[0, 1, 2, 3]。

传入x,y:

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

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

字符参数

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

表示颜色的字符参数:

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

; 表示类型的字符参数:

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

画出红色圆点:

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

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

显示范围

与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()

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

传入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()

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

传入多组数据

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

x=np.linspace(-np.pi,np.pi)
y=np.sin(x)
plt.plot(x,y,linewidth=4.0,color='r')
plt.show()

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

使用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()

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
接收列表进行修改:
line=plt.plot(x,y,'r-',x,y+1,'g-')
line.set_antialiased(False)

发现报错!

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
说明可以对单个返回值进行属性设置,但不能对列表进行属性设置

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)

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
line=plt.plot(x,y)
plt.setp(line,'color','b','linewidth',2)

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

子图

个人理解 :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:是否显示边框
来自:https://blog.csdn.net/m0_37362454/article/details/81511427

subplot()函数

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

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
来自:https://blog.csdn.net/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()

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

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

常见函数:
【matplotlib】 图解pyplot figure、subplot、axes、axis的区别
matplotlib常见函数- plt.rcParams、matshow/坐标轴设置

导入包

先操作一发忽略警告
这个警告其实没啥大问题,就是看着难受QAQ

import warnings
warnings.filterwarnings('ignore')

否则会出现:

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
写上就好啦
Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
import pandas as pd
import numpy as np
import 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函数可参考:https://www.cnblogs.com/douzujun/p/10327963.html

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

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

柱状图(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.index
y=data.values

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)

for a,b in zip(x,y):
    plt.text(a,b+10,b,ha='center',va='bottom',fontsize=10)

plt.show()

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

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

曲线图又称折线图,是利用曲线的升、降变化来表示被研究现象发展变化趋势的一种图形。它在分析研究社会经济现象的发展变化、依存关系等方面具有重要作
绘制曲线图时,如果是某一现象的时间指标 应将时间绘在坐标的横轴上指标绘在坐标的纵轴上。如果是两个现象依存关系的显示,可以将表示原因的指标绘在横
轴上,表示结果的指标绘在纵轴上。同时还应注意整个图形的长宽比例。

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

data=df['年代'].value_counts()
data=data.sort_index()[:-2]
data

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

绘图:


x=data.index
y=data.values

plt.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('2012年达到最大值',xy=(2012,data[2012]),xytext=(2025,2100),arrowprops=dict(facecolor='black',edgecolor='red'))

plt.text(1980,200,'电影数量开始快速增长')

plt.show()

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

对于这幅图形。我们使用 xlabel , ylabel . title, text方法设置了文字,其中:
●xlabel : x轴标注
●ylabel : y轴标注
●title :图形标题
●text :在指定位置放入文字
输入特殊符号支持使用Tex语法.用 $<some tex code>$</some> 隔开。
除了使用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, 如

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

来自:https://www.cnblogs.com/biyoulin/p/9565350.html

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

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

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

绘制:

y=data.values
y=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()

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

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

频率分布直方图(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()

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

第六次课作业

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

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

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

(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()

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

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

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

Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图
data=df['地区'].value_counts()

x=data.index
y=data.values

plt.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()

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

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

data=df['价格等级'].value_counts()

x=data.index
y=data.values

plt.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()

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

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

data=df['价格等级'].value_counts()

plt.figure(figsize=(7,7))

plt.title('各个价格等级酒店占比',fontsize=20)

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()

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

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

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

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

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

data=df['评分'].groupby(df['热门等级']).mean()
data=data.sort_values()

x=data.index
y=data.values

plt.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包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图

Original: https://blog.csdn.net/qq_46118704/article/details/113475261
Author: groperr
Title: Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/768638/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球