如何将异常值作为单独的彩色标记添加到折线图中

Posted

技术标签:

【中文标题】如何将异常值作为单独的彩色标记添加到折线图中【英文标题】:How to add outliers as separate colored markers to a line plot 【发布时间】:2021-12-29 19:04:08 【问题描述】:
val             time
5.6     2021-11-18 03:00:00
2.034   2021-11-18 05:00:00
1.171   2021-11-18 07:00:00
3.023   2021-11-18 09:00:00
4.202   2021-11-18 16:00:00
1.202   2021-11-18 17:00:00
5.202   2021-11-18 18:00:00
7.202   2021-11-18 19:00:00
2.202   2021-11-18 20:00:00
12.202  2021-11-18 21:00:00
1.202   2021-11-18 21:00:00

上面是我的数据框,我想绘制它(x=time,y=value),并将值绘制为红色,其中(val>5)。

plt.plot(ab['time'], ab['value'], '-gD', markevery=marks, label='line with select markers')

其中标记[7.202,12.202] 是我手动创建的列表。但这不起作用。 error -: markevery is iterable but not a valid numpy fancy index

Line plot with different markers if condition is true python 3我在这里找到了一个,但是如果积分很多,这很耗时

【问题讨论】:

【参考方案1】: 最简单的解决方案是使用Boolean indexing 为大于5 的值创建一个单独的数据框,然后使用pandas.DataFrame.plot 将它们绘制为散点图 x 轴自动格式化为%M-%d %H。当有更多数据时,格式会发生变化,还有其他答案讨论如何格式化 pandas 日期时间轴。
import pandas as pd
import matplotlib.pyplot as plt

# sample data
data = 'val': [5.6, 2.034, 1.171, 3.023, 4.202, 1.202, 5.202, 7.202, 2.202, 12.202, 1.202], 'time': ['2021-11-18 03:00:00', '2021-11-18 05:00:00', '2021-11-18 07:00:00', '2021-11-18 09:00:00', '2021-11-18 16:00:00', '2021-11-18 17:00:00', '2021-11-18 18:00:00', '2021-11-18 19:00:00', '2021-11-18 20:00:00', '2021-11-18 21:00:00', '2021-11-18 21:00:00']
df = pd.DataFrame(data)

# convert the time column to a datetime dtype
df.time = pd.to_datetime(df.time)

# get the values greater than 5
masked = df[df.val.gt(5)]

# plot the line plot
ax = df.plot(x='time', marker='o', figsize=(15, 5), zorder=0)

# plot those greater than 5
masked.plot(kind='scatter', x='time', y='val', color='red', ax=ax, s=30, label='outliers')

【讨论】:

以上是关于如何将异常值作为单独的彩色标记添加到折线图中的主要内容,如果未能解决你的问题,请参考以下文章

如何在柱状图中添加折线图

EXCEL的折线图中如何让X轴从0开始

如何在c3js中设置样式折线图点

如何使用 plotly express 向折线图添加点或标记?

如何使excel折线图中横坐标的刻度值不均匀并标注

如何使用 Chart.js 向我的折线图添加点击事件