数据分析matplotlib

本文介绍了如何使用matplotlib进行数据图形化,包括plot函数的基本用法、创建不同类型的图形(如直方图、饼图和散点图)、定制坐标轴和添加网格线,以及保存和调整图片格式。此外,还展示了如何设置中文标签和文本旋转。
摘要由CSDN通过智能技术生成

matplotlib能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。

pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数。

绘制图像

plot 函数位于 matplotlib.pyplot 这个模块中,是绘制图形的主要函数。plot 函数可以接收多组 X 轴、Y 轴数据进行绘图,也可以控制曲线的格式等等。可以通过查看帮助了解plot

import matplotlib.pyplot as plt
help(plt.plot)

plot的作用相当于开始绘图,最后通过show()展示出来。

import matplotlib.pyplot as plt
x=range(10)
y=[15,12,23,13,16,19,31,22,23,30]
plt.plot(x,y)
plt.show()

创建图形

感觉图片展示的大小存在问题可以通过figure()来调节。以下为figure的语法:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)

num:可选参数,如果不设定在创建窗口时会自增,如果设定则一致以设定的参数存在。也可以理解为给自己的图像取名。

figsize:可选参数,设定窗口大小。

dpi:可选参数,整数,相当于设定清晰度。

facecolor:可选参数,表示窗口的背景颜色,范围为‘#00000’-‘#FFFFFF'。

edgecolor:可选参数,表示边框颜色。

clear:可选参数,有True和False,当为True时,内容被清空。

import matplotlib.pyplot as plt
plt.figure(num=8,figsize=(8,4),facecolor='#FFFFFF',edgecolor='#000000')
x=range(10)
y=[15,12,23,13,16,19,31,22,23,30]
plt.plot(x,y)
plt.show()

坐标轴

xticks(ticks=None, labels=None, **kwargs) 获取或设置当前x轴刻度位置和标签。若不传递任何参数,则返回当前刻度。

yticks(ticks=None, labels=None, **kwargs) 获取或y轴刻度位置和标签。若不传递任何参数,则返回当前刻度值。

xlabel(' ’,loc=' ',fontdict=' ',labelpad=' ')为x轴命名。

ylabel(' ',loc=' ',fontdict=' ',labelpad=' ')  为y轴命名

title(' ',loc=' ',fontdict=' ',labelpad=' ')绘制图像的title.

在坐标轴上也可以有多个标签,但最多有三个标签,由参数left,center,right决定。特定位置的参数由loc决定。

fontdict可以决定字体的系统(family),大小(size),颜色(color),粗细(weight)等。

import matplotlib.pyplot as plt
plt.figure(num=8,figsize=(6,4),facecolor='#FFFFFF',edgecolor='#000000')
x=range(10)
y=[15,12,23,13,16,19,31,22,23,30]
#plt.xlabel('entry_x')
plt.rcParams["font.sans-serif"]=['SimHei']#用于显示中文标签
plt.yticks(y)
plt.xticks(x,labels=['A','B','C','D','E','F','G','H','I','P'])
plt.xlabel('x轴',loc='right')
plt.title('123',fontdict={'family':'serif','size':18,'weight':'bold','color':'red'},loc='center')
plt.title('456',fontdict={'family':'serif','size':18,'weight':'bold','color':'red'},loc='left')
plt.plot(x,y)
plt.show()
加入plt.rcParams["font.sans-serif"]=['SimHei']可以在坐标轴中显示中文标签

plt.xticks、plt.yticks设置坐标轴刻度。

labelpad可以指定标签与坐标轴的位置。

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-5,5,100)
y=np.sin(x)
plt.figure(figsize=(8,4))
plt.plot(x,y)
plt.xlim(-5,5)
plt.ylim(-2,2)
x_ticks=np.arange(-5,5,0.5)
y_ticks=np.arange(-2,2,0.5)
plt.xticks(x_ticks)
plt.yticks(y_ticks)
plt.xlabel('x',loc='right',labelpad=3)
plt.ylabel('y')
plt.show()

网格线

grid()的方法制作网格线,语法如下:

matplotlib.pyplot.grid(b=None, which='major', axis='both', )

b:可选参数,默认为None,可以设置布尔值,当为True时显示网格线。

which:可选参数,表示应用更改的网格线,可选值包括:major,minor,both。

axis:可选参数,表示哪个方向的网格线,默认为both,其余还有x或y(x轴方向或者y轴方向)。

**kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。

在图形当中加入网格线:

import matplotlib.pyplot as plt
import numpy as np
x=np.array(['A','B','C','D'])
y=np.array([12,34,21,10])
plt.grid()
plt.plot(x,y)
plt.show()

设置网格线的方向:

import matplotlib.pyplot as plt
import numpy as np
x=np.array(['A','B','C','D'])
y=np.array([12,34,21,10])
plt.figure(figsize=(6,4))
plt.grid(axis='x')
plt.plot(x,y)
plt.show()

网格线的格式grid(color = 'color', linestyle = 'linestyle', linewidth = number)

color:表示网格线的颜色。

linestyle:表示网格线的形式,'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。

linewidth:表示网格线的宽度,一个数字。

import matplotlib.pyplot as plt
import numpy as np
x=np.array(['A','B','C','D'])
y=np.array([12,34,21,10])
plt.figure(figsize=(6,4))
plt.grid(axis='x',color='red',linestyle='-',linewidth=0.1)
plt.plot(x,y)
plt.show()

图中放置文本

将文本内容s放置在坐标轴中(x,y)的位置,语法如下:

