繁体   English   中英

如何在 Plotly Express 中从 X 轴中排除特定日期

[英]How to Exclude specific dates from X-axis in Plotly Express

我有一个简单的 dataframe 包含日期和一些标题。 我需要从 plot 中删除特定日期。

fig1 = px.line(df, x=Date, y="Header1")
fig1.show()

我想从图表本身(而不是数据框)中删除值,例如(删除 15/01/2022 和 22/02/2022)。

日期与值 plot 在此处输入图像描述

我很可能宁愿使用用于构建您的图形的数据集而不是图形本身来执行此操作。 但是这个建议应该完全符合您的要求。 如何找到异常值将完全取决于您。 给定一些阈值toolow, tohigh下面的代码片段会将Plot 1变成Plot 2

fig.for_each_trace(lambda t: highOutliers.extend([t.x[i] for i, val in enumerate(t.y) if val > toohigh]))
fig.for_each_trace(lambda t: lowOutliers.extend([t.x[i] for i, val in enumerate(t.y) if val < loolow]))

fig.update_xaxes(
    rangebreaks=[dict(values=highOutliers+lowOutliers)]
)

fig.update_traces(connectgaps=True)

Plot 1:

在此处输入图像描述

Plot 2:

在此处输入图像描述

完整代码:

from numpy import random
import datetime
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

# Some sample data
y = np.random.normal(50, 5, 15)
datelist = pd.to_datetime(pd.date_range(datetime.datetime(2020, 1, 1).strftime('%Y-%m-%d'),periods=len(y)).tolist())
df = pd.DataFrame({'date':datelist, 'y':y})

# Introduce some outliers
df.loc[5,'y'] = 120
df.loc[10,'y'] = 2

# build figure
fig = px.line(df, x = 'date', y = 'y')

# containers and thresholds for outliers
highOutliers = []
lowOutliers = []
toohigh = 100
loolow = 20

# find outliers
fig.for_each_trace(lambda t: highOutliers.extend([t.x[i] for i, val in enumerate(t.y) if val > toohigh]))
fig.for_each_trace(lambda t: lowOutliers.extend([t.x[i] for i, val in enumerate(t.y) if val < loolow]))

# define outliers as rangebreaks
fig.update_xaxes(
    rangebreaks=[dict(values=highOutliers+lowOutliers)]
)

# connect gaps in the line
fig.update_traces(connectgaps=True)

fig.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM