Plotly:如何设置自定义 xticks

2023-12-23

From 情节性的文档 https://plotly.com/python/reference/#scatter:

布局 > x 轴 > 刻度值:

设置该轴上的刻度值 出现。仅在以下情况下有效tickmode设置为“数组”。与使用ticktext.

布局 > x 轴 > 刻度文本:

设置显示的文本 刻度位置通过tickvals。仅在以下情况下有效tickmode已设置 到“数组”。与使用tickvals.

Example:

import pandas as pd
import numpy as np

np.random.seed(42)
feature = pd.DataFrame({'ds': pd.date_range('20200101', periods=100*24, freq='H'), 
                        'y': np.random.randint(0,20, 100*24) , 
                        'yhat': np.random.randint(0,20, 100*24) , 
                        'price': np.random.choice([6600, 7000, 5500, 7800], 100*24)})


import plotly.graph_objects as go
import plotly.offline as py
import plotly.express as px
from plotly.offline import init_notebook_mode

init_notebook_mode(connected=True)


y = feature.set_index('ds').resample('D')['y'].sum()

fig = go.Figure()
fig.add_trace(go.Scatter(x=y.index, y=y))


x_dates = y.index.to_series().dt.strftime('%Y-%m-%d').sort_values().unique()


layout = dict(
    xaxis=dict(
        tickmode="array",
        tickvals=np.arange(0, x_dates.shape[0],2).astype(int),
        ticktext=x_dates[::2],
        tickformat='%Y-%m-%d',
        tickangle=45,
    )
)

fig.update_layout(layout)
fig.show()

Result:

由于长度为x_dates[::2]是 50,刻度数根本不匹配。 我该如何解决?


我通常使用下面的方法。你应该知道tickvals被视为位置性的参数并且对于数值而非日期效果最好(也许仅)。使用ticktext以您喜欢的格式显示日期。

片段 1:

fig.update_xaxes(tickangle=45,
                 tickmode = 'array',
                 tickvals = df_tips['date'][0::40],
                 ticktext= [d.strftime('%Y-%m-%d') for d in datelist])

Plot 1:

现在你可以改变tickvals=np.arange(0, y.shape[0]).astype(int)[0::40] to tickvals=np.arange(0, y.shape[0]).astype(int)[0::80]并得到:

Plot 2:

那为什么第一次这对你不起作用呢?有几个原因:

  1. 您的重新采样熊猫系列 y有日期作为索引,所以y.index被设置为 x 轴值。
  2. y.index回报dates
  3. 当您设置刻度线时职位通过fig.update_xaxes(tickvals),这可以更好地与integer values.

我做了什么来解决这个问题?

  1. 我在重新采样后重置索引,以便y.index不返回日期。
  2. 使用将 y 更改为数据框.to_frame.
  3. 变成fig.add_trace(go.Scatter(x=y.index, y=y.y))否则将会失败,因为这现在是一个数据框而不是一个系列。
  4. 您的日期现在检索为x_dates = y.ds

I know y=y.y looks really很奇怪,但我只是这样保留它作为一个友好的提醒,给你的 pandas 系列或数据框提供比单个字母更明智的名称,例如y这更容易与单个、无索引、数组或列表混淆。

完整代码:

import pandas as pd
import numpy as np
import plotly.graph_objects as go
import plotly.offline as py
import plotly.express as px
from plotly.offline import init_notebook_mode

# data
np.random.seed(42)
feature = pd.DataFrame({'ds': pd.date_range('20200101', periods=100*24, freq='H'), 
                        'y': np.random.randint(0,20, 100*24) , 
                        'yhat': np.random.randint(0,20, 100*24) , 
                        'price': np.random.choice([6600, 7000, 5500, 7800], 100*24)})

# resampling
y = feature.set_index('ds').resample('D')['y'].sum()#.to_frame()
y=y.to_frame()
y.reset_index(inplace=True)

# plotly setup
fig = go.Figure()
fig.add_trace(go.Scatter(x=y.index, y=y.y))

# x-ticks preparations
x_dates = y.ds
tickvals=np.arange(0, y.shape[0]).astype(int)[0::40]
ticktext=x_dates

# update tickmarks
fig.update_xaxes(tickangle=45,
                 tickmode = 'array',
                 tickvals = tickvals,
                 ticktext=[d.strftime('%Y-%m-%d') for d in ticktext])

fig.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Plotly:如何设置自定义 xticks 的相关文章

