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

如何基于Q、Z数组绘制对应Y值的X轴方向水平线

解决方案

实现思路

  • 提取Z数组中所有值为1的元素的索引位置
  • 将这些索引按顺序两两分组,每组对应Q数组中的一个Y值
  • 针对每组索引,绘制从左索引到右索引的水平线,Y值取对应Q的元素

代码示例(Python + Matplotlib)

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
Q = [2, 5, 3]  # Y轴数据,数量需等于Z中1的数量的一半
Z = [0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1]  # X轴数据,仅含0和1

# 获取Z中所有值为1的索引
ones_indices = np.where(np.array(Z) == 1)[0]

# 检查索引数量是否为偶数,确保能两两配对
if len(ones_indices) % 2 != 0:
    print("警告:Z中1的数量为奇数,最后一个1无法配对,将忽略")
    ones_indices = ones_indices[:-1]

# 确保Q的长度和配对组数一致
if len(Q) != len(ones_indices) // 2:
    raise ValueError(f"Q的长度需为{len(ones_indices)//2},当前为{len(Q)}")

# 创建绘图对象
plt.figure(figsize=(10, 6))

# 遍历每一对索引,绘制水平线
for i in range(0, len(ones_indices), 2):
    x_start = ones_indices[i]
    x_end = ones_indices[i+1]
    y_val = Q[i//2]
    # 绘制水平线,参数为x范围、y值、样式可自定义
    plt.hlines(y=y_val, xmin=x_start, xmax=x_end, color='blue', linewidth=2)

# 设置坐标轴标签
plt.xlabel("Z数组索引")
plt.ylabel("Q数组值")
plt.title("1之间的水平线绘图")
plt.grid(True)
plt.show()

代码说明

  • np.where(np.array(Z) == 1)[0]:快速提取Z中所有1的索引位置
  • 奇偶检查:避免因Z中1的数量为奇数导致的配对错误
  • plt.hlines():Matplotlib中专门用于绘制水平线的函数,指定Y值、X起始和结束位置即可
  • 可自定义样式:比如修改color、linewidth、linestyle来调整线条外观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:56:13