plotly 坐标轴范围截断rangebreaks使用的一个注意点

这篇具有很好参考价值的文章主要介绍了plotly 坐标轴范围截断rangebreaks使用的一个注意点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

plotly坐标轴截断混合设置且指定设置截断时间的时候需要注意先后顺序

  • 大范围的时间要在小范围的时间前设置,比如日内时间的截断要设置在日期截断的后面
  • 同范围的规则截断要在指定截断前设置,对日期的截断,规则系截断最好在指定截断前设置,六日截断规则在指定日期截断前

以上两条为测试出来的规律,具体细节尚未细究与验证

1.测试代码:绘制不设置坐标轴范围截断的图

df = df[['datetime', 'v']]

fig = go.Figure(data=go.Figure(go.Scatter(x=df['datetime'],
                                          y=df['v'],
                                          mode='lines+markers',
                                          line=dict(width=1),
                                          marker=dict(size=1)
                                          )))

fig.update_xaxes(tickformat="%H:%M\n%Y-%m-%d",)

先看不设置坐标轴范围截断的图
中间有大片没有数据的线,占据了大量空间,将数据形状挤压得看不出来
plotly 坐标轴范围截断rangebreaks使用的一个注意点

2.测试代码:绘制设置坐标轴范围截断的图,去除坐标轴中的无数据的空白的时间段

df = df[['datetime', 'v']]

数据时间序列 = pd.Series(df['datetime'].dt.date.unique())
全量时间序列 = pd.Series(pd.date_range(start=数据时间序列.min(), end=数据时间序列.max(), freq='D').date)
需要删除时间序列 = 全量时间序列[全量时间序列.isin(数据时间序列) == False].values
需要删除时间序列 = [i.strftime('%Y-%m-%d') for i in 需要删除时间序列]

fig = go.Figure(data=go.Figure(go.Scatter(x=df['datetime'],
                                          y=df['v'],
                                          mode='lines+markers',
                                          line=dict(width=1),
                                          marker=dict(size=1)
                                          )))

fig.update_xaxes(
    tickformat="%H:%M\n%Y-%m-%d",
    rangebreaks=[
        dict(bounds=[6, 1], pattern='day of week'),   # 设置周六周日截断,规则截断
        dict(values=需要删除时间序列),                 # 补充截断一天中没有数据的日期,指定日期截断
        dict(bounds=[11.6, 13.4], pattern="hour"),    # 空白时间段,时间范围小于天
        dict(bounds=[15.1, 20.9], pattern='hour'),    # 空白时间段
        dict(bounds=[23.1, 8.9], pattern='hour')]     # 空白时间段
)

添加时间截断后,数据看起来就连贯了很多
plotly 坐标轴范围截断rangebreaks使用的一个注意点

3.测试代码:绘制设置坐标轴范围截断的图,去除坐标轴中的无数据的空白的时间段,但是将需要截断的时间设置在需要截断的日期前,这样会出现错误 --> 在4中进行修改与补充

df = df[['datetime', 'v']]
数据时间序列 = pd.Series(df['datetime'].dt.date.unique())
全量时间序列 = pd.Series(pd.date_range(start=数据时间序列.min(), end=数据时间序列.max(), freq='D').date)
需要删除时间序列 = 全量时间序列[全量时间序列.isin(数据时间序列) == False].values
需要删除时间序列 = [i.strftime('%Y-%m-%d') for i in 需要删除时间序列]

fig = go.Figure(data=go.Figure(go.Scatter(x=df['datetime'],
                                          y=df['v'],
                                          mode='lines+markers',
                                          line=dict(width=1),
                                          marker=dict(size=1)
                                          )))

fig.update_xaxes(
    tickformat="%H:%M\n%Y-%m-%d",
    rangebreaks=[
        dict(bounds=[11.6, 13.4], pattern="hour"),
        dict(bounds=[15.1, 20.9], pattern='hour'),
        dict(bounds=[23.1, 8.9], pattern='hour'),
        dict(bounds=[6, 1], pattern='day of week'),
        dict(values=需要删除时间序列)

        # 按照规则截断在指定日期截断后的顺序,画出来的图是空白
        # dict(values=需要删除时间序列),
        # dict(bounds=[6, 1], pattern='day of week'),

    ],
)

出现坐标轴重叠的现象,如下图
当调整周末代码在指定日期的代码后面的时候,画图甚至是空白的
plotly 坐标轴范围截断rangebreaks使用的一个注意点

4. 后续的修改与补充

  • 参考论坛中的例子:Data overlap in chart when combining rangebreaks bounds with values
    将跨天的时间段修改为不跨天的时间段会减少bug出现,例如
rangebreaks=[
    dict(bounds=[20, 13.5], pattern="hour"),            # Remove non-trading hours
])

修改为:文章来源地址https://www.toymoban.com/news/detail-436782.html

rangebreaks = [
    dict(bounds=[20, 24], pattern="hour"), 
    dict(bounds=[0, 13.5], pattern="hour"), 
]

  • 需要删除的日期不要包含周末,不然也会导致坐标轴重叠

