Witam,
Faktycznie działa, dzięki. Najlepsze jest to, że oglądałem tę stronę, ale widocznie zbyt powierzchownie, nie wyłapałem tej ważnej informacji, że drugi argument w funkcji rysującej musi być tablicą.
Jedna ściana pokonana, ale są kolejne.
Ile można rzeczy można zmieniać w runtimie? Udało mi się:
Chciałbym też, aby po kliknięciu w przycisk pojawiał się i znikał rangeselector. Jak przypisać zdarzenie do kliknięcia przycisku?:
$('.SliderOn button').click(function () {
rangeselector: {
buttons: [
{
count: 1,
label: '1m',
step: 'month',
stepmode: 'backward'
},
{ step: 'all' }
]
}
rangeslider: { range: ['2017-12-01', '2018-01-05'] }
Plotly.relayout('chart')
})
- czy jako "modeBarButtons" . Poniżej kod który wklejony w okno JS ( https://codepen.io/etpinard/pen/PzWYgj ) umożliwia włączenie rangeselectora (niestety w moim kodzie taki sposób nie działa)
var update = {
title: 'New Title',
xaxis: {
range: ['0', '2'],
rangeselector: {
buttons: [
{
count: 1,
label: '1m',
step: 'month',
stepmode: 'backward'
},
{ step: 'all' }
]
},
rangeslider: { range: ['0', '2'] }
},
}
Plotly.plot('graph', [{
y: [2, 1, 2]
}], {
xaxis: {
}
}, {
modeBarButtons: [[{
name: 'Show slidebar',
click: function(gd) {
Plotly.relayout(gd, update);
}
}]]
});
U mnie to wygląda tak (rozumiem, że muszę dodać czwarty argument Plotly.plot):
var buttons = {
modeBarButtons: [[{
name: 'SlideBar',
click: function (b) {
Plotly.relayout(b, Enable);
}
}]]
}
Plotly.newPlot(chart, data, layout, buttons);
var Enable = {
xaxis: {
type: 'date',
range: ['2017-12-01', '2018-02-01'],
rangeselector: {
buttons: [
{
count: 1,
label: '1m',
step: 'month',
stepmode: 'backward'
},
{ step: 'all' }
]
},
rangeslider: { range: ['2017-12-01', '2018-01-05'] }
}
}
Poszukując rozwiązania, trafiłem na pewien trop, ale nie potrafię znaleźć odpowiedzi na mój problem, może znów czegoś nie widzę: https://github.com/plotly/plotly.js/issues/686
Oczywiście rangeselector to tylko jedna z kilku rzeczy do zmiany w runtime, inne to np zmiana tła wykresu (którego swoją drogą jeszcze nie udało mi się zmienić statycznie). Jednak jeśli załapię metodę to potem będzie łatwiej. Generalnie wiem, że należy używać Plotly.relayout i Plotly.restyle, zamiast Plotly.newPlot :)
Pozdrawiam,