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
相关产品推荐
相关产品推荐

