当前位置: 首页 > 知识库问答 >
问题:

用Python在同一绘图上绘制四条曲线,其中一条x轴和两条不同的y轴

慕宏峻
2023-03-14

通过使用matplotlib,我想绘制随时间变化的训练精度、验证精度、训练误差和验证误差。x轴是所有曲线的迭代次数。我想为精度值保留左x轴,为损耗值保留右y轴,然后在同一个图上绘制所有四个。

为了做到这一点,我尝试了几件事,最后我没有达到我想要的程度。

有人能帮我吗?

我的代码(没有按我的要求工作):

fig = plt.figure()
ax = fig.add_subplot(111, label="1")
ax.plot(e_t_x, e_t_y, label="ERROR TRAIN", color='r')
ax.set_ylabel("Error", color="r")

ax1 = fig.add_subplot(111, label="2", frame_on=False)
ax1.plot(e_v_x, e_v_y, label="ERROR VALIDATION", color='g')
empty_string_labels = [''] * len(e_v_y)
ax1.set_xticklabels(empty_string_labels)

ax2 = fig.add_subplot(111, label="3", frame_on=False)
ax2.plot(a_t_x, a_t_y, label="ACC TRAIN", color='b')
ax2.set_ylabel("Acc", color="b")
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position('right')

ax3 = fig.add_subplot(111, label="4", frame_on=False)
ax3.plot(a_v_x, a_v_y, label="ACC VALIDATION", color='c')
plt.legend()
plt.show() 

我想这样做(但我没有3条曲线,而是4条曲线)(我从这里拍摄图像:https://datascience.stackexchange.com/questions/53857/why-could-an-overfitted-cnn-model-have-a-higher-validation-accuracy)

共有1个答案

洪宇定
2023-03-14

您只需要两个轴。ax2必须是ax1的双轴。可以在每个轴上绘制任意数量的打印。请参见以下代码,其中正弦和cos绘制在左侧y轴上,而立方和二次曲线绘制在右侧y轴上:

import numpy as np
from matplotlib import pyplot as plt
import math

fig = plt.figure(figsize=(12,5))
fig.suptitle("title")
ax1 = fig.add_subplot()
ax2 = ax1.twinx()

x = np.linspace(0,10,100)
sinx = [math.sin(angle) for angle in x]
cosx = [math.cos(angle) for angle in x]
ax1.plot(x,sinx, label = 'sin')
ax1.plot(x,cosx, label = 'cos')

quadratic = [num**2 for num in x]
cubic = [num**3 for num in x]
ax2.plot(x,quadratic, color='green', label = 'quadratic')
ax2.plot(x,cubic, color='red', label = 'cubic')

ax1.set_ylabel("sin, cos")
ax2.set_ylabel("quadratic, cubic")

ax1.legend(loc = 'upper left')
ax2.legend(loc = 'upper right')

plt.show()
 类似资料:
  • 我有一个固定点,我想画一条线,穿过这个固定点,并且与x轴成45度角,即斜率1。 如何使用matplotlib执行此操作?

  • 本文向大家介绍matplotlib 同一图中的多条线/曲线,包括了matplotlib 同一图中的多条线/曲线的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我正在尝试使用swing制作一个rpg(是的,这是愚蠢的,我同意,但我这样做是为了学习,而不是实际的工作产品)。目前我正在研究每个角色的统计。 我有一个JPanel,我想画一条线。 左侧是一个JPanel,它有两个组件:表1和JLabel。右侧也是JPanel,它有自己的元素,但那是另一回事了。 我的问题是,我想创建一个只有一个图像的jpanel,该图像将是两行,与表中选定的元素相关。 但不幸的是

  • 主要内容:示例可以使用类的方法在图像上绘制一条线。以下是此方法的语法。 该方法接受以下参数 - mat - 表示要在其上绘制线条的图像的Mat对象。 pt1和pt2 - 表示要绘制线条的点的两个点对象。 scalar - 表示圆的颜色的标量对象(BGR)。 thickness - 表示线条粗细的整数; 默认情况下,厚度值为。 示例 以下程序演示如何在图像上绘制线条并使用JavaFX窗口显示。 在执行上述程序时,

  • 我想创建一个包含三条线(男性、女性、未知)的折线图。这是我的数据示例: 是否有一个选项,在图中自动创建三行或我需要循环通过数据和创建三个跟踪自己?到目前为止,这是我的代码:

  • 我有以下代码应该在图像中绘制线条。我的代码是: 如果我编写,它实际上可以工作。但是我的数组很长并且来自一个输入。