随机推荐

  • 在循环中分配一个函数

    我试图为循环中的每个元素分配一个函数 我希望函数使用变量的值 但它们使用变量的最后一个值 assign instrumentslist function for instList in lists instruments assign pa
  • 如何设置 Content-Disposition 标头中包含空格的文件名

    我有这段代码 resp addHeader Content Disposition inline filename fileName 当文件名是 a b c doc 或 abc doc 时 下载文件的名称会正确显示 然而 当文件名是 ab
  • 如何在用户点击时触发 setInterval 函数?

    我正在尝试编写一个 JS 计时器 该计时器将由用户单击 id start 的按钮触发 我已经让计时器本身正常工作 但是当我尝试添加代码以在按钮单击 id start 上启动计时器时 我破坏了它并且不确定为什么 任何帮助将不胜感激 这是JS代
  • 资源 已使用链接预加载进行预加载,但在窗口加载事件后几秒钟内未使用

    在我正在开发的网站上 我在外部服务器上托管了一些字体 在我的 我正在预加载字体 然后获取包含所有字体的样式表 font face字体的规则 样式表与字体位于同一服务器上 我遇到的问题是字体似乎已再次加载after样式表被加载 根本不使用预加
  • VS2022 net6.0在哪里存储ProjectGuid?

    刚刚开始使用 VS2022 和新的 csproj 格式 在旧格式中 每个项目都有这样的内容 Properties AssemblyInfo cs assembly Guid e8151094 eb82 46bd 9809 523d4a4fc
  • 除了“更改列表”视图之外,是否有办法让自定义 Django 管理操作显示在“更改”视图上?

    我认为无论出于何种原因 这都很容易做到 但我更深入地研究 似乎没有直接的方法允许用户在实例的 更改 视图上执行自定义管理操作 即 当您只是查看编辑时 屏幕显示单个实例 而不是实例列表 我是否忽略了一种简单的方法来做到这一点 或者是我覆盖管理
  • 同一文件上的多个 Arrow CSV 读取器返回 null

    我正在尝试使用多个 Goroutine 读取同一个文件 其中每个 Goroutine 都被分配一个字节来开始读取 并指定要读取的行数lineLimit 当文件适合内存时 我成功地通过设置csv ChunkSize的选项chunkSize多变
  • 如何从 Kotlin 运行 PowerShell 脚本?

    如何使用 Kotlin 运行 Powershell 脚本 我尝试移植在 StackOverflow 上找到的一些 Java 代码 但无法让它工作 我还尝试了以下方法 Runtime getRuntime exec powershell ex
  • 与 matlab 相比,fftw/c++ 计算 fft 是错误的

    我正在尝试使用 C 进行 fftw 我想测试一下它是否正常工作 我实现了一个简单的 ifft fft shift data data 0 测试一下 完全失败 测试数据是一个矩形函数 幅度和相位为1 用于比较的matlab代码与相同的测试完美
  • perl6如何获取promise的具体身份?

    我正在尝试编写在 Promise 中运行的 3 个 echo 服务器的代码 但我想知道哪个 Promise 正在执行回显 有没有办法做到这一点 no strict for 0 2 gt index result index start my
  • 用新文件替换旧文件

    我正在尝试编写一个脚本来用新文件内容替换旧文件内容 新文件内容以以下格式显示 旧文件 something txt新文件 something txt new 旧文件需要替换为新文件内容新文件名要重命名而不用新名称旧文件需要删除 下面的脚本不起
  • 在没有条件比较的情况下以数学方式查找最大值

    更新 到目前为止 codymanix 和 Moonshadow 提供了很大的帮助 我能够使用方程解决我的问题 而不是使用右移除以 29 因为使用 32 位有符号 2 31 溢出到 29 这有效 PHP 原型 r x x y x y 29 L
  • 内部类必须引用封闭类吗?

    我有一个内部类 非静态 它在初始化时使用对封闭类的引用 内部类现在会保留对封闭类的引用吗 class Enclosing class Inner private final ABC innerField outerField compute
  • 简化多重回波

    我在选择菜单中有完整的时区列表 如下所示
  • 在 Angular >=6 模板中扩展元素的属性

    我的代码中有这个 Component selector generic input template div div
  • 客户端脚本中的图像亮度检测

    有谁知道是否有一个脚本可以使用客户端脚本来检测图像 包括 HTML 中的暗度 亮度 我基本上希望能够检测背景中使用的图像的亮度 暗 亮 并让 CSS HTML jQuery JS 根据暗或亮 真或假 的变量来调整页面 我知道有可用的服务器端
  • 与react和express(nginx,docker)建立网络套接字通信

    尝试设置 websocket 连接 当我在本地主机环境中时它工作正常 但是一旦我设置了 docker 环境 客户端 react 就很难与 Express 建立 web socket 通信 我应该定义什么网址才能在两者之间打开网络套接字 我试
  • 使用 Python 将 .doc 转换为纯文本

    我正在尝试使用 texttract 将我的 doc 文件转换为纯文本 import textract text textract process path to file extension 但我收到这个错误 AttributeError
  • Lua 模式匹配与正则表达式

    我现在正在学习lua 关于lua中的模式匹配 我在lua org上的lua文档中找到了以下句子 尽管如此 Lua 中的模式匹配是一个强大的工具 并且包含一些难以与标准 POSIX 实现匹配的功能 由于我熟悉 posix 正则表达式 我想知道
  • Plotly:如何设置自定义 xticks

    From 情节性的文档 https plotly com python reference scatter 布局 gt x 轴 gt 刻度值 设置该轴上的刻度值 出现 仅在以下情况下有效tickmode设置为 数组 与使用ticktext