实训笔记20190802--Matplotlib

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43895902/article/details/98221794

什么是matplotlib

Matplotlib 是一个Python的 2D绘图库。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
通过学习Matplotlib,可让数据可视化,更直观的真实给用户。使数据更加客观、更具有说服力。 Matplotlib是Python的库,又是开发中常用的库。

以下全部函数导入以下包

import numpy as np
import matplotlib.pyplot as plt
%matplotlib tk
#此函数是在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) 设置图片大小

Figure:Figure:画板(图),matplotlib中的所有图像都位于figure中"一个图像只能有一个’figure’对象,Figure是matplotlib单独的小窗口,但是一个Figure对象下面又可以画多个图像

绘制折线

plt.plot([1,2,3],[1,4,3])
#plt.plot(datas,squares,linewidth=5) #设置线条宽度
plt.show()

在这里插入图片描述

  • 用于在jupyter里面的面板显示图表,matplotlib展示图片有两种方式:
    1. 在matplotlib自身的面板显示----不建议使用----默认值%matplotlib inline是写在matplotlib上面
    2. 希图标在patplotlib行外显示

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

Matplotlib有很多函数用于绘制各种图形,其中plot函数用于曲线,需要将200个点的x坐标和Y坐标分别以序列的形式传入plot函数,然后调用show函数显示绘制的图形。一元二次方程的曲线

#通过plot画一个线形图
x=np.arange(-3,3,0.1)
y=np.sin(x)
y2=np.cos(x)

plt.figure()#将图像呈现在Figure画板上
#调用x,y
plt.plot(x,y)
plt.figure()#在调用一个
plt.plot(x,y2)

plt.show()

使用plt函数绘制任何曲线的第一步都是生成若干个坐标点(x,y),理论上坐标点是越多越好。本例取0到10之间100个等差数作为x的坐标,然后将这100个x坐标值一起传入Numpy的sin和cos函数,就会得到100个y坐标值,最后就可以使用plot函数绘制正弦曲线和余弦曲线。
在这里插入图片描述
在这里插入图片描述

散点图

x1=[1,2,3]
y1=[2,3,4]
x2=[2,4,5]
y2=[5,6,29]

#处理乱码
plt.rcParams['font.sans-serif']=['Arial Unicode MS']

# 221是轴距,可以不加逗号
plt.subplot(3,3,1)
# r表示red,--表示无限个点
plt.plot(x1,y1,'r--')
plt.title('标题1',fontsize=20)
plt.xlabel('x轴',fontsize=10)
plt.ylabel('y轴',fontsize=10)

plt.subplot(333)
plt.plot(x2,y2,'r--')
plt.title('title2',fontsize=20)
plt.savefig('img/result.jpg',dpi=200)#将图形以定制的像素保存到磁盘,默认png
plt.show()

在这里插入图片描述

画图不需要背属性,通过API查即可
在机器学习中,对机器来说颜色是通过三原色(红绿蓝)的255数值来识别

使用scatter函数可以绘制随机点,该函数需要接收x坐标和y坐标的序列。

x=np.linspace(0,10,100)#生成0到10中100个等差数
plt.scatter(x,np.sin(x))#散点图
plt.show()

在这里插入图片描述

# 画10种大小, 100种颜色的散点图
np.random.seed(0)#使得随机数据可预测。
x=np.random.rand(100)
y=np.random.rand(100)
colors=np.random.rand(100)#产生100的颜色
size=np.random.rand(10)*1000#产生很多点
plt.scatter(x,y,c=colors,s=size,alpha=0.7)
plt.show()

在这里插入图片描述

作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值。 可以使用以下格式化字符。

字符 描述
‘-’ 实线样式
‘–’ 短横线样式
‘-.’ 点划线样式
‘:’ 虚线样式
‘.’ 点标记
‘,’ 像素标记
‘o’ 圆标记
‘v’ 倒三角标记
‘^’ 正三角标记
‘1’ 下箭头标记
‘2’ 上箭头标记
‘3’ 左箭头标记
‘4’ 右箭头标记
‘s’ 正方形标记
‘p’ 五边形标记
‘*’ 星形标记
‘h’ 六边形标记 1
‘H’ 六边形标记 2
‘+’ 加号标记
‘x’ X 标记
‘D’ 菱形标记
‘d’ 窄菱形标记
‘_’ 水平线标记

以下是颜色的缩写:

字符 颜色
‘b’ 蓝色
‘g’ 绿色
‘r’ 红色
‘c’ 青色
‘m’ 品红色
‘y’ 黄色
‘k’ 黑色
‘w’ 白色
#不同种类不同颜色的线
x=np.linspace(0,10,100)
plt.plot(x,x+0,'-g')    #实线  绿色
plt.plot(x,x+1,'--c')   #虚线 浅蓝色
plt.plot(x,x+2,'-.k')   #点划线 黑色
plt.plot(x,x+3,'-r')    #实线  红色
plt.plot(x,x+4,'o')     #点   默认是蓝色
plt.plot(x,x+5,'x')     #叉叉  默认是蓝色
plt.plot(x,x+6,'d')    #砖石  红色

