如何使用单个滑块创建具有可滚动x轴的多个绘图

时间:2018-05-29 17:51:32

标签: python-3.x matplotlib jupyter-notebook dashboard ipywidgets

我打算在公共时间轴上创建共享2-3个图,这些图可以使用单个滑块交互式滚动。还有一个约束条件,即每个变量的采样频率不同,但时间窗口相同。

global
    log 127.0.0.1 local2 info
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    option httplog
    option dontlognull
    option redispatch
    retries 3
    timeout connect 5s
    timeout client 50s
    timeout server 50s
    stats enable
    stats hide-version
    stats auth admin:admin
    stats refresh 10s
    stats uri /stat?stats

frontend http_front
    bind *:80
    mode http
    option httpclose
    option forwardfor
    reqadd X-Forwarded-Proto:\ http
    default_backend http_back

backend http_back
    balance roundrobin
    mode http
    cookie SERVERID insert indirect nocache
    server ServerA 192.168.1.2:80 check cookie ServerA
    server ServerB 192.168.1.3:80 check cookie ServerB

我们怎么做呢。

试过这个示例代码

x  - time
y1 - values sampled every 1 second
y2 - values sampled every 10 seconds
y3 - values sampled every 100 seconds 

我想要类似于此的东西,唯一的变化是x和y轴数据是恒定的,滑块小部件用于在图形显示上使用特定时间窗口左右滚动图形(此处为x轴)

2 个答案:

答案 0 :(得分:0)

部分地解决了它的交互性问题。

X轴可以通过滑块移动滚动。

%matplotlib inline
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np

def f(m):
    plt.figure(2)
    x = np.linspace(-10, 10, num=1000)
    plt.plot(x,x)
    #plt.plot(x, m * x)
    plt.xlim(m+2, m-2)
    plt.show()

interactive(f, m=(-2.0, 2.0))

答案 1 :(得分:0)

下面的实施摘要。

  1. 加载所有图形并使用带有滑块功能的plt.xlim(min_x,max_x)仅操作xlim

    selection_range_slider = widgets.SelectionRangeSlider(
    options=options,
    index=index,
    description='Time slider',
    orientation='horizontal',
    layout={'width': '1000px'},
    continuous_update=False
    )
    
    #selection_range_slider
    def print_date_range(date_range):
        print(date_range)
        plt.figure(num=None, figsize=(15, 4), dpi=80, facecolor='w', 
        edgecolor='k')
    
    
        min_x=date_range[0]
        max_x=date_range[1]
    
        ax1 = plt.subplot(311)
        plt.plot(Data_1.Timestamp,Data_1.value,'r')
        plt.setp(ax1.get_xticklabels(), fontsize=6,visible=False)
        plt.xlabel('Data_1')
        ax1.xaxis.set_label_coords(1.05, 0.5)
    
    
        # share x only
        ax2 = plt.subplot(312, sharex=ax1)
        plt.plot(Data_2.Timestamp,Data_2.value,'b')
        # make these tick labels invisible
        plt.setp(ax2.get_xticklabels(), visible=False)
        plt.xlabel('Data_2')
        ax2.xaxis.set_label_coords(1.05, 0.5)
    
        # share x and y
        ax3 = plt.subplot(313, sharex=ax1)
        plt.plot(Data_3.Timestamp,Data_3.value,'g')
        ax3.xaxis.set_label_coords(1.05, 0.5)
    
        #plt.xlim(0.01, 5.0)
        plt.xlim(min_x,max_x)
        plt.show()
        #plt.xlabel('Data_3')
    
    widgets.interact(
        print_date_range,
        date_range=selection_range_slider
        );