Как сделать так, чтобы ползунок взаимодействия управлял осью x в линейчатой ​​диаграмме, чтобы отображать часть данных при каждом изменении - PullRequest
0 голосов
/ 05 августа 2020

Как сделать так, чтобы ползунок взаимодействия управлял осью x, чтобы показывать мне только 5 столбцов за раз, когда я изменяю значение ползунка, диаграмма показывает мне следующие пять столбцов и т. Д. Я пытался сделать это с помощью взаимодействия но он меняет количество полосок, если у кого-то возникнет идея, я буду благодарен ей, как я пробовал

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
from ipywidgets import interact 
import ipywidgets as ipw

a =[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
b =[10,11,10,12,13,11,15,12,20,9,11,12,10,18]
def func(x = 5):
    plt.bar(a[:x],b[:x])
    plt.title('graph 1')
    plt.show()

interact(f,x =ipw.IntSlider(min=1, max=14, step=1,value=10, description='Test:', disabled=False,readout_format='d'))

Ответы [ 2 ]

1 голос
/ 06 августа 2020

снимок экрана с сюжетом привет большое спасибо за ваш ответ, который я нашел другим способом, используя interact ipywidegets

from ipywidgets import interact
import matplotlib.pyplot as plt
import ipywidgets as ipw

a = [0,1,2,3,4,5,6,7,8,9,10]
b = [2,4,2,4,3,1,5,6,1,9,3]
def f (x):
    plt.bar(a[x:x+3],b[x:x+3] ,color = 'Green')
    plt.title('graph 1')
    plt.show
interact(f,x = ipw.IntSlider(min=a[0], max=a[-3], step=1,value=a[0]))
1 голос
/ 06 августа 2020

Вы можете использовать виджет Slider , а затем установить параметр valstep, чтобы контролировать количество шагов, на которые ползунок меняет каждый раз, когда вы щелкаете по нему.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)

a =[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
b =[10,11,10,12,13,11,15,12,20,9,11,12,10,18,21]

plt.bar(a, b)

bar_number = 5

ax.set_xlim(0.5, bar_number+0.5)

# plt.axes(rect, projection=None, polar=False, **kwargs)
# rect is a 4-tuple of floats  = [left, bottom, width, height]
# A new axes is added with dimensions rect in normalized (0, 1) units using add_axes on the current figure.
# (left, bottom) specify lower left corner coordinates of the new axes in normalized (0, 1) units
axcolor = 'lightgoldenrodyellow'
axpos = plt.axes([0.2, 0.1, 0.65, 0.03], facecolor=axcolor)

# Slider(ax, label, valmin, valmax)
spos = Slider(axpos, 'Pos', 0, max(a)-bar_number, valinit=0., valstep=bar_number)

def update(val):
    pos = spos.val
    ax.set_xlim(pos+0.5, pos+0.5+bar_number)
    fig.canvas.draw_idle()

spos.on_changed(update)

plt.show()

введите описание изображения здесь

...