Matplotlib 图表重叠 绘图重叠 plt.subplot() plt.clf() plt.close() 使用例子

在使用Matplotlib的过程中,如果需要在同一张图中绘制多个图表,可能会出现图表重叠的情况。要解决这个问题,可以使用以下两种方法:

1.使用subplot()函数创建子图

使用subplot()函数可以将画布分割成多个子图,并在不同的子图中绘制不同的图表。可以通过subplot()函数指定子图的行数、列数和当前子图的序号,进而在不同的子图中绘制不同的图表。

例如,下面的代码创建了一个2行2列的子图,分别在第1个和第2个子图中绘制两幅图表,从而消除了图表重叠的问题。

import matplotlib.pyplot as plt

# 创建子图1
plt.subplot(2,2,1)
plt.plot([1,2,3],[4,5,6])

# 创建子图2
plt.subplot(2,2,2)
plt.plot([1,2,3],[6,5,4])

plt.show()

2.使用clf()函数清除画布

如果只需要在同一张图中绘制一个或者少数几个图表,可以先使用clf()函数清除画布,进而在新的画布上绘制图表。

clf()函数用于清空当前画布,将画布置为空白状态。使用clf()函数可以删除先前画出的所有图形,并且可以避免图形重叠的情况。

例如,下面的代码绘制了两幅图表,其中第一幅使用黄色的折线,第二幅使用绿色的直线。在绘制第二幅图表之前,先使用clf()函数清除画布。

import matplotlib.pyplot as plt

# 绘制第一幅图表
plt.plot([1,2,3],[4,5,6],'y-')

# 清除画布
plt.clf()

# 绘制第二幅图表
plt.plot([1,2,3],[6,5,4],'g--')

plt.show()

另外可以使用plt.close()
plt.close()函数用于关闭当前打开的图形窗口。当我们使用Matplotlib创建图形时,会自动打开一个图形窗口来显示我们所创建的图形。如果我们在绘制完图形后不需要再次查看或使用该图形,则可以使用plt.close()函数来关闭它,从而释放内存和资源。

例如,以下代码在绘制后关闭当前图形窗口:

import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [4, 5, 6]

plt.plot(x, y)
plt.show()  # 显示图形窗口

plt.close()  # 关闭图形窗口

需要注意的是,如果同时打开了多个图形窗口,则需要使用不同的参数来指定关闭不同的窗口。例如,如果要关闭窗口编号为1的图形,则可以使用plt.close(1)来关闭它。

import matplotlib.pyplot as plt

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

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

plt.figure(1)  # 打开图形1
plt.plot(x1, y1)
plt.show()

plt.figure(2)  # 打开图形2
plt.plot(x2, y2)
plt.show()

plt.close(1)  # 关闭图形1

这样就可以关闭指定的窗口了。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这段代码看起来已经比较简洁了,但还是有一些可以优化的地方。以下是几点建议: 1. 将模块导入部分整理到一起,按照惯例的顺序导入。 2. 删除不需要的模块导入,比如`metrics`模块没有被使用到。 3. 在绘制混淆矩阵时,可以设置标题和颜色条,以提高可读性。 4. 使用`plt.subplots()`替代`plt.subplot()`以获得更好的子图布局和大小控制。 5. 在绘制数字和预测结果的子图时,可以添加轴标签,使图像更具可读性。 下面是优化后的代码: ```python from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_digits from sklearn import svm from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt from sklearn.metrics import plot_confusion_matrix import numpy as np # 使绘图支持中文字符 from matplotlib import rcParams rcParams['font.family'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False # 加载手写数字数据集 digits = load_digits() data = digits.data print(data[0]) print(digits.images[0]) print(digits.target[0]) plt.imshow(digits.images[0]) plt.show() # 划分训练集和测试集 train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.3, random_state=82) print(train_x) # 使用支持向量机进行训练和预测 clf = svm.SVC(kernel='linear') clf.fit(train_x, train_y) print("svm训练集得分: %.4lf" % clf.score(train_x, train_y)) print("svm测试集得分: %.4lf" % clf.score(test_x, test_y)) print(clf.predict(data)) plot_confusion_matrix(clf, test_x, test_y, display_labels=digits.target_names) plt.title("混淆矩阵") plt.colorbar(label="样本数量") plt.show() # 绘制数字和预测结果的子图 fig, axes = plt.subplots(8, 5, figsize=(6, 13)) for i, ax in enumerate(axes.flat): y_pred = clf.predict([data[i]]) ax.imshow(digits.images[i], interpolation='none') ax.set_title("%d---->%d" % (digits.target[i], y_pred)) ax.axis('off') plt.tight_layout() plt.show() ``` 希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UCAS_V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值