matplotlib快速入门

matplotlib是什么???

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。

什么情况下会用到matplotlib?

matplotlib主要还是配合进行数据分析,将数据分析的结果用图表的形式显示出来,使用matplotlib主要是它使用起来很方便,而且它的代码规则看起来就自然
matplotlib主要是配合pandas,numpy进行使用

怎么使用matplotlib

使用matplotlib需要导包
我们一般导包是这样的

import matplotlib.pyplot as plt

这种方式是我们最常见的,一般都给他取别名plt

-----------------------------------------------------

至此,matplotlib就可以使用了
首先来绘制一个简单的图形

from matplotlib import pyplot as plt
import numpy as np
x = np.arange(-50,51)
y = x ** 2
plt.plot(x,y)

上述代码的意思就是生成一个区间为[-50,50]的数组作为x轴的数据
然后y轴对应的数据为x的平方,代码看起来十分自然
最后指明绘制的函数是plt.plot()
需要注意的是并不是所有绘制图形的函数都是plot,plot这个函数只是用来绘制一个连续的图的
上述的代码的执行结果如下:
在这里插入图片描述
注意:这段代码是在jupyter notebook中的执行,在pycharm等IDE中要看到图形的输出需要加上一句plt.show()

我们注意到上面的结果绘制的图形我们并没有说x轴的刻度是多少,y的刻度是多少,我们通过上述的代码绘制的图形都是python帮我们选定的刻度。我们当然也可以自己设置轴的刻度,使用xticks()方法来设置刻度,适用于x轴或者y轴数据过多影响显示的情况,同时可以使用rotation这个属性来设置字体的倾斜效果(用这个就是因为很多时候我们直接平铺的显示可能装不下,所以设置一个倾斜的效果,设置倾斜看起来也会更加的美观)。

很多时候我们想指定x轴代表的是什么,比如说x轴是年纪,y轴是人数等等,我们一般手动绘制图形的时候喜欢把它写出来更有助于我们理解这个图形,在python中也能实现这个功能。使用xlabel()和ylabel()这两个方法来设置x轴和y轴的名称,同时还可以使用title()方法可以设置图表的标题。

怎么解决title设置中文的问题

当我们使用title()来给图表设置一个中文名称的时候会出现中文乱码的问题
解决方法
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]使用这个函数来将字符集设置为中文黑体,还有其他的字体可供选择,当将字符集设置为中文之后符号是默认无法显示的,这时使用plt.rcParams[‘axes.unicode_minus’] = False这个方法即可解决这个问题

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

也就是上述这段代码,注意噢,这段代码需要写在前面,写在你用中文的时候的前面。

在使用plot()或者其他的绘图的函数的时候,我们有时候一个画板上面会绘制多个图形,我们可能需要指明每一条图形是什么,这个时候就需要传入一个label标签了,传递了label标签还需要配合legend()使用
看起来比较抽象,直接看一个现成的代码吧
在这里插入图片描述
我们使用legend()标题是默认会给我们选择一个最佳的位置来显示,但是也可以设置。可以设置的位置如下
在这里插入图片描述

如何显示每一个点

很多时候我们可能想要把每一个点显示出来,这个时候就需要使用text()方法了
直接看样例
在这里插入图片描述
给每个坐标点的位置设置它的值,zip()方法就是将两个数组压缩为一个元组

我们建立的画板的坐标轴如何绘制一个直角坐标系呢?

上述我们绘制的图像看起来总是很别扭?why?因为我们平常画的时候都是用的直角坐标系,那么它默认生成的又不是直角坐标系,怎么办呢??
使用gca()方法来移动坐标轴
在这里插入图片描述
思路就是首先获取坐标轴,然后选择坐标轴设置坐标轴的位置。
position位置参数有三种,data,outward,axes。
axes:0.0~1.0之间的值,表示的是整个轴上面的比例
使用xlim()或者ylim()来设置坐标的区间

如何创建画布对象

在Matpoltlib中,面向对象编程的核心思想是创建图形对象,通过图形对象来调用其他的方法和属性,这样有助于我们更好地处理多个画布,在这这个过程中,pylot负责生成图形对象,并通过该对象来添加一个或多个axes对象。
创建图形对象