matplotlib.axes.Axes.text(x, y, s, fontdict=None, withdash=False, **kwargs)
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-5,5,100)
y=np.sin(x)
plt.figure(figsize=(8,4))
plt.plot(x,y)
plt.xlim(-5,5)
plt.ylim(-2,2)
x_ticks=np.arange(-5,5,0.5)
y_ticks=np.arange(-2,2,0.5)
plt.xticks(x_ticks)
plt.yticks(y_ticks)
plt.xlabel('x',loc='right',labelpad=3)
plt.ylabel('y')
plt.text(0.0,0.0,"value",fontsize=14,rotation=270)
plt.show()

text的旋转

坐标轴 text 具有关键字参数- rotation,用于指定图中的文本旋转角度。rotation 的角度为 0 到 360(度)之间。

图片保存

savefig()保存图片,语法如下:

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参数是一个包含文件名路径的字符串,或者是一个类似于python文件的对象。如果format参数设为None且frame参数是一个字符串,则输出格式将根据文件名的扩展名推导出来。使用savefig()函数将图片保存在指定目录下,在show()前插入,如果在show()后面会出现保存图片为空白现象。

import matplotlib.pyplot as plt
#设置图片大小
fig=plt.figure(figsize=(18,4),dpi=50)#figure图像图标,figsize大小,dpi表示清晰度。
x=range(2,26,2)
y=[15,12,23,13,16,19,31,22,23,30,10,19]
plt.plot(x,y)#绘图
#保存到本地
#plt.savefig('./img.svg')#png,svg等
plt.show()

绘制饼图

pie()创建饼图,语法如下:

matplotlib.pyplot.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, hold=None, data=None)

绘制饼图

import matplotlib.pyplot as plt
import numpy as np
x=np.array([10,20,40,33])
label=['one','two','three','four']
plt.figure(figsize=(4,4))
plt.pie(x,labels=label,counterclock=True)
plt.show()

counterclock可选参数,当其为Fasle时表示顺时针绘制,为True时表示逆时针。

explode参数控制饼图中的切片爆炸。它指定偏移每个楔形的半径的分数。

colors:饼图各个扇区的颜色,默认为False

autopct:饼图各个扇形显示百分比的格式。%d%%表示整数,%0.1一位小数,%0.1f%%两位小数百分比。

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

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

shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。当为True时显示阴影有三维立体效果。

radius::设置饼图的半径,默认为 1。

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

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

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

center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。

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

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

import matplotlib.pyplot as plt
import numpy as np
x=np.array([10,20,40,33])
label=['one','two','three','four']
plt.figure(figsize=(4,4))
plt.pie(x,labels=label,counterclock=True,explode=(0,0.3,0,0))
plt.show()

散点图

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=False, data=None, **kwargs)

x,y:相同长度的数组,就是我们绘制散点图所需要的数据点。

s:点的大小,默认值为20,也可以为数组,代表数据每个点的大小。

c:点的颜色,默认为蓝色,也可以时RED或REDA的二维数组。

marker:点的样式,默认为原点。

cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。。

norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths::标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

**kwargs::其他参数。

绘制一个简单的散点图:

import matplotlib.pyplot as plt
import numpy as np
x=np.array([12,11,34,56,33,22,43])
y=np.array([22,12,32,45,23,43,12])
plt.figure(figsize=(4,4))
plt.scatter(x,y)
plt.show()

改变点的大小和颜色:

import matplotlib.pyplot as plt
import numpy as np
x=np.array([12,11,34,56,33,22,43])
y=np.array([22,12,32,45,23,43,12])
plt.figure(figsize=(4,4))
color=np.array(['red','blue','orange','black','green','purple','cyan'])
size=np.array([20,30,50,40,60,100,600])
plt.scatter(x,y,c=color,s=size)
plt.show()

绘制两组散点图:

import matplotlib.pyplot as plt
import numpy as np
x=np.array([12,11,34,56,33,22,43])
y=np.array([22,12,32,45,23,43,12])
plt.figure(figsize=(4,4))
size=np.array([20,30,50,40,60,100,600])
plt.scatter(x,y,c='red',s=size)

x=np.array([12,11,34,56,33,22,43])
y=np.array([12,11,34,56,33,22,43])
plt.scatter(x,y,c='black')
plt.show()

柱形图

用bar()来画柱形图,语法如下:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

x:浮点型数组,用来表示x轴的数据。

height:浮点型数组,用来表述柱形图的高度。

width:浮点型数组,用来表述柱形图的宽度。

bottom:浮点型数组,底座的y坐标,默认为0.

align:柱形图与x坐标轴的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。

创建一个简单的柱形图

import matplotlib.pyplot as plt
import numpy as np
x=np.array(['A','B','C','D'])
y=np.array([12,34,21,10])
plt.bar(x,y)
plt.show()

若想要创建垂直柱形图,则使用barh(),语法同bar()

import matplotlib.pyplot as plt
import numpy as np
x=np.array(['A','B','C','D'])
y=np.array([12,34,21,10])
plt.barh(x,y)
plt.show()

自定柱形图的颜色,可以是单色也可以是多色。

import matplotlib.pyplot as plt
import numpy as np
x=np.array(['A','B','C','D'])
y=np.array([12,34,21,10])
colors=np.array(['red','orange','blue','green'])
plt.barh(x,y,color=colors)
plt.show()

设置柱形图的宽度。

import matplotlib.pyplot as plt
import numpy as np
x=np.array(['A','B','C','D'])
y=np.array([12,34,21,10])
colors=np.array(['red','orange','blue','green'])
plt.bar(x,y,color=colors,width=0.2)
plt.show()

注:bar() 使用width, barh() 使用height。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值