python之Matplotlib(2D绘图库)

  1. Matplotlib 是一个Python的 2D绘图库。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
  2. 通过学习Matplotlib,可让数据可视化,更直观的真实给用户。使数据更加客观、更具有说服力。 Matplotlib是Python的库,又是开发中常用的库。
  3. markdown模式切换 ----- 蓝色命令行模式下 大写M 退出markdown 大写Y 退出编辑模式 esc
  4. %matplotlib tk 此函数是在matplotlib的行外显示—为什么?
    讲解:一个matplotlib的一个小画板figure,matplotlib中所有图像都在figure对象中,一个图像只有一个figure对象。figure是matplotlib单独的小窗口。一个figure下可以画多个图像。

绘制基础

  • 在使用Matplotlib绘制图形时,其中有两个最为常用的场景。一个是画点,一个是画线
方法名说明
title()设置图表的名称
xlabel()设置x轴名称
ylabel()设置y轴名称
xticks(x,ticks,rotation)设置x轴的刻度,rotation旋转角度
yticks()设置y轴的刻度
plot()绘制线性图表
show()显示图表
legend()显示图例
text(x,y,text)显示每条数据的值 x,y值的位置
figure(name,figsize=(w,h),dpi=n)设置图片大小

头部引包

import numpy as np
import matplotlib.pyplot as plt
# %matplotlib tk

直线

plt.plot(x,y)

#将(0,1)点和(2,4)连起来
plt.plot([0,2],[1,4])
plt.savefig('img\直线.jpg')
plt.show()

直线

折线

plt.plot(x,y)

x=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(x,squares)
plt.savefig('img\折线.jpg')
plt.show()

在这里插入图片描述

设置标签文字和线条粗细

标题文字:plt.title(‘name’,fontsize,color)
线条粗细:linewidth
x轴文字:plt.xlabel(‘name’,fontsize,size,color)
y轴文字:plt.ylabel(‘name’,fontsize,size,color)

datas=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(datas,squares,linewidth=5) #设置线条宽度
#设置图标标题,并在坐标轴上添加标签
plt.title('Numbers',fontsize=24)
plt.xlabel('datas',fontsize=14)
plt.ylabel('squares',fontsize=14)
plt.savefig('img\设置标签文字和线条粗细.jpg')
plt.show()

解决标签、标题中的中文问题

解决中文问题:plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
解决符号问题:plt.rcParams[‘font.sans-serif’] = [‘SimSong’]

datas=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(datas,squares,linewidth=5) #设置线条宽度
#设置中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置图标标题,并在坐标轴上添加标签
plt.title('标题设置',fontsize=24)
plt.xlabel('x轴',fontsize=14)
plt.ylabel('y轴',fontsize=14)
plt.savefig('img\解决中文问题.jpg')
plt.show()

在这里插入图片描述

一元二次方程的曲线y=x^2

plt.rcParams['font.sans-serif'] = ['SimSong']
#200个点的x坐标
x=range(-100,100)
#生成y点的坐标
y=[i**2 for i in x ]
#绘制一元二次曲线
plt.plot(x,y)
#调用savefig将一元二次曲线保存为result.jpg
plt.savefig('img\一元二次.jpg') #如果直接写成 plt.savefig('cos') 会生成cos.png
plt.show()

在这里插入图片描述

正弦、余弦函数

x = np.arange(,,,)
y=np.sin(x)
y2=np.cos(x)
plt.plot(x,y)
plt.plot(x,y2)

plt.rcParams['font.sans-serif'] = ['SimSong']
###### 通过plot画一个线形图
# plt.plot([1,2,3][5,7,5])
x = np.arange(-3,3,0.1)
y=np.sin(x)
y2=np.cos(x)
# 将图像显示在figure画板上
plt.figure()
# 调用 xy
plt.plot(x,y)
plt.figure()
plt.plot(x,y2)

plt.savefig('img\正弦余弦函数.jpg')
plt.show()

在这里插入图片描述
在这里插入图片描述

