【Python百日进阶-数据分析】Day150 - plotly使用日期类型轴的时间序列 1

news2024/11/16 14:21:53

文章目录

  • 一、使用轴类型的时间序列date
    • 1.1 使用 plotly.express
    • 1.2 使用 graph_objects
  • 二、Dash 中的时间序列
  • 三、日期轴上的不同图表类型
    • 3.1 相对股票代码值的条形图
    • 3.2 多面区域图
  • 四、配置刻度标签
  • 五、将刻度标签移动到期间的中间
  • 六、用直方图总结时间序列数据
  • 七、显示期间数据
  • 八、混合期间数据的悬停模板

一、使用轴类型的时间序列date

时间序列可以使用plotly.express函数(px.line、px.scatter等px.bar)或plotly.graph_objects图表对象(go.Scatter等go.Bar)来表示。有关此类图表的更多示例,请参阅折线图和散点图或条形图的文档。

对于金融应用,Plotly 也可用于创建K线图和OHLC 图表,默认为日期轴。

当相应的数据是 ISO 格式的日期字符串或者它们是date pandas 列或datetime NumPy 数组时,Plotly 会自动将轴类型设置为日期格式。

1.1 使用 plotly.express

# Using plotly.express
import plotly.express as px

df = px.data.stocks()
print(df)
'''
           date      GOOG      AAPL      AMZN        FB      NFLX      MSFT
0    2018-01-01  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000
1    2018-01-08  1.018172  1.011943  1.061881  0.959968  1.053526  1.015988
2    2018-01-15  1.032008  1.019771  1.053240  0.970243  1.049860  1.020524
3    2018-01-22  1.066783  0.980057  1.140676  1.016858  1.307681  1.066561
4    2018-01-29  1.008773  0.917143  1.163374  1.018357  1.273537  1.040708
..          ...       ...       ...       ...       ...       ...       ...
100  2019-12-02  1.216280  1.546914  1.425061  1.075997  1.463641  1.720717
101  2019-12-09  1.222821  1.572286  1.432660  1.038855  1.421496  1.752239
102  2019-12-16  1.224418  1.596800  1.453455  1.104094  1.604362  1.784896
103  2019-12-23  1.226504  1.656000  1.521226  1.113728  1.567170  1.802472
104  2019-12-30  1.213014  1.678000  1.503360  1.098475  1.540883  1.788185

[105 rows x 7 columns]
'''
fig = px.line(df, x='date', y="GOOG")
fig.show()

在这里插入图片描述

1.2 使用 graph_objects

# Using graph_objects
import plotly.graph_objects as go

import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv'
df = pd.read_csv('f:/finance-charts-apple.csv')
print(df)
'''
           Date   AAPL.Open   AAPL.High  ...        mavg          up   direction
0    2015-02-17  127.489998  128.880005  ...  117.927667  129.114281  Increasing
1    2015-02-18  127.629997  128.779999  ...  118.940333  130.038244  Increasing
2    2015-02-19  128.479996  129.029999  ...  119.889167  130.884089  Decreasing
3    2015-02-20  128.619995  129.500000  ...  120.763500  131.741551  Increasing
4    2015-02-23  130.020004  133.000000  ...  121.720167  133.067817  Increasing
..          ...         ...         ...  ...         ...         ...         ...
501  2017-02-10  132.460007  132.940002  ...  124.498666  134.503328  Decreasing
502  2017-02-13  133.080002  133.820007  ...  125.205166  135.589534  Increasing
503  2017-02-14  133.470001  135.089996  ...  125.953499  136.731280  Increasing
504  2017-02-15  135.520004  136.270004  ...  126.723499  137.901963  Decreasing
505  2017-02-16  135.669998  135.899994  ...  127.504333  138.805366  Decreasing

[506 rows x 11 columns]
'''

fig = go.Figure([go.Scatter(x=df['Date'], y=df['AAPL.High'])])
fig.show()

在这里插入图片描述

二、Dash 中的时间序列

Dash是使用 Plotly 图形在 Python 中构建分析应用程序的最佳方式。要运行下面的应用程序,运行pip install dash,单击“下载”以获取代码并运行python app.py。

开始使用官方 Dash 文档,了解如何使用Dash Enterprise轻松设计和部署此类应用程序。

import dash
from dash import html, dcc
from dash.dependencies import Input, Output
import plotly.express as px

df = px.data.stocks()
print(df)

app = dash.Dash(__name__)

app.layout = html.Div([
    dcc.Dropdown(
        id="ticker",
        options=[{"label": x, "value": x}
                 for x in df.columns[1:]],
        value=df.columns[1],
        clearable=False,
    ),
    dcc.Graph(id="time-series-chart"),
])