plt.figure(
    num=None,   # 图像编号或名称,数字为编号,字符串为名称
    figsize=None, # 指定figure的宽和高,单位为英寸
    dpi=None,   # 指定绘图对象的分辨率
    facecolor=None, # 背景颜色
    edgecolor=True, # 边框颜色
    frameon=True,  # 是否显示边框
)

figure是绘制对象(可以理解为一个空白的画布),一个figure对象可以包含多个axes子图,一个axes是一个绘图区域,不加设置时,axes为1,且每次绘图其实都是在figure上的axes上绘图

add_axes(rect)
该方法用来生成一个axes轴域对象,对象的位置由参数rect决定
rect是位置参数,接收一个由4个元素组成的浮点数列表,形如[leftb bottom, width, height],它表示添加到画布中的矩形区域的左下角坐标(x,y)以及宽度和高度

举例

fig = plt.figure(figsize=(4,2),facecolor='g')

# ax1从画布起始位置绘制。宽高和画布一致
ax1 = fig.add_axes([0,0,1,1])

# ax2从画布20%的位置开始绘制,宽高是画布的50%
ax2 = fig.add_axes([0.2,0.2,0.5,0.5])

显示的效果
在这里插入图片描述
如果一个画布很大,像把他分成好几块来用,how to do???
subplot()函数,等分画布
ax = plt.subplot(nrows,ncols,index,*args,**kwargs)
nrows——行
ncols——列
index——索引
可以直接指明划分为几行几列,然后画布的编号是按照顺时针方向从1开始进行编号,返回的是一个画布的对象,接收到相应的画布即可进行作画了。还可以使用subplot(233)(表示将画布划分为两行三列,返回编号为3的画布)类似这种的写法

plot()这个函数如果只传递一个参数的话那么默认的就是传递的是y轴的的数据,这个时候x轴的数据就是从0~len(y轴的数据)-1

举个栗子

plt.subplot(211,title="pic1",xlabel="x axis")
plt.plot(range(50,70))

plt.subplot(212,title="pic2",xlabel="x axis")
plt.plot(np.arange(12)**2)

在这里插入图片描述
当对两张画布设置内容的时候难免出现这种重叠的现象,为了避免这个可以使用tight_layout()的方法
在这里插入图片描述
subplots()方法
subplots()的使用和subplot()方法的使用类似。不同之处在于subplots()既创建了一个子图区域的画布又创建了一个figure图形对象,而subplot()只是创建了一个包含子图区域的画布
fig,ax = plt.subplots(nrows,ncols)
返回的ax是所有的区域,要想取出具体的区域可以使用类似二维数组取数的方法来取出具体的区域

柱状图的绘制

函数
bar(x,height,width:float=0.8,bottom=None,*,align:str=‘center’,data=None)
x——表示x的坐标
height——柱状图的高度
width——柱状图的宽度,取值0~1,默认为0.8
bottom——柱状图的起始位置
align——柱状图的中心位置

x = range(5)
data = [5,20,15,25,10]
plt.title("基本柱状图")
plt.grid()
plt.bar(x,data)

在这里插入图片描述
同位置多柱状图

countries = ['挪威','德国','中国','美国','英国']
glod_medal = [16,12,9,8,8]
silver_medal = [8,10,4,10,5]
bronze_medal = [13,5,2,7,5]

x = np.arange(len(countries))
# 宽度
width = 0.2
# 金牌的起始位置
glod_x = x
# 银牌的起始位置
silver_x = x + width
# 铜牌的起始位置
bronze_x = x + 2 * width

plt.bar(glod_x,glod_medal,width=width)
plt.bar(silver_x,silver_medal,width=width)
plt.bar(bronze_x,bronze_medal,width=width)

在这里插入图片描述

水平条状图

barh()函数的用法与bar()函数的用法基本一致,只是在调用barh()函数的时候使用y参数传入Y轴数据,使用width参数传入代表条住宽度的数据。

其他图形

直方图——hist()
饼状图——pie()
散点图——scatter()

均不一一展开,使用方法都类似

保存绘制的图形

保存图片——savefig()
savefig(fname,dpi=None,facecolor='w',edgecolor='w',orientation='portrait',papertype=None,format=None...)

最重要的属性就是fname——如果格式已经设置,这将决定输出的格式并将文件按fname来保存。如果格式没有设置,在fname有扩展名的情况下推断按此保存,没有扩展名将按照默认格式存储为png格式并将适当的扩展名添加在fname后面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leoliyao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值