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

如何实现Matplotlib eventplot相邻整数事件无空白且适配窗口缩放?

实现整数位置的双色事件图(相邻无空白/非相邻等宽间隔)

原eventplot无法精准控制事件块的贴合与间隔,且窗口缩放后会错位,改用矩形块绘制是更合适的方案,能完美满足:相邻整数事件无空白、非相邻间隔与事件宽度一致、整数范围可变的需求。

核心思路

  • 每个整数位置对应一个宽度为1的矩形块,相邻块自然贴合,非相邻的间隔等于整数差(即空白宽度与事件块宽度一致)
  • 有事件的位置根据类别设为红/绿色,无事件的位置设为白色
  • 用matplotlib.patches.Rectangle绘制每个块,确保缩放时元素比例保持一致

完整代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Rectangle

matplotlib.rcParams['font.size'] = 8.0

# 事件数据:两行分别对应绿色、红色事件的整数位置
data1 = np.array([[19, 2, 3, 4, 6, 34, 23, 60, 49, 36], 
                  [52, 50, 33, 96, 56, 95, 0, 63, 90, 15]])
# 颜色映射:第一行绿色,第二行红色
color_map = ["green", "red"]
# 事件块的高度(可根据需求调整)
block_height = 1

# 确定所有事件的整数范围,包含最小和最大整数
all_events = np.concatenate(data1)
min_x = all_events.min()
max_x = all_events.max()

fig, ax = plt.subplots()

# 遍历每个整数位置,绘制对应颜色的矩形块
for x in range(min_x, max_x + 1):
    # 检查当前x属于哪一行事件,或无事件
    color = "white"
    for idx, row in enumerate(data1):
        if x in row:
            color = color_map[idx]
            break
    # 绘制矩形:左下角坐标(x, 0),宽度1,高度block_height
    rect = Rectangle((x, 0), 1, block_height, color=color, ec="black")  # ec是边框颜色,可选
    ax.add_patch(rect)

# 调整坐标轴范围,让所有块完整显示
ax.set_xlim(min_x - 0.5, max_x + 0.5)
ax.set_ylim(0, block_height)
# 隐藏y轴(如果不需要)
ax.set_yticks([])
plt.xlabel("整数位置")
plt.title("双色整数事件图")

plt.show()

关键细节说明

  • 矩形块宽度固定为1,确保相邻整数位置的块完全贴合,非相邻的间隔(如x=4到x=6)自动为1,和事件块宽度一致
  • 遍历所有整数位置,通过检查是否在事件列表中分配对应颜色,无事件则为白色
  • 使用add_patch添加矩形,缩放时矩形会保持宽高比例,不会出现错位问题
  • 可通过调整block_height改变事件块的高度,ec参数控制边框颜色(不需要可去掉)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:05:57