【问题标题】:How to update X axis when scrolling plotly slider?滚动绘图滑块时如何更新X轴?
【发布时间】:2021-08-02 09:48:10
【问题描述】:

代码将长图像分割成帧。目标是使y轴值真实

import numpy as np
import plotly.graph_objects as go
import plotly.express as px

xg = np.random.rand(100, 22400)
# xg = np.random.rand(10, 1200)

base = px.imshow(xg, aspect="auto", color_continuous_scale="gray")
frameSize = 400

frames = [
    go.Frame(
        data=px.imshow(
            xg[:, x : x + frameSize], aspect="auto", color_continuous_scale="gray"
        ).data,
        name=x,
    )
    for x in range(0, xg.shape[1], frameSize)
]

base=go.Figure(data=frames[0].data, frames=frames, layout=base.layout).update_layout(
    updatemenus=[{
        "buttons": [{"args": [None, {"frame": {"duration": 500, "redraw": True}}],
                    "label": "▶",
                    "method": "animate",
                },],
        "type": "buttons",
        }],
    sliders=[{
        "steps": [{"args": [[d],
                            {"frame": {"duration": 0, "redraw": True},
                             "mode": "immediate",},],
                    "label": d,
                    "method": "animate",
                  }
                  for d in range(0, xg.shape[1], frameSize)
                 ],
        }],
)

base.show()

还有一个问题,是否可以改变Y轴的值。 (我需要将Y轴的所有值乘以0.4)

【问题讨论】:

    标签: python-3.x plotly plotly-python


    【解决方案1】:
    import numpy as np
    import plotly.graph_objects as go
    import plotly.express as px
    
    xg = np.random.rand(100, 22400)
    # xg = np.random.rand(10, 1200)
    
    base = px.imshow(xg, aspect="auto", color_continuous_scale="gray")
    frameSize = 400
    
    frames = [
        go.Frame(
            data=px.imshow(
                xg[:, x : x + frameSize], aspect="auto", color_continuous_scale="gray"
            ).data,
            layout={"xaxis":{"tickmode":"array","tickvals":[v for v in range(0, frameSize, frameSize//8)],
                            "ticktext":[v+x for v in range(0, frameSize, frameSize//8)]}},
          name=x,
        )
        for x in range(0, xg.shape[1], frameSize)
    ]
    
    go.Figure(data=frames[0].data, frames=frames, layout=base.layout).update_layout(
        updatemenus=[{
            "buttons": [{"args": [None, {"frame": {"duration": 500, "redraw": True}}],
                        "label": "▶",
                        "method": "animate",
                    },],
            "type": "buttons",
            }],
        sliders=[{
            "steps": [{"args": [[d],
                                {"frame": {"duration": 0, "redraw": True},
                                 "mode": "immediate",},],
                        "label": d,
                        "method": "animate",
                      }
                      for d in range(0, xg.shape[1], frameSize)
                     ],
            }],
    ).update_layout(yaxis={"tickmode":"array", "tickvals":[v for v in range(0, xg.shape[0], xg.shape[0]//5)],
                          "ticktext":[round(v*.4,2) for v in range(0, xg.shape[0], xg.shape[0]//5)]})
    

    使用 JPEG 作为来源

    import skimage.io, skimage.color
    
    image_filename = "https://www.termitnjak.com/en/media/logos/python.jpeg/@@images/image.jpeg"
    image_numpy = skimage.io.imread( image_filename )
    xg = skimage.color.rgb2gray(image_numpy)
    xg = np.tile(xg, 10)
    

    【讨论】:

    • 一切都很棒。一个问题,是否可以将值加载到图片本身(我的意思是X值,我指向图片,还有2,3,99)
    • 我没有处理过图像...光栅在逻辑上是一个二维数组,所以我看不出它有什么不工作的原因
    • 快速浏览了一下,使用 python JPEG 并使用scikit-image.org生成了一个重复的宽黑白图像
    • 请告诉我如何增加抽动的频率?谢谢
    • ticks 将是您图像的分辨率...我已经定义了一个变量frameSize,可以更改为拆分为更多或更少的帧...目前每帧 400 像素
    猜你喜欢
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2020-07-16
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多