Matplotlib是Python中的一个库,它是数字的-NumPy库的数学扩展。Matplotlib中的所有内容都按层次结构组织,层次结构的顶部是由matplotlib提供的matplotlb“状态机环境”——pyplot模块。层次结构的下一层是面向对象界面的第一层,其中pyplot仅用于图形创建等少数功能,用户显式创建并跟踪图形和轴对象。在此级别,使用pyplot创建图形,通过这些图形可以创建一个或多个轴对象,使用基础函数将绘图元素(线条、图像、文本等)添加到当前图形中的当前轴
# 导入matplotlib库中的pyplot
import matplotlib.pyplot as plt
# 解决中文乱码,可自行修改期望字体
plt.rcParams['font.sans-serif']='SimHei'
# 解决负号无法显示的问题
plt.rcParams['axes.unicode_minus']=False
# 将图表以矢量图格式显示,提高清晰度
%config InlineBackend.figure_format = 'svg'
显示所有图片,多次使用显示多个图
jupyter notebook中,不使用show()函数也可以正常运行,会显示图片的格式和图片;使用show()函数会只显示图片
可以认为大部分matplotlib函数都是在“暂存”的图片上进行处理,show()函数会把“暂存”的图片显示出去,然后就没有“暂存”图片了,故大部分操作应在show函数之前完成
用于画图,可以绘制点和折线线
参数:
(1)*args:允许传入多对x和y和一个可选的"格式控制字符串"
(2)x(可选):X轴数据,(元组),[列表],numpy.array,pandas.Series,缺省为range(len(y))
(3)y:Y轴数据,(元组),[列表],numpy.array,pandas.Series
x,y可以为pd.DataFrame?
(4)**kwargs:允许传入多个可选的关键字参数
import matplotlib.pyplot as plt
#一个图片里绘制一个图像
a1=[3,4,5] # [列表]
a2=[2,3,2] # x,y元素个数N应相同
plt.plot(a1,a2)
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#一个图片里绘制两个图像
x=(3,4,5) # (元组)
y1=np.array([3,4,3]) # np.array
y2=pd.Series([4,5,4]) # pd.Series
plt.plot(x,y1)
plt.plot(y2) # x可省略,默认[0,1..,N-1]递增,N是y内的元素数
plt.show() # plt.show()前可加多个plt.plot(),画在同一张图上
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#一个图片里绘制两个图像
plt.plot(x,y1,x,y2) # 此时x不可省略
plt.show()
import numpy as np
import matplotlib.pyplot as plt
#二维数组
b1=np.array([[0,1,2],
[3,4,5],
[6,7,8]])
b2=np.array([[2,3,5],
[8,3,1],
[4,5,9]])
#b1的第一列为[0,3,6],b2的第一列为[2,8,4],从而构成三个点一段折线,以此类推
plt.plot(b1,b2)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
#格式控制字符串
b1=np.array([[0,1,2],
[3,4,5],
[6,7,8]])
b2=np.array([[1,3,4],
[7,1,8],
[9,7,6]])
plt.plot(b1,b2,"ob:") #"b"为蓝色, "o"为圆点, ":"为点线
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#颜色与线型
color=['b','g','r','c','m','y','k','w']
#cyan:青;red:红;green:绿;blue:蓝;
#white:白;black-k:黑;yellow:黄;magenta:洋红
linestyle=['-','--','-.',':']
#“:”:点线;“-.”:点画线;“--”:短划线;“-”:实线;""," ":无线条
##格式控制字符串
dic1=[[0,1,2],[3,4,5]]
x=pd.DataFrame(dic1)
dic2=[[2,3,2],[3,4,3],[4,5,4],[5,6,5]]
y=pd.DataFrame(dic2)
# 循环输出所有"颜色"与"线型"
for i in range(2):
for j in range(4):
plt.plot(x.loc[i],y.loc[j],color[i*4+j]+linestyle[j])
plt.show()
#如果只控制"颜色", 格式控制字符串还可以输入英文全称, 如"red"
#也可以是十六进制RGB字符串, 如"#FF0000"
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#点型
marker=['.',',','o','v','^','<','>','1','2','3','4',
's','p','*','h','H','+','x','D','d','|','_','.',',']
dic1=[[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17]]
x=pd.DataFrame(dic1)
dic2=[[2,3,2.5],[3,4,3.5],[4,5,4.5],[5,6,5.5]]
y=pd.DataFrame(dic2)
# 循环输出所有"点型"
for i in range(6):
for j in range(4):
plt.plot(x.loc[i],y.loc[j],"b"+marker[i*4+j]+":") # "b"蓝色,":"点线
plt.show()
import matplotlib.pyplot as plt
#关键字=参数
y=[2,3,2]
plt.plot(y,color="blue",linewidth=20,marker="o",markersize=50,
markerfacecolor="red",markeredgewidth=6,markeredgecolor="grey")
#颜色:蓝色;线宽:20;点:圆点;点尺寸:50;
#点填充色:红色;点边缘宽度:6;点边缘色:灰色
plt.show()
创建一个图像,实例化Figure对象,是所有绘图元素的顶层容器,相当于给图提供了一个画布
参数:
(1)num:图像编号或名称,数字为编号 ,字符串为名称,缺省为从1开始的数字
(2)figsize:元组,指定figure的宽和高,单位为英寸,缺省为(6.4,4.8)
(3)dpi:指定绘图对象的分辨率,即每英寸多少个像素,缺省值为72(似乎会随版本不同变化)
1英寸等于2.5cm,A4纸是 21x30cm的纸张
(4)facecolor:背景颜色,缺省为’w’
(5)edgecolor:边框颜色,缺省为’w’
(6)linewidth:边缘的线宽
(7)frameon:是否显示边框
figure函数的图像有“颜色”参数,后面如savefig函数也有“颜色参数”,但存储图片时只按照savefig函数的颜色参数,缺省为默认黑白
#创建一个长为10,宽为6的画布
import matplotlib.pyplot as plt
fig=plt.figure(num='pic2-1.png',figsize = (10,6),dpi=90,facecolor = 'r',edgecolor = 'y')
#没有子图的空图形
先隐式的创建一个画布,然后再在画布上添加一个子图(如果需要多个子图,应反复调用,也可用for循环),该子图是通过均分画布得到的
子图:一个Axes对象,矩形区域,这个矩形是基于figure坐标系统定义的。
返回值:一个Axes对象,按照子图索引,按以行主顺序递增。
使用subplot() 方法创建子图将删除任何与其重叠的预先存在的子图,而不是共享边界。
参数:
(1)*args(位置参数):三个整数或一个三位数(自动解析成三个整数),用于分别对应 nrows,ncols,index
(2)nrows:在画布纵轴上分隔成几个子图,缺省为1
(3)ncols:在画布横轴上分隔成几个子图,缺省为1
(4)index:子图索引,从左往右,从上到下排列的第几个图像,缺省为1
(5)**kwargs:一些涉及子图属性的关键字参数。此方法还接受返回AXIS基类的关键字参数
举例:
plt.subplot(nrows=2, ncols=3, index=5)
=plt.subplot(2, 3, 5)
=plt.subplot(235)
import numpy as np
import matplotlib.pyplot as plt
# 设置数据
x = np.arange(0, 3, 0.1)
y1 = np.sin(np.pi*x)
y2 = np.cos(np.pi*x)
#创建图像
plt.figure(num='pic2-1.png',figsize = (10,6), dpi=90,facecolor = 'lightgrey', edgecolor = 'azure',linewidth=10)
# 绘制第一个子图
ax1=plt.subplot(211)
plt.plot(x, y1)
# 绘制第二个子图
ax2=plt.subplot(212)
plt.plot(x, y2)
#绘制
plt.show()
创建一张画布和一组子图
返回值:一个figure和axes对象的元组
参数:
(1)nrows:在画布纵轴上分隔成几个子图,缺省为1
(2)ncols:在画布横轴上分隔成几个子图,缺省为1
(3)sharex / sharey:是否共x或y轴,缺省为False
(4)squeeze:在返回多个子图时,axes是否要压缩为1维数组,缺省为True
(5)subplot_kw:创建subplot的关键字字典
(6)**fig_kw:创建figure时的其他关键字
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
# 创建图形,并创建一个子图
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
参数:
(1)rect(位置参数):一个4元素的浮点数列表,[left, bottom, width, height]
其定义了要添加到figure中的矩形子区域的:左下角坐标(x, y)、宽度、高度
每个元素的值是实际长度与figure对应长度的分数比值,不大于1;即将figure的宽、高作为1个单位
(2)projection(可选)(关键词参数):坐标系的投影类型,缺省为None,表示笛卡尔直角坐标投影
- str 是自定义投影的名称。
- 不仅可以使用系统已设计好的投影,还可以自定义一个投影变换并使用,注册并调用自定义的投影名称即可。str即自定义投影的名称。
(3)polar(可选)(关键词参数):布尔值,表示是否启用’polar‘的投影类型,缺省为False
(4)sharex, sharey(可选)(关键词参数):是否共x或y轴,同上
以上未完待更新,仅供个人学习,侵权联系删除,如有错误或不足之处可指出,以便改进。