python - Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙?
问题描述
我有一个以 15 分钟为间隔的几个月的欧元/日元汇率图表,因此没有从周五晚上到周日晚上的数据。
这是部分数据,注意周末索引中的跳过(类型:DatetimeIndex):
以 plotly 绘制此数据会导致缺失日期的差距使用上面的数据框:
import plotly.graph_objs as go
candlesticks = go.Candlestick(x=data.index, open=data['Open'], high=data['High'],
low=data['Low'], close=data['Close'])
fig = go.Figure(layout=cf_layout)
fig.add_trace(trace=candlesticks)
fig.show()
输出:
如您所见,缺少日期的地方存在空白。我在网上找到的一种解决方案是使用以下方法将索引更改为文本:
data.index = data.index.strftime("%d-%m-%Y %H:%M:%S")
并再次绘制它,这确实有效,但有它自己的问题。x 轴标签看起来很糟糕:
我想生成一个图形,该图形绘制第二个图中没有间隙的图形,但 x 轴的显示方式与第一个图形上的一样。或者至少以更简洁和响应式的格式显示,尽可能接近第一个图表。
预先感谢您的任何帮助!
解决方案
即使您的数据集中缺少某些日期,绘图也会将您的日期解释为日期值,并在您的时间轴上显示甚至丢失的日期。一种解决方案是获取第一个和最后一个日期,构建完整的时间线,找出原始数据集中缺少哪些日期,并将这些日期包含在:
fig.update_xaxes(rangebreaks=[dict(values=dt_breaks)])
这将变成这个数字:
进入这个:
完整代码:
import plotly.graph_objects as go
from datetime import datetime
import pandas as pd
import numpy as np
# sample data
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
# remove some dates to build a similar case as in the question
df = df.drop(df.index[75:110])
df = df.drop(df.index[210:250])
df = df.drop(df.index[460:480])
# build complete timepline from start date to end date
dt_all = pd.date_range(start=df['Date'].iloc[0],end=df['Date'].iloc[-1])
# retrieve the dates that ARE in the original datset
dt_obs = [d.strftime("%Y-%m-%d") for d in pd.to_datetime(df['Date'])]
# define dates with missing values
dt_breaks = [d for d in dt_all.strftime("%Y-%m-%d").tolist() if not d in dt_obs]
# make fiuge
fig = go.Figure(data=[go.Candlestick(x=df['Date'],
open=df['AAPL.Open'], high=df['AAPL.High'],
low=df['AAPL.Low'], close=df['AAPL.Close'])
])
# hide dates with no values
fig.update_xaxes(rangebreaks=[dict(values=dt_breaks)])
fig.update_layout(yaxis_title='AAPL Stock')
fig.show()
推荐阅读
- apache-zeppelin - Zeppelin:配置错误
- json - 我无法追加/更新字典
- javascript - Google Sheet 自动电子邮件脚本
- amazon-web-services - AWS - ELB - 将 http/https 流量路由到 EC2 实例的自定义端口
- swift - SwiftUI - 从数据库中随机选择两个值
- java - 降级循环依赖库中的 java 目标版本
- react-native - React Native listIem 传递的 props
- sql - 我怎样才能重用一个
mybatis 中的标签? - esp8266 - 如何使用 ArduinoJSON 6 从 ESP8266 的 SPIFFS 读取 json 文件?
- java - Android Java - 警报管理器大部分工作完美但有时会延迟