Matplotlib基础知识(一)
Matplotlib是一个Python语言的2D会图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像。
介绍
Matplotlib适用于各种环境,包括:
-Python脚本
-IPython shell
-jupyter notebook
-Web应用服务器
-用户图形界面工具包
使用Matplotlib,能够轻易的生成各种类型的图像,例如:直方图,波谱图,条形图,散点图等,并且可以轻松的实现定制。
Matplotlib的基本元素
Matplotlib中的基本元素图表包括的元素:
—x轴和y轴:水平和垂直的轴线
—x轴和y轴刻度:刻度表示坐标轴均分隔,包括最小刻度和最大刻度
—x轴和y轴刻度标签:表示特定坐标轴的值
—绘图区域:实际绘图的区域。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties #字体管理器
'''只含单一曲线的图'''
x = np.linspace(0, 10, 10)
# plot参数只有一个,x轴的坐标默认从0,1,2..开始
plt.plot(x) # 这个参数绘制出来的是一条直线
plt.plot(x, x**2) # 这两个参数绘制出来的是一个抛物线
plt.show()
'''包含多个曲线的图'''
# 1.可以使用多个plot函数(推荐),在一个图中绘制多个曲线
x = np.arange(0, 10, 1) # arange函数用于创建等差数组,arange返回一个array对象,第三个数代表的是步长
plt.plot(x, 2*x)
plt.plot(x, x/2)
plt.plot(x, x**2)
plt.show()
# 2.也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线
x = np.arange(0, 10, 1)
plt.plot(x, x**2, x, 5*x, x, x/3)
plt.show()
'''网格线'''
# 绘制正弦余弦 使用plt.grid(True)方法添加网格线
x = np.arange(-np.pi, np.pi, 0.01)
plt.plot(x, np.sin(x), x, np.cos(x))
plt.grid(True)
plt.show()
'''设置grid参数(参数与plot函数相同),使用plt面向对象的方法,创建多个子图显示不同网格线,lw代表linewidth,线的粗细,alpha表示线的明暗程度,color代表颜色'''
# 创建对象,图形就是所谓的对象 sub=子,在同一个窗口显示多个图形
plt.figure(figsize=(12, 9)) # 设置图标的大小
axes = plt.subplot(1, 3, 1) # 创建1行3列第一个对象
x = np.arange(-20, 20, 0.1)
axes.grid(color="r", linestyle="--", linewidth=2)
axes.plot(x, np.sin(x))
axes1 = plt.subplot(1, 3, 2) # 创建1行3列第二个对象
x1 = np.arange(-20, 20, 0.1)
axes1.grid(color="g", linestyle="-.", linewidth=2)
axes1.plot(x1, np.cos(x1))
axes2 = plt.subplot(1, 3, 3) # 创建1行3列第三个对象=subplot(133)
axes2.grid(color="b", linestyle="--", linewidth=2)
axes2.plot(x, np.sin(x))
plt.show()
'''坐标轴界限'''
# axis方法:如果axis方法没有任何参数,则返回当前坐标轴的上下限axis(xmin=,ymin=)
x = np.random.randn(10)
plt.axis([-5, 15, -5, 10]) # 设置x轴从-5到15,y轴从-5到10
plt.plot(x)
plt.show()
# plt.axis("xxx")"tight"、"off"、"equal"... 设置坐标轴类型,关闭坐标轴
x = np.linspace(-5, 5, 100)
plt.plot(x, np.tan(x))
plt.axis("off") # off关闭坐标轴,equal改变x轴和y轴的幅度
plt.show()
# 画圆
x = np.linspace(-5, 5, 100)
# plt.figure(figsize=(4, 4)) # 设置成圆与plt.axis("equal")效果一样
plt.plot(np.sin(x), np.cos(x))
plt.axis("equal")
plt.show()
# xlim方法和ylim方法 除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
y = np.arange(0, 10, 1)
plt.plot(y)
plt.xlim(-2, 12)
plt.ylim(2, 10)
plt.show()
# 坐标轴标签 xlabel方法和ylabel方法,plt.ylabel("y=x^2+5",rotation=60)旋转
x = np.arange(0, 10, 2)
y = x**2 + 5
plt.plot(x, y)
plt.ylabel("f(x)=x**2+5", fontsize=12, rotation=0, horizontalalignment="right") # rotation旋转
# plt.xlabel("x", fontsize=12)
# 设置图表中的汉字格式
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)
plt.xlabel('横坐标', fontproperties=font)
plt.show()
# 标题 title方法
x = np.linspace(-np.pi, np.pi, 100)
plt.plot(x, np.sin(x))
plt.title("f(x)=sin(x)", fontsize=12, loc="center")
plt.show()
'''图例 使用的是legend方法 两种传参方法:(1)【推荐使用】在plot函数中增加label参数;(2)在legend方法中传入字符串列表 '''
# 在plot函数中增加label参数
x = np.arange(0, 10, 1)
plt.plot(x, x, label="normal")
plt.plot(x, x**2, label="fast")
plt.plot(x, x/2, label="slow")
plt.legend()
plt.show()
# 在legend方法中传入字符串列表
x = np.arange(0, 10, 1)
plt.plot(x, x, x, 2*x, x, x/2)
plt.legend(["normal", "fast", "slow"]) # 添加图例 参数传递需要中括号
plt.show()
# label参数为"_xxx",则图例中不显示 plt.plot("x, x*1.5, label="_xxx")
x = np.arange(0, 10, 1)
plt.plot(x, x, label="normal")
plt.plot(x, x**2, label="_fast")
plt.plot(x, x/2, label="_slow")
plt.legend()
plt.show()
'''loc参数设置图例的显示位置 best=0, upper right=1, upper left=2, lower left=3, lower right=4, right=5, center left=6, center right=7, lower center=8, upper center=9, center=10'''
x = np.arange(0, 10, 1)
plt.plot(x, x, x, 2*x, x, x/2)
plt.legend(["normal", "fast", "slow"], loc="right")
plt.show()
# loc参数可以是2元素的元组,表示图例左下角的坐标 图例也可以超过图的界限loc=(-0.1,0.9)
x = np.arange(0, 10, 1)
plt.plot(x, x, x, 2*x, x, x/2)
plt.legend(["normal", "fast", "slow"], loc=(1, 1)) # loc=(0.5, 1)相对值,相对的图片宽高,1个图片的宽度单位
plt.show()
# ncol参数 col控制图例中有几列
x = np.arange(0, 10, 1)
plt.plot(x, x, x, 2*x, x, x/2)
plt.legend(["normal", "fast", "slow"], loc=0, ncol=1)
plt.show()
# 修改线条样式 linestyle、color、marker
x1 = np.random.randn(100)
x2 = np.random.randn(100)
x3 = np.random.randn(100)
plt.plot(x1.cumsum(), c="b", linestyle="--", marker="o") # cumsum求累加和
plt.plot(x2.cumsum(), c="y", linestyle="-.", marker=">") # marker设置图例的形状
plt.plot(x3.cumsum(), c="r", linestyle=":", marker="*")
plt.legend(["x1", "x2", "x3"])
plt.savefig("pic.jpg", dpi=500, facecolor="green")
plt.show()
'''保存图片 figure.savefig的选项 ---filename:“含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出 PDF,.png推断出PNG("png","pdf","svg","ps","eps"....) ---dpi:图像分辨率(每英寸点数),默认为100 ---facecolor:图像的背景色,默认为"W(白色)"'''
# plt.savefig("pic.jpg", dpi=500) # 保存图片时出现空白后应该在 plt.show() 之前调用 plt.savefig()