x1=[1,2,3]
x2=[2,4,5]
y1=[2,3,4]
y2=[5,6,29]
# 解决乱码
plt.rcParams['font.sans-serif']=['SimHei']
plt.subplot(221)  # 等价于plt.subplot(2,2,1)  2行2列第1个
plt.plot(x1,y1,'r--')  # 里面三个参数
plt.title('x1y1',fontsize=15,color='blue')  # title设置标题
plt.xlabel('x轴',fontsize=10)  # 设置x轴名称 
plt.ylabel('y轴',fontsize=10)  # 设置y轴名称 
plt.savefig('img/x1y1.jpg',dpi=200)  # 将图形通过定制的像素保存到磁盘

plt.subplot(222)  # 2行2列第3个
plt.plot(x2,y2,'r--')
plt.title('x2y2',fontsize=15,color='b')  # b==blue  简称
plt.savefig('img\整合.jpg')
plt.show()

在这里插入图片描述

散点图

  • 使用scatter函数可以绘制随机点,该函数需要接收x坐标和y坐标的序列。
    plt.scatter(x,np.sin(x))
plt.rcParams['font.sans-serif']=['SimSong']
# 画散点图
x = np.linspace(0,100,1000) # 生成0-80的160个散点的图
plt.scatter(x,np.sin(x)) 

plt.savefig('img\散点图.jpg')
plt.show()

在这里插入图片描述

  • 画10种大小, 100种颜色的散点图
# 画10种大小, 100种颜色的散点图
np.random.seed(10)  # seed使得每次的随机值一定,每次执行不会变。
x=np.random.rand(100)
y=np.random.rand(100)
colors=np.random.rand(100)
size=np.random.rand(10)*1000
plt.scatter(x,y,c=colors,s=size,alpha=0.7)
plt.savefig('img\散点图2.jpg')
plt.show()

在这里插入图片描述

柱状图

  • 使用bar函数可以绘制柱状图。柱状图需要水平的x坐标值,以及每一个x坐标值对应的y坐标值,从而形成柱状的图。
  • bar函数的宽度并不是像素宽度。bar函数会根据二维坐标系的尺寸,以及x坐标值的多少,自动确定每一个柱的宽度,而width指定的宽度就是这个标准柱宽度的倍数。该参数值可以是浮点数,如0.5,表示柱的宽度是标准宽度的0.5倍。
# 绘制柱状图
x=[1997,1998,1999,2000]
x_labels=['1997年','1998年','1999年','2000年']
y=[1000,3000,4000,5000]
# plt.bar(x,y,width=1)
plt.bar(x,y,width=0.1)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.xticks(x,x_labels)  # 设置x轴的刻度,rotation旋转角度
plt.xlabel('年份')
plt.ylabel('销量')
plt.title('根据年份销量对比图')
plt.savefig('img\柱状图.jpg')
plt.show()

在这里插入图片描述

  • 使用bar和barh绘制柱状图
# 使用bar和barh绘制柱状图
plt.rcParams['font.sans-serif']=['SimSong'] #用来正常显示中文标签
np.random.seed(0) # 使每次运行时的随机数不变
x=np.arange(5)  # 范围为5
y=np.random.randint(-5,5,5)
print(x,y)
plt.subplot(1,2,1)   # 将画布分隔成一行两列 选中第一列
#在第一列中画图
v_bar=plt.bar(x,y)
#在第一列的画布中 0位置画一条蓝线
plt.axhline(0,color='blue',linewidth=2)

plt.subplot(1,2,2)  # 将画布分隔成一行两列 选中第二列
#barh将y和x轴对换 竖着方向为x轴
h_bar=plt.barh(x,y,color='red')
#在第二列的画布中0位置处画红色的线
plt.axvline(0,color='red',linewidth=2)

plt.savefig('img\柱状图2.jpg')
plt.show()

[0 1 2 3 4] [ 0 -5 -2 -2  2]

在这里插入图片描述

np.random.randint(low, high=None, size=None, dtype=‘l’)

产生离散均匀分布的整数

参数含义
low生成元素的最小值
high生成元素的值一定小于high值
size输出的大小,可以是整数也可以是元组
dtype生成元素的数据类型

