You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib上下放置RGB与HSV时序对比图?

问题分析与解决方案

我来帮你梳理下代码里的问题,然后给出能实现需求的正确写法~

错误原因拆解

你的代码主要有这几个问题导致异常和显示问题:

  1. 混用全局plt方法与子图轴对象:你用plt.subplots创建了ax1和ax2两个子图,但后续还是用plt.plot、plt.title这些全局方法,这些操作会默认作用在当前活跃的子图(一般是最后创建的ax2),而不是你想指定的ax1,导致绘图混乱。
  2. ax.plot参数使用错误:ax1.plot(blue, red, green)这种写法不符合matplotlib的规则——plot的参数是x, y, 格式字符串,你把三个颜色通道的列表一起传,会被误解析,自然会报错。
  3. 缺少画布显示步骤:你最后没有调用plt.show()来渲染整个画布,而旧方法里自带plt.show(),所以只有旧方法能出图。
  4. 标题/标签设置错误:全局的plt.title只会给当前活跃子图加标题,无法分别给两个子图设置专属标题。

正确实现方式

我建议你修改原来的plotcolors方法,让它支持传入指定的子图轴,这样既能复用代码,又能轻松实现多图同画布的需求:

第一步:修改复用的绘图方法

def plotcolors(self, colors, title, ax=None):
    # 如果没传入轴对象,就用当前默认轴(兼容原来的单独绘图需求)
    ax = ax or plt.gca()
    
    # 提取颜色通道数据(如果是HSV,建议把变量名改成hue/saturation/value更清晰)
    channel1 = [item[0] for item in colors]
    channel2 = [item[1] for item in colors]
    channel3 = [item[2] for item in colors]
    
    # 在指定轴上绘制各通道时序
    ax.plot(channel1, color='blue', label='Channel 1')
    ax.plot(channel2, color='red', label='Channel 2')
    ax.plot(channel3, color='green', label='Channel 3')
    
    # 设置子图的标题和坐标轴标签
    ax.set_title(title)
    ax.set_xlabel("Number of Frame")
    ax.set_ylabel("Color Value")
    ax.legend()  # 添加图例,方便区分各通道

第二步:调用方法绘制对比图

# 创建2行1列的子图,共享x轴,统一画布大小
fig, (ax_rgb, ax_hsv) = plt.subplots(2, 1, sharex=True, figsize=(10, 8))
# 设置整个画布的大标题
fig.suptitle('RGB vs HSV Frame Color Timeseries', fontsize=14)

# 分别在两个子图上绘制RGB和HSV的时序图
self.plotcolors(aver_diff, "Average RGB Colors (Holo ROI)", ax=ax_rgb)
self.plotcolors(aver_diff_ref, "Average HSV Colors (Holo ROI)", ax=ax_hsv)

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
# 显示整个画布
plt.show()

额外优化建议

如果是HSV数据,建议把颜色通道的变量名和绘图颜色改成更贴合的,比如:

# 在plotcolors方法里针对HSV做调整
hue = [item[0] for item in colors]
saturation = [item[1] for item in colors]
value = [item[2] for item in colors]

ax.plot(hue, color='orange', label='Hue')
ax.plot(saturation, color='purple', label='Saturation')
ax.plot(value, color='black', label='Value')

这样图表会更直观,别人看代码也能立刻明白各通道的含义。

内容的提问来源于stack exchange,提问作者KVG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:04:09