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

如何在Matplotlib中按蓝色线段起止条件设置X轴标签与刻度?

自定义X轴刻度:仅显示蓝色线段的起止位置

没问题,我来帮你修改代码,实现只在蓝色线段的起止位置添加自定义刻度的需求。核心思路是先找出所有蓝色点(data >= 1)的连续区间的起止索引,再把这些索引作为X轴刻度位置,同时计算对应的刻度值(x / 266.6667)。

步骤分解:

  • 第一步:标记蓝色点的位置,找出连续蓝色段的边界
  • 第二步:收集所有蓝色段的起止索引,作为刻度位置
  • 第三步:设置X轴的刻度位置和对应的自定义标签

完整代码实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 替换成你的原始数据vec
# vec = [你的原始数据]
# 这里模拟一个包含4段蓝色的示例数据,方便测试
vec = np.concatenate([np.random.rand(1500), np.random.uniform(1, 3, 500), 
                      np.random.rand(800), np.random.uniform(1, 3, 600),
                      np.random.rand(400), np.random.uniform(1, 3, 700),
                      np.random.rand(600), np.random.uniform(1, 3, 500)])

data = np.array(vec)
df = pd.DataFrame({'data': data}).reset_index()
df['colors'] = np.where(data < 1, 'red', 'blue')

# 标记每个点是否为蓝色
is_blue = df['colors'] == 'blue'
# 找出颜色发生变化的位置(红变蓝/蓝变红),+1是因为diff会把变化位置前移一位
color_changes = np.where(np.diff(is_blue.astype(int)) != 0)[0] + 1

# 处理首尾特殊情况:如果第一个点就是蓝色,要把0加入刻度;如果最后一个点是蓝色,要把最后一个索引加入
if is_blue.iloc[0]:
    color_changes = np.insert(color_changes, 0, 0)
if is_blue.iloc[-1]:
    color_changes = np.append(color_changes, len(df)-1)

# 收集所有蓝色段的起止索引(共8个刻度点)
tick_positions = color_changes
# 计算对应的刻度标签,保留两位小数方便阅读
tick_labels = [round(pos / 266.6667, 2) for pos in tick_positions]

# 绘制散点图
plt.scatter(df['index'], df['data'], c=df['colors'])
# 设置X轴刻度:指定位置和对应标签,旋转45度避免标签重叠
plt.xticks(ticks=tick_positions, labels=tick_labels, rotation=45)
# 可选:添加X轴说明标签
plt.xlabel("Custom X Tick (x / 266.6667)")

plt.show()

代码说明:

  • is_blue:用布尔值标记每个点的颜色,方便后续定位连续蓝色段
  • color_changes:通过np.diff捕捉颜色切换的位置,这些位置就是蓝色段的开始或结束边界
  • 首尾判断:防止漏掉第一个点就是蓝色、或最后一个点是蓝色的情况,确保所有蓝色段的起止都被纳入刻度
  • plt.xticks():手动指定刻度的位置和显示的标签,rotation=45是为了避免标签挤在一起,你可以根据图表大小调整这个值

这样修改后,X轴就会精准显示4段蓝色线段对应的8个刻度(每段的开始和结束各一个),刻度值完全符合你需要的x / 266.6667格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:22:37