注意:high不为None,生成元素的值在[low,high)区间中;如果high=None,生成的区间为[0,low)区间

np.arange()

函数返回一个有终点和起点的固定步长的排列,其中步长支持小数。

参数个数含义
一个参数参数值为终点,起点取默认值0,步长取默认值1。
两个参数第一个参数为起点,第二个参数为终点,步长取默认值1。
三个参数第一个参数为起点,第二个参数为终点,第三个参数为步长。
#三天中三部电影的票房变化
real_names=['千与千寻','玩具总动员4','黑衣人:全球追缉']

real_num1=[5453,7548,6543]
real_num2=[1840,4013,3421]
real_num3=[1080,1673,2342]

#生成x  第1天   第2天   第3天
x=np.arange(len(real_names))
x_label=['第{}天'.format(i+1) for i in range(len(real_names))]

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

#绘制柱状图
#设置柱的宽度
width=0.3
plt.bar(x,real_num1,color='g',width=width,label=real_names[0])
plt.bar([i+width for i in x],real_num2,color='b',width=width,label=real_names[1])
plt.bar([i+2*width for i in x],real_num3,color='r',width=width,label=real_names[2])

#修改x坐标
plt.xticks([i+width for i in x],x_label)
#添加图例
plt.legend()
#添加标题
plt.title('3天的票房数')
plt.savefig('img\柱状图3.jpg')
plt.show()

在这里插入图片描述

直方图

直方图与柱状图的分格类似,都是由若干个柱组成,但直方图和柱状图的含义却有很大的差异。直方图是用来观察分布状态的,而柱状图是用来看每一个X坐标对应的Y的值的。也就是说,直方图关注的是分布,并不关心具体的某个值,而柱状图关心的是具体的某个值。使用hist函数绘制直方图。

  • 使用randn函数生成1000个正太分布的随机数,使用hist函数绘制这1000个随机数的分布状态
plt.rcParams['font.sans-serif']=['SimSong']
#频次直方图,均匀分布
#正太分布
x=np.random.randn(1000)
#画正太分布图
# plt.hist(x)
plt.hist(x,bins=100) #装箱的操作,将10个柱装到一起及修改柱的宽度
plt.savefig('img\直方图.jpg')
plt.show()

在这里插入图片描述

hist(x,bins,normed,color)
参数值含义
x这个参数是指定每个bin(箱子)分布的数据,对应x轴
bins这个参数指定bin(箱子)的个数,也就是总共有几条条状图
normed这个参数指定密度,也就是每个条状图的占比例比,默认为1
color这个指定条状图的颜色
  • 使用normal函数生成1000个正太分布的随机数,使用hist函数绘制这100个随机数的分布状态。
plt.rcParams['font.sans-serif']=['SimSong']
#几个直方图画到一个画布中,第一个参数期望  第二个均值
x1=np.random.normal(0,0.8,1000)
x2=np.random.normal(-2,1,1000)
x3=np.random.normal(3,2,1000)
#参数分别是bins:装箱,alpha:透明度
kwargs=dict(bins=100,alpha=0.4)
plt.hist(x1,**kwargs)
plt.hist(x2,**kwargs)
plt.hist(x3,**kwargs)
plt.savefig('img\直方图2.jpg')
plt.show()

在这里插入图片描述

numpy.random.normal(loc=0.0, scale=1.0, size=None)
参数值含义
locfloat此概率分布的均值(对应着整个分布的中心centre)
scalefloat此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size输出的shape,默认为None,只输出一个值

三维图

使用pyplot包和Matplotlib绘制三维图。

#导入3D包
from mpl_toolkits.mplot3d import Axes3D
#创建X、Y、Z坐标
X=[1,1,2,2]
Y=[3,4,4,3]
Z=[1,100,1,1]
fig = plt.figure()
# 创建了一个Axes3D的子图放到figure画布里面
ax = Axes3D(fig)
ax.plot_trisurf(X, Y, Z)
plt.savefig('img\三维图.jpg')
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值