到了这里,关于plotly 坐标轴范围截断rangebreaks使用的一个注意点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3Ds Max坐标轴切换,使用物体的世界坐标和本地坐标之间切换

    官方文档 官方文档 使用“参考坐标系”列表,可以指定变换(移动、旋转和缩放)所用的坐标系。选项包括“视图”、“屏幕”、“世界”、“父对象”、“局部”、“万向”,“栅格”、“工作”和“拾取”。 主工具栏 “参考坐标系”下拉菜单 在“屏幕”坐标系中,所

    2024年02月12日
    浏览(37)
  • echarts使用中,关于y坐标轴无法正常显示的问题记录

    前段日子封装了一个组件,大概功能为:给定一些数据,用户手动配置一些参数(如图),点击提交后,实现图表的渲染,除此之外还有其他一些功能。(还没和后端对接,数据为自己mock) 今天将组件移植到公司里面的程序时,发现纵坐标一直无法显示刻度,如下图所示 排

    2024年02月11日
    浏览(37)
  • python使用matplotlib创建三维图时隐藏坐标轴、网格、背景的方法

    使用下面的代码创建一条空间直线 效果如下图所示,创建三维图形时默认会显示灰色背景、网格线以及坐标轴。 可以加入 ax.grid(None) 指令将网格设为隐藏,加入 ax.axis(\\\'off\\\') 指令将坐标轴设为隐藏 使用 可以将坐标轴的三个背景面设为白色。 加入上述指令后,代码和效果如下

    2024年02月16日
    浏览(39)
  • VTK OrientationMarker 方向 三维坐标系 相机坐标轴 自定义坐标轴

    本文 以 Python 语言开发 我们在做三维软件开发时,经常会用到相机坐标轴,来指示当前空间位置; 坐标轴效果: 相机方向坐标轴  Cube 正方体坐标轴  自定义坐标轴: Code: Axes CameraOrientationWidget OrientationMarkerWidget custom OrientationMarker

    2024年02月06日
    浏览(40)
  • matlab绘图修改坐标轴数字字体大小及坐标轴自定义间隔设置

    一、背景 在matlab使用plot函数绘图后,生成的图片坐标轴数字字体大小及间隔可能并不符合我们的要求,因此需要自定义修改,具体方法如下 二、修改坐标轴数字字体大小 只需添加以下命令即可: 不仅可以修改坐标轴数字字体大小,还可以修改字体类型 三、自定义坐标轴间

    2024年01月15日
    浏览(65)
  • Python Axes3D自制坐标轴(没办法俺不知道咋移动坐标轴,但是不移动坐标轴画图太难看了)

       因为很不巧用Axes3D自带的坐标轴画出来图有点丑,首先ticklabels离坐标轴有点远。其次想正负值都能显示。就在想能不能把轴往上移一下,同时拉近ticklabels和坐标轴的距离。    博主主要是发现了用ax.axis(‘off’)或者ax1.set_axis_off()可以达到把坐标轴全部关掉的效果,如下

    2024年02月15日
    浏览(31)
  • 第六章、坐标轴的定制

    6.1、坐标轴概述 在绘制图表过程中,matplotlib会根据所绘图表的类型决定是否使用坐标系,或者显示哪种类型的坐标系。 坐标轴的结构相同,主要包括轴脊、刻度,其中刻度又可以细分为刻度线和刻度标签,刻度线又可以细分为主刻线和次刻线。坐标轴的各部分均是matplotli

    2024年02月06日
    浏览(27)
  • 采用VMD按照某一坐标轴旋转坐标结构

    关注 M r . m a t e r i a l   , color{Violet} rm Mr.material , Mr.material   , 更 color{red}{更} 更 多 color{blue}{多} 多 精 color{orange}{精} 精 彩 color{green}{彩} 彩 ! 主要专栏内容包括:   †《LAMMPS小技巧》: ‾ textbf{ underline{dag《LAMMPS小技巧》:}}   † 《 LAMMPS 小技巧》: ​ 主要介绍采

    2024年02月13日
    浏览(27)
  • Matlab中如何调整坐标轴刻度

    Matlab中如何调整坐标轴刻度 在Matlab中,我们经常需要对绘图中的坐标轴刻度进行调整,以便更好地展示数据。本文将介绍如何使用Matlab来调整坐标轴刻度,并提供相应的源代码示例供参考。 Matlab提供了多种方法来调整坐标轴刻度。下面我们将介绍其中的两种常用方法:手动

    2024年02月05日
    浏览(47)
  • Matlab隐藏坐标轴/数字/刻度线

    目录 一、隐藏坐标轴的数字 二、隐藏坐标轴的刻度 三、隐藏坐标轴 四、隐藏坐标区 五、修改坐标区背景颜色  六、修改图片背景颜色 一、隐藏坐标轴的数字 以X轴为例,在画图的代码后面增加以下设置: 二、隐藏坐标轴的刻度 三、隐藏坐标轴 四、隐藏坐标区 或者   五、

    2024年01月24日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包