@app.callback(
    Output("time-series-chart", "figure"),
    [Input("ticker", "value")])
def display_time_series(ticker):
    fig = px.line(df, x='date', y=ticker)
    return fig

app.run_server(debug=True)

在这里插入图片描述

三、日期轴上的不同图表类型

任何类型的笛卡尔图表都可以放在date轴上,例如这个相对股票代码值的条形图。

3.1 相对股票代码值的条形图

import plotly.express as px

df = px.data.stocks(indexed=True)-1
print(df)

fig = px.bar(df, x=df.index, y="GOOG")
fig.show()

在这里插入图片描述

3.2 多面区域图

import plotly.express as px

df = px.data.stocks(indexed=True)-1
print(df)

fig = px.area(df, facet_col="company", facet_col_wrap=2)
fig.show()

在这里插入图片描述

四、配置刻度标签

默认情况下,刻度标签(和可选刻度)与特定的网格线相关联,并表示时间的瞬间,例如“2018 年 2 月 1 日 00:00”。刻度标签可以使用tickformat属性(接受d3时间格式格式化字符串)进行格式化,只显示月份和年份,但它们仍然默认代表一个瞬间,所以在下图中,标签的文本“Feb 2018 " 跨越 1 月的部分时间和 2 月的部分时间。该dtick属性控制网格线之间的间距,"M1"设置表示“1个月”。此属性还接受毫秒数,可以通过乘以 放大到天数246060*1000。

‘\n’日期轴刻度标签具有特殊属性,即in第一个实例之后的任何部分对于tickformat每个唯一值仅在第二行出现一次,如下例中的年份编号。要在每个刻度标签上显示年份编号,’
‘应使用’\n’.

请注意,默认情况下,悬停标签中 X 和 Y 值的格式与相应轴的刻度标签的格式相匹配,因此在将刻度标签自定义为“月”等宽泛的内容时,通常需要自定义悬停标签到更窄的东西,比如实际日期,如下所示。

import plotly.express as px
df = px.data.stocks()
print(df)

fig = px.line(df, x="date", y=df.columns,
              hover_data={"date": "|%B %d, %Y"},
              title='自定义标签')
fig.update_xaxes(
    dtick="M1",
    tickformat="%b\n%Y")
fig.show()

在这里插入图片描述

五、将刻度标签移动到期间的中间

4.10 中的新功能

通过将ticklabelmode属性设置为"period"(默认为"instant"),我们可以将刻度标签移动到它们所代表的周期的中间。网格线保留在每个月初(感谢dtick=“M1”),但标签现在跨越它们所指的月份。

import plotly.express as px
df = px.data.stocks()
fig = px.line(df, x="date", y=df.columns,
              hover_data={"date": "|%B %d, %Y"},
              title='用 ticklabelmode="period 自定义标签"')
fig.update_xaxes(
    dtick="M1",
    tickformat="%b\n%Y",
    ticklabelmode="period")
fig.show()

在这里插入图片描述

六、用直方图总结时间序列数据

Plotly直方图是强大的数据聚合工具,甚至可以在日期轴上工作。histfunc="avg在下图中,我们传入每日数据,并通过设置和将其显示为每月平均值xbins_size=“M1”。

import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv'
df = pd.read_csv('f:/finance-charts-apple.csv')

fig = px.histogram(df, x="Date", y="AAPL.Close", histfunc="avg", title="日期轴上的直方图")
fig.update_traces(xbins_size="M1")
fig.update_xaxes(showgrid=True, ticklabelmode="period", dtick="M1", tickformat="%b\n%Y")
fig.update_layout(bargap=0.1)
fig.add_trace(go.Scatter(mode="markers", x=df["Date"], y=df["AAPL.Close"], name="daily"))
fig.show()

在这里插入图片描述

七、显示期间数据

4.11 中的新功能

例如,如果您的数据编码为“1 月 1 日”或“1 月 31 日”实际上是指整个 1 月份收集的数据,例如,您可以将跟踪配置为在开始结束时显示它们的标记,或在月中使用xperiod和xperiodalignment属性。在下面的示例中,原始数据均使用当月 10 日的 X 值进行编码,但被分成月周期,xperiod="M1"然后在周期的开始、中间和结束时显示。

import plotly.graph_objects as go
import pandas as pd

df = pd.DataFrame(dict(
    date=["2020-01-10", "2020-02-10", "2020-03-10", "2020-04-10", "2020-05-10", "2020-06-10"],
    value=[1,2,3,1,2,3]
))

