使用Python库Matplotlib绘图
- 一、Matplotlib绘图参数设置
- 1.1 设置分辨率和画布大小
- 1.2 保存图片并设置边缘留白为紧凑型
- 1.3 设置坐标轴标签
- 1.4 画直线设置线宽和颜色
- 1.5 画子图
- 1.5.1 通过figure的add_subplot()画子图
- 1.5.2 通过plt的subplots画子图
- 二、使用Matplotlib中scatter()方法画散点图
- 2.1 散点图添加图例和点标签
- 2.2 结合sklearn中make_blobs()方法绘制二分类数据
- 三、箱线图
- 四、双数轴折线图
一、Matplotlib绘图参数设置
1.1 设置分辨率和画布大小
# 分辨率参数-dpi,画布大小参数-figsize
plt.figure(dpi=300,figsize=(24,8))
1.2 保存图片并设置边缘留白为紧凑型
plt.savefig("accuracy.svg", bbox_inches="tight")
1.3 设置坐标轴标签
plt.xlabel("tree_num")
plt.ylabel("accuracy")
1.4 画直线设置线宽和颜色
plt.plot(accuracy, color="b", linewidth="1.6")
1.5 画子图
1.5.1 通过figure的add_subplot()画子图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure()
# 画第1个图:折线图
x=np.arange(1,100)
ax1=fig.add_subplot(221)
ax1.plot(x,x*x)
# 画第2个图:散点图
ax2=fig.add_subplot(222)
ax2.scatter(np.arange(0,10), np.random.rand(10))
# 画第3个图:饼图
ax3=fig.add_subplot(223)
ax3.pie(x=[15,30,45,10],labels=list('ABCD'),autopct='%.0f',explode=[0,0.05,0,0])
# 画第4个图:条形图
ax4=fig.add_subplot(224)
ax4.bar([20,10,30,25,15],[25,15,35,30,20],color='b')
plt.show()
1.5.2 通过plt的subplots画子图
fig, ax = plt.subplots(2, 2,figsize=(10,8))
# 画第1个图:折线图
x = np.arange(1, 100)
ax[0][0].plot(x, x * x)
# 画第2个图:散点图
ax[0][1].scatter(np.arange(0, 10), np.random.rand(10))
# 画第3个图:饼图
ax[1][0].pie(x=[15, 30, 45, 10], labels=list('ABCD'), autopct='%.0f', explode=[0, 0.05, 0, 0])
# 画第4个图:条形图
ax[1][1].bar([20, 10, 30, 25, 15], [25, 15, 35, 30, 20], color='b')
plt.show()
二、使用Matplotlib中scatter()方法画散点图
scatter()方法关键参数:
matplotlib.pyplot.scatter(
x, # 散点的坐标
y,
s=None, # 散点的面积
c=None, # 散点的颜色
marker=None, # 散点样式,默认值为实心圆,'o'
cmap=None,
norm=None,
vmin=None,
vmax=None,
alpha=None, # 散点透明度,[0, 1]之间的数,0表示完全透明,1则表示完全不透明
linewidths=None, # 散点的边缘线宽
verts=None,
edgecolors=None, # 散点的边缘颜色
hold=None,
data=None,
**kwargs,
)
2.1 散点图添加图例和点标签
src_in_graph, tgt_in_graph = self.get_valid_source_and_target_list(source_list, target_list)
Xs, Ys = [], []
Xt, Yt = [], []
for s,t in zip(src_in_graph, tgt_in_graph):
sx, sy = self.node_dict[s].coord
tx, ty = self.node_dict[t].coord
Xs.append(sx)
Ys.append(sy)
Xt.append(tx)
Yt.append(ty)
plt.scatter(Xs, Ys, c='r', label='source')
for i in range(len(src_in_graph)):
plt.text(Xs[i], Ys[i], src_in_graph[i])
plt.scatter(Xt, Yt, c='b', label='target')
for i in range(len(src_in_graph)):
plt.text(Xt[i], Yt[i], src_in_graph[i])
plt.legend()
plt.savefig('src-tgt coord.svg', bbox_inches="tight")
2.2 结合sklearn中make_blobs()方法绘制二分类数据
import matplotlib.pyplot as plt
from sklearn import datasets
X, y = datasets.make_blobs(
n_samples=150, n_features=2, centers=2, cluster_std=2.05, random_state=47
)
y = np.where(y == 0, 0, 1) # 将标签转换为0和1
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
三、箱线图
箱线图(Box plot),也称为盒须图,是一种用于显示数据分布的统计图表。它通过显示数据的五个统计量(最小值、第一四分位数、中位数、第三四分位数和最大值)来概括数据的分布情况。箱线图在以下情况下特别有用:
- 显示数据分布情况:箱线图提供了对数据分布的直观概览,包括数据的集中趋势、分散程度和对称性。
- 识别异常值:箱线图通过“须”的长度和离群点(异常值)显示数据中的异常值或极端值。
- 比较不同组的数据:箱线图可以并排显示多个数据集,方便比较不同组的分布情况。
箱线图应用场景:
- 探索性数据分析(EDA):在数据分析的初始阶段,使用箱线图可以帮助快速了解数据的基本特征。
- 比较多个数据集:当需要比较多个数据集的分布情况时,箱线图非常有用。例如,比较不同实验组或不同时间段的数据。
- 检测数据异常值:箱线图可以帮助识别数据中的异常值,进而决定是否需要处理这些异常值。
- 可视化报告:在报告和展示数据时,箱线图提供了一个简洁、直观的方式来展示数据的分布情况。
在画箱型图过程中,如图像未显示,是因为数据中存在空值。