【示例】不同种类不同颜色的线并添加图例
#不同种类不同颜色的线并添加图例
x=np.linspace(0,10,100)
plt.plot(x,x+0,'-g',label='-g')    #实线  绿色
plt.plot(x,x+1,'--c',label='--c')   #虚线 浅蓝色
plt.plot(x,x+2,'-.k',label='-.k')   #点划线 黑色
plt.plot(x,x+3,'-r',label='-r')    #实线  红色
plt.plot(x,x+4,'o',label='o')     #点   默认是蓝色
plt.plot(x,x+5,'x',label='x')     #叉叉  默认是蓝色
plt.plot(x,x+6,'dr',label='dr')    #砖石  红色
#添加图例右下角lower right  左上角upper left 边框  透明度  阴影  边框宽度
plt.legend(loc='lower right',fancybox=True,framealpha=1,shadow=True,borderpad=1)
plt.show()

在这里插入图片描述

柱状图

使用bar函数可以绘制柱状图。柱状图需要水平的x坐标值,以及每一个x坐标值对应的y坐标值,从而形成柱状的图。柱状图主要用来纵向对比和横向对比的。例如,根据年份对销售收据进行纵向对比,x坐标值就表示年份,y坐标值表示销售数据。

plt.rcParams['font.sans-serif']=['Arial Unicode MS']
x=[1980,1985,1990,1995]
x_labels=['1980年','1985年','1990年','1995年']
y=[1000,3000,4000,5000]
plt.bar(x,y,width=3)
plt.xticks(x,x_labels)#补充x轴坐标内容
plt.xlabel('年份')
plt.ylabel('销量')
plt.title('根据年份销量对比图')
plt.show()

在这里插入图片描述

需要注意的是bar函数的宽度并不是像素宽度。bar函数会根据二维坐标系的尺寸,以及x坐标值的多少,自动确定每一个柱的宽度,而width指定的宽度就是这个标准柱宽度的倍数。该参数值可以是浮点数,如0.5,表示柱的宽度是标准宽度的0.5倍。

mport matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
print(x,y)i
# 将画布分隔成一行两列
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.show()

在这里插入图片描述

#三天中三部电影的票房变化
plt.rcParams['font.sans-serif']=['Arial Unicode MS']
real_name=['千与千寻','玩具总动员','黑衣人']

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

#生成x上的元素个数
x=np.arange(len(real_names))
#编辑x轴名称
x_label=['第{}天'.format(i+1)for i in range(len(real_name))]

width=0.1
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.show()

在这里插入图片描述

饼状图

pie函数可以绘制饼状图,饼图主要是用来呈现比例的。只要传入比例数据即可

plt.rcParams['font.sans-serif']=['Arial Unicode MS']
#准备男、女的人数及比例
man=71351
woman=68187
man_perc=man/(woman+man)
woman_perc=woman/(woman+man)
#添加名称
labels=['男','女']
#添加颜色
colors=['blue','red']
#绘制饼状图  pie
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
# labels 名称 colors:颜色,explode=分裂  autopct显示百分比
paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%')

#设置饼状图中的字体颜色
for text in autotexts:
    text.set_color('white')

#设置字体大小
for text in texts+autotexts:
    text.set_fontsize(20)
plt.show()

在这里插入图片描述

直方图

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

【示例】使用randn函数生成1000个正太分布的随机数,使用hist函数绘制这1000个随机数的分布状态

x=np.random.randn(1000)
#plt.hist(x)
#装箱操作
plt.hist(x,bins=100)

plt.show()

在这里插入图片描述
hist(x,bins,normed,color)

参数值 含义
x 这个参数是指定每个bin(箱子)分布的数据,对应x轴
bins 这个参数指定bin(箱子)的个数,也就是总共有几条条状图
normed 这个参数指定密度,也就是每个条状图的占比例比,默认为1
color 这个指定条状图的颜色

【示例】使用normal函数生成1000个正太分布的随机数,使用hist函数绘制这100个随机数的分布状态

#使用normal函数生成1000个正太分布的随机数,使用hist函数绘制这100个随机数的分布状态
plt.rcParams['font.sans-serif']=['Arial Unicode MS']
#几个直方图画到一个画布中,第一个参数期望  第二个均值
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.show()

在这里插入图片描述

三维图

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

from mpl_toolkits.mplot3d import Axes3D
#创建坐标
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.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43895902/article/details/98221794