fig = go.Figure()
fig.add_trace(go.Scatter(
    name="Raw Data",
    mode="markers+lines", x=df["date"], y=df["value"],
    marker_symbol="star"
))
fig.add_trace(go.Scatter(
    name="Start-aligned",
    mode="markers+lines", x=df["date"], y=df["value"],
    xperiod="M1",
    xperiodalignment="start"
))
fig.add_trace(go.Scatter(
    name="Middle-aligned",
    mode="markers+lines", x=df["date"], y=df["value"],
    xperiod="M1",
    xperiodalignment="middle"
))
fig.add_trace(go.Scatter(
    name="End-aligned",
    mode="markers+lines", x=df["date"], y=df["value"],
    xperiod="M1",
    xperiodalignment="end"
))
fig.add_trace(go.Bar(
    name="Middle-aligned",
    x=df["date"], y=df["value"],
    xperiod="M1",
    xperiodalignment="middle"
))
fig.update_xaxes(showgrid=True, ticklabelmode="period")
fig.show()

在这里插入图片描述

八、混合期间数据的悬停模板

v5.0 中的新功能

x当与或x unifiedhovermodes 和 usinghovertemplate一起显示具有混合大小的周期(即季度和月度)的周期数据时,可以使用该xhoverformat属性来控制每个周期的 X 值如何显示,并且%{xother}可以使用特殊的 hover-template 指令来控制如何显示与悬停点不共享确切 X 坐标的点的 X 值。%{xother}当 X 值是悬停在其上的值时,将返回一个空字符串,否则将返回(%{x}). 特殊%{xother}的%{xother}和%{xother}变体将分别在括号之前、之后或周围显示空格。

import plotly.graph_objects as go

fig = go.Figure()

fig.add_trace(go.Bar(
    x=["2020-01-01", "2020-04-01", "2020-07-01"],
    y=[1000, 1500, 1700],
    xperiod="M3",
    xperiodalignment="middle",
    xhoverformat="Q%q",
    hovertemplate="%{y}%{_xother}"
))

fig.add_trace(go.Scatter(
    x=["2020-01-01", "2020-02-01", "2020-03-01",
      "2020-04-01", "2020-05-01", "2020-06-01",
      "2020-07-01", "2020-08-01", "2020-09-01"],
    y=[1100,1050,1200,1300,1400,1700,1500,1400,1600],
    xperiod="M1",
    xperiodalignment="middle",
    hovertemplate="%{y}%{_xother}"
))

fig.update_layout(hovermode="x unified")
fig.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macOS 上安装和配置 Flutter 开发环境

本文基于此: Flutter中文网 一、安装和运行Flutter的系统环境要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS磁盘空间:2.8 GB(不包括IDE/tools的磁盘空间)。工具:Flutter使用git进行安装和升级。我们建议安…

vue3中的写法以及,一些语法糖

vue3新增setup,属性执行比 created更早,同时setup中this不会指向实例)这个方法在onBeforeMounted之前被调用。定义数据需要在数据前面加ref,ref在vue3中是将数据转换成响应式数据结构的一种,因为vue3中没有了data(){ },那么就没办法劫持数据做…

PDF拆分成多个页面怎么办?这三个方法让你实现将文件拆分成多页

PDF是我们常见的文件格式之一,在日常办公中,我们经常会将WORD、PPT、EXCEL等文档转换成PDF的格式后再进行传输,这样不仅传输速度快,格式也不会出现乱码的情况,但在一些特殊的场景下,我们也需要将一份完整的…

Allegro174版本新功能介绍之锁定菜单栏设置

Allegro174版本新功能介绍之锁定菜单栏设置 用Allegro设计的时候,经常因为切换了Symphony team design模式导致菜单栏变化,使用的时候又需要重新去调用一次,十分麻烦 但是在Allegro升级到了174的时候,有一个锁定菜单栏的功能 具体操作如下 选择Setup选择User Prefrences

代谢组学喜讯|百趣生物与金域医学达成代谢组学战略合作

2023年1月4日,上海百趣生物医学科技有限公司(“百趣生物”)与广州金域医学检验集团股份有限公司(“金域医学”)在广州举行战略合作签约仪式。双方将在代谢组学科研服务和临床转化方面进行深度合作,共同致力…

2022年餐饮连锁行业研究报告

第一章 行业概况 餐饮连锁是餐饮的一种发展模式,指餐饮企业通过连锁经营和特许经营的方式进行扩张。根据商务部发布的《特许经营管理办法》:连锁企业必须具备2店1年才有出售特许经营权的权利。餐饮连锁是餐饮业发展到一定程度时的一个必然的产物&#x…

深度学习入门之ResNet食物图像分类

