文章目录
一、安装Matplotlib
Matplotlib是一个综合库,用于在Python中创建静态,动画和交互式可视化。
# 安装matplotlib
pip install matplotlib
# 导入
import matplotlib.pyplot as plt
# 在当前页面中显示图片%matplotlib inline
Matplotlib 的默认配置都允许用户自定义。你可以调整大多数的默认配置:图片大小和分辨率(dpi)、线宽、颜色、风格、坐标轴、坐标轴以及网格的属性、文字与字体属性等。不过,matplotlib 的默认配置在大多数情况下已经做得足够好,你可能只在很少的情况下才会想更改这些默认配置。
二、基本绘图流程
1.创建画布与创建子图
第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省 略第一部分,而后直接在默认的画布上进行图形绘制。
函数名称 | 函数作用 |
---|---|
plt.figure | 创建一个空白画布,可以指定画布大小,像素。 |
figure.add_subplot | 创建并选中子图,可以指定子图的行数,列数,与选中图片编号。 |
import numpy as np
import matplotlib.pyplot as plt
# 创建画布
figure = plt.figure()
# 设置图表大小
plt.rcParams['figure.figsize'] = (8,6)
# 创建子图
plt.subplot()
# 绘制第1张子图:折线图
ax1 = plt.subplot(221)
plt.plot([1,2,3],[2,4,6])
# 绘制第2张子图:柱状图
ax2 = plt.subplot(222)plt.bar([1,2,3],[2,4,6])
# 绘制第3张子图:散点图
ax3 = plt.subplot(223)
plt.scatter([1,3,5],[2,4,6])
# 绘制第4张子图:直方图
ax4 = plt.subplot(224)
plt.hist([2,2,2,3,4])
# 创建子图
fig, axes = plt.subplots(nrows=2,ncols=2,figsize=(10,8))
ax1,ax2,ax3,ax4 = axes.flatten()
# nrows表示行数,ncols表示列数,可以简写为plt.subplots(2,2),figsize参数设置图表尺寸为1000×800像素。
ax1.plot([1,2,3],[2,4,6]) # 绘制第一张子图
ax2.bar([1,2,3],[2,4,6]) # 绘制第二张子图
ax3.scatter([1,3,5],[2,4,6]) # 绘制第三张子图
ax4.hist([2,2,2,3,4]) # 绘制第四张子图
2.基本绘图
1).绘制线条
# 绘制简单直线
import numpy as np
import matplotlib.pyplot as plt
# 绘制简单直线
x = np.array([1, 2, 3, 4, 5])y = np.array([3, 6, 9, 12, 15])
# 绘制水平线、垂线
plt.axhline(y=6, ls=":", c="blue") # 添加水平直线
plt.axvline(x=4, ls=" ", c="red") # 添加垂直直线
# 绘制多段垂线
plt.vlines([2, 3, 3.5], # 垂线的x坐标值
[10, 20, 30], # 每条垂线起始y坐标[25, 35, 45]) # 每条垂线结束y坐标
plt.figure()
plt.plot(x, y)
plt.savefig('./test2.jpg') # 保存图片
plt.show() # 显示图片,阻塞方法
2).设置线型、线宽
linestyle: 设置线型,常见取值有实线(‘-’)、虚线(‘–’)、点虚线(‘-.’)、点线(‘:’)
linewidth:线宽
color:颜色(red, blue, green)
alpha: 设置透明度(0~1之间)
格式化字符
字符 | 描述 |
---|---|
’ - ’ | 实线样式 |
’ - - ’ | 短横线样式 |
‘-.’ | 点划线样式 |
‘:’ | 虚线样式 |
‘.’ | 点标记 |
‘,’ | 像素标记 |
‘o’ | 圆标记 |
‘v’ | 倒三角标记 |
‘^’ | 正三角标记 |
‘<’ | 左三角标记 |
‘>’ | 右三角标记 |
‘1’ | 下箭头标记 |
‘2’ | 上箭头标记 |
‘3’ | 左箭头标记 |
‘4’ | 右箭头标记 |
‘s’ | 正方形标记 |
‘p’ | 五边形标记 |
‘*’ | 星形标记 |
‘h’ | 六边形标记 1 |
‘H’ | 六边形标记 2 |
‘+’ | 加号标记 |
‘x’ | X 标记 |
‘D’ | 菱形标记 |
‘d’ | 窄菱形标记 |
颜色的缩写
字符 | 颜色 |
---|---|
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青色 |
‘m’ | 品红色 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
示例:绘制正弦、余弦曲线,并设置线型、线宽、颜色、透明度
# 绘制正弦曲线
import numpy as np
import matplotlib.pyplot as pltimport math
x = np.arange(0, 2 * np.pi, 0.1) # 以0.1为单位,生成0~6的数据print(x)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制图形
plt.plot(x, y1, label="sin", linewidth=2) # 实线,线宽2像素
plt.plot(x, y2, label="cos", linestyle=" ", linewidth=4) # 虚线,线宽4像素
plt.xlabel("x") # x轴文字
plt.ylabel("y") # y轴文字
# 设置坐标轴范围
plt.xlim(0, 2 * math.pi)plt.ylim( 1, 2)
plt.title("sin & cos") # 图标题
plt.legend() # 图例plt.show()
3).设置坐标轴范围
#x limt min: <float> x轴范围最小值
#x limit max: <float> x轴范围最大值
plt.xlim(x limt min, x limit max)
#y limt min: <float> y轴范围最小值
#y limit max: <float> y轴范围最大值
plt.ylim(y limt min, y limit max)
4).设置坐标刻度
#x val list: x轴刻度值序列
#x text list: x轴刻度标签文本序列 [可选]
plt.xticks(x val list , x text list)
#y val list: y轴刻度值序列
#y text list: y轴刻度标签文本序列 [可选]
plt.yticks(y val list , y text list)
绘制二次函数曲线
# 绘制二次函数曲线
import numpy as np
import matplotlib.pyplot as plt
import math
x = np.arange(-5, 5, 0.1) # 以0.1为单位,生成 5~5的数据
print(x)
y = x ** 2
# 绘制图形
plt.plot(x, y, label="$y = x ^ 2$",
linewidth=2, # 线宽2像素
color="red", # 颜色
alpha=0.5) # 透明度
plt.xlabel("x") # x轴文字
plt.ylabel("y") # y轴文字
# 设置坐标轴范围
plt.xlim(-10, 10)
plt.ylim(-1, 30)
# 设置刻度
x_tck = np.arange(-10, 10, 2)
x_txt = x_tck.astype("U")
plt.xticks(x_tck, x_txt)
y_tck = np.arange(-1, 30, 5)
y_txt = y_tck.astype("U")
plt.yticks(y_tck, y_txt)
plt.title("square") # 图标题
plt.legend(loc="upper right") # 图例 upper right, center
plt.show()
5).设置坐标轴
# 获取当前坐标轴字典,{'left':左轴,'right':右轴,'bottom':下轴,'top':上轴 }
ax = plt.gca()
# 获取其中某个坐标轴
axis = ax.spines['坐标轴名']
# 设置坐标轴的位置。 该方法需要传入2个元素的元组作为参数
# type: <str> 移动坐标轴的参照类型 一般为'data' (以数据的值作为移动参照值)
# val: 参照值
axis.set position(('data', val))
# 设置坐标轴的颜色
# color: <str> 颜色值字符串
axis.set color(color)
# 设置坐标轴格式
import matplotlib.pyplot as plt
ax = plt.gca()
axis b = ax.spines['bottom'] # 获取下轴
axis b.set position(('data', 0)) # 设置下轴位置, 以数据作为参照值
axis l = ax.spines['left'] # 获取左轴
axis l.set position(('data', 0)) # 设置左轴位置, 以数据作为参照值
ax.spines['top'].set color('none') # 设置顶部轴无色ax.spines['right'].set color('none') # 设置右部轴无色
plt.show()
6)备注
# 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。
plt.annotate(
r'$\frac{\pi}{2}$',#备注中显示的文本内容
xycoords='data',#备注目标点所使用的坐标系(data表示数据坐标系)
xy=(x, y),#备注目标点的坐标
textcoords='offset points', #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
xytext=(x, y),#备注文本的坐标
fontsize=14,#备注文本的字体大小
arrowprops=dict()#使用字典定义文本指向目标点的箭头样式
)
三、高级绘图
1)plt对象支持的图类型
2)散点图
散点图(scatter diagram)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。
绘制散点图的相关API:
plt.scatter(
x,# x轴坐标数组
y,# y轴坐标数组
marker='',# 点型
s=10,# 大小
color='',# 颜色
edgecolor='',# 边缘颜色
facecolor='',# 填充色
zorder=''# 图层序号
)
案例:绘制平面散点图。
# 散点图示例
import matplotlib.pyplot as plt
import numpy as np
n = 40
# 期望值:期望值是该变量输出值的平均数
# 标准差:是反映一组数据离散程度最常用的一种量化形式,是表示精确度的重要指标
x = np.random.normal(172, 20 ,n ) # 期望值, 标准差, 生成数量
y = np.random.normal(60, 10, n) # 期望值, 标准差, 生成数量
x2 = np.random.normal(180, 20 ,n ) # 期望值, 标准差, 生成数量
y2 = np.random.normal(70, 10, n) # 期望值, 标准差, 生成数量
plt.figure("scatter", facecolor="lightgray")
plt.title("Scatter Demo")
plt.scatter(x, y, c="red", marker="D")
plt.scatter(x2, y2, c="blue", marker="v")
plt.xlim(100, 240)
plt.ylim(0, 100)
plt.show()