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

Matplotlib循环绘图仅显示单个标记:如何为多条曲线的极值点绘制全部对应标记

解决Matplotlib只显示单个极值标记的问题

嘿,我一眼就瞅出问题在哪啦!你创建的mrkr_df是个4行1列的DataFrame,len(mrkr_df.columns)返回的是1——这直接导致你的循环只跑了一次,当然只会画出一个标记啦。

咱们直接修正这个逻辑,绕开没必要的mrkr_df,直接遍历每条曲线的极值数据和对应标记就行。下面是修改后的完整代码:

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

df0 = pd.DataFrame(np.random.randint(0,1000,size=(18, 4)), columns=list('ABCD'))
# df0 = pd.read_excel("est.xlsx")
ax = df0.plot()  # 先拿到绘图轴对象,确保标记画在同一张图上

mylist = list(df0)
mrkr = ['o', '.', 'v', 'x']

idx_mx_vals = []
for col in mylist:
    if df0[col][0] > 0:
        idx_mx_vals.append(df0[col].idxmax())
    else:
        idx_mx_vals.append(df0[col].idxmin())

mx_vals = []
for col in mylist:
    if df0[col][0] > 0:
        mx_vals.append(df0[col].max())
    else:
        mx_vals.append(df0[col].min())

# 遍历每个曲线的极值坐标和对应标记
for idx, (x_pos, y_val, marker_style) in enumerate(zip(idx_mx_vals, mx_vals, mrkr)):
    # 同步对应曲线的颜色,让标记和曲线一目了然
    ax.plot(x_pos, y_val, marker=marker_style, markersize=20, color=ax.lines[idx].get_color())

plt.show()

我还顺手做了几个小优化:

  • 用ax = df0.plot()获取轴对象,避免标记画到新图里
  • 遍历列名替代索引,代码更易读
  • 给标记匹配对应曲线的颜色,方便直观对应

这样修改后,4条曲线的极值标记就都会正常显示在图上啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:57:38