前言 参加了华为一个小比赛第四届MindCon-爱(AI)美食–10类常见美食图片分类,本来想实践机器学习课程的知识,后来发现图像分类任务基本都是用神经网络做,之前在兴趣课上学过一点神经网络但不多,通过这样一…

Android UI界面刷新机制

一 前言 作为严重影响 Android 口碑问题之一的 UI 流畅性差的问题,首先在 Android 4.1 版本中得到了有效处理。其解决方法即在 4.1 版本推出的 Project Butter。Project Butter 对 Android Display系统进行了重构,引入三个核心元素:VSYNC、T…

nmake文件学习记录(一)看《跟我一起写Makefile》

1、陈皓《跟我一起写Makefile》 makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make 是一个命令工具,是一个解释makefile 中指令的命…

线程池(ThreadPoolExecutor)

文章目录一、线程池标准库提供的线程池ThreadPoolExecutor自定义线程池一、线程池 为什么要引入线程池? 这个原因我们需要追溯到线程,我们线程存在的意义在于,使用进程进行并发编程太重了,所以引入了线程,因为线程又称为 “轻量…

【知识图谱导论-浙大】第三、四章:知识图谱的抽取与构建

前文: 【知识图谱导论-浙大】第一章:知识图谱概论 【知识图谱导论-浙大】第二章:知识图谱的表示 说明:原视频中的第三章主要介绍了图数据库相关的内容,有兴趣的可以查看相关课件或者对应的视频: 【知识图…

[Linux理论基础1]----手写和使用json完成[序列化和反序列化]

文章目录前言一、应用层二、再谈"协议"三、 网络版计算器手写版本使用第三方库json实现完整代码总结前言 理解应用层的作用,初始HTTP协议;理解传输层的作用,深入理解TCP的各项特性和机制;对整个TCP/IP协议有系统的理解;对TCP/IP协议体系下的其他重要协议和技术有一定…

JPG格式如何转为PDF格式?快来学习如何转换

图片是我们经常用到的一种便携式文件,像我们日常的照片或者是一些学习资料、工作资料都是图片形式的,我们经常会把这些图片发送给其他人,这时候就需要想一个简单的办法把图片一次性发送过去,所以我们可以将图片转换为PDF文件&…

暨 广告、推荐、搜索 三大顶级复杂业务之 “广告业务系统详叙”

文章目录暨 广告、推荐、搜索 三大顶级复杂业务之 “广告业务系统详叙”广告系统的核心功能ADX 架构流程概述典型 ADX 架构图概述消息中心抱歉,有段日子没码字了,后面会尽量补出来分享给大家。这段时间整理了关于 “广告业务” 相关的思考,作…

OSPF笔记(五):OSPF虚链路--普通区域远离骨干区域

一、OSPF 虚链路 1.1 虚链路邻居关系: hello包只发送一次,没有dead时间 虚链路配置邻居指的是RID,非接口IP 1.2 虚链路解决的问题: 普通区域远离骨干区域0的问题 普通区域连接两个骨干区域0问题 (1)…

SpringSecurity授权功能快速上手

3. 授权 3.0 权限系统的作用 例如一个学校图书馆的管理系统,如果是普通学生登录就能看到借书还书相关的功能,不可能让他看到并且去使用添加书籍信息,删除书籍信息等功能。但是如果是一个图书馆管理员的账号登录了,应该就能看到并…

最新款发布 | 德州仪器(TI)60G单芯片毫米波雷达芯片 -xWRL6432

本文编辑:调皮哥的小助理 概述 最近,德州仪器(TI)推出了单芯片低功耗 57GHz 至 64GHz 工业(汽车)毫米波雷达传感器IWRL6432,具有 7GHz 的连续带宽,可实现更高分辨率。除了UWB雷达之外,IWRL6432目前是毫米波雷达带宽最…

漏洞挖掘-不安全的HTTP方法

前言: 年关将至,这可能是年前最后一篇文章了。已经有一段时间没有更新文章了,因为最近也没有学到什么新的知识,也就没什么可写的,又不想灌水。最近关注的好兄弟们多了很多,在这里也是十分感谢大家的支持&am…

Make RepVGG Greater Again | 中文翻译

性能和推理速度之间的权衡对于实际应用至关重要。而重参化可以让模型获得了更好的性能平衡,这也促使它正在成为现代卷积神经网络中越来越流行的架构。尽管如此,当需要INT8推断时,其量化性能通常太差,无法部署(例如Imag…

SQL BETWEEN 操作符

BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。 SQL BETWEEN 操作符 BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。 SQL BETWEEN 语法 SELECT column1, column2, ... FROM table_name WHERE column BETWEEN value1 AND va…