[英]How to Exclude specific dates from X-axis in Plotly Express
我很可能宁愿使用用于构建您的图形的数据集而不是图形本身来执行此操作。 但是这个建议应该完全符合您的要求。 如何找到异常值将完全取决于您。 给定一些阈值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)
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.