2013-03-07 14 views
19

Pracuję z Highchart. Mam wiele wykresów serii, w których każda seria ma własną oś y.Highchart - pokaż/ukryj oś Y bez ukrywania serii

pretty much like this one (jsfiddle)

gdy klikamy na pozycję legendy dla serii, ukrywa go i związana oś y (używając showEmpty:false pomógł ukrywa również nazwa osi)

Co jestem próbując osiągnąć, ukrywa się oś Y danej serii, nie ukrywając samej serii.

starałem się ukryć, modyfikując właściwość showAxis tak:

serie.yAxis.showAxis = false; 

ale to nie działa. Ktoś wie, jak powinienem zrobić?

EDYCJA: Udało mi się edytować tekst, więc mogę usunąć tytuł osi, ustawiając tekst na wartość null, ale nie jest to wystarczające, aby ukryć całą oś i jej wartości.

oto co zrobiłem, aby edytować tekst:

serie.yAxis.axisTitle.attr({ 
      text: null 
     }); 
+0

Nie ma oficjalnego sposobu na ukrycie osi. Wysłałem [propozycję funkcji i możesz na nią zagłosować] (http://highcharts.uservoice.com/forums/55896-general/suggestions/5164818-control-axis-visibility-show-hide-toggle-axes). –

Odpowiedz

45

Highcharts 4.1.9+

Od 4.1.9, istnieje możliwość Axis.visible które mogą być używane, aby pokazać/ukryć oś, demo: http://jsfiddle.net/3sembmfo/36/

Starsze wersje Highcharts

Jest to nowa funkcja dla Highcharts 3.0 - która pozwala aktualizować osie w czasie rzeczywistym: chart.yAxis[0].update(object) - ponieważ obiekt ma takie same opcje jak przy tworzeniu wykresu. Na przykład:

 chart.yAxis[0].update({ 
      labels: { 
       enabled: false 
      }, 
      title: { 
       text: null 
      } 
     }); 

I jsFiddle: http://jsfiddle.net/39xBU/2/

EDIT:

skorzystać z poniższego fragmentu kodu, aby ukryć/oś pokaz tylko nazywając axis.hide() i axis.show(). Demo na żywo: http://jsfiddle.net/39xBU/183/

(function (HC) { 
    var UNDEFINED; 
    HC.wrap(HC.Axis.prototype, 'render', function (p) { 
     if (typeof this.visible === 'undefined') { 
      this.visible = true; 
     } 
     if(this.visible) { 
      this.min = this.prevMin || this.min; 
      this.max = this.prevMax || this.max; 
     } else { 
      this.prevMin = this.min; 
      this.prevMax = this.max; 
      this.min = UNDEFINED; 
      this.max = UNDEFINED; 
     } 

     this.hasData = this.visible; 

     p.call(this); 
    }); 

    HC.Axis.prototype.hide = function() { 
     this.visible = false; 
     this.render(); 

     HC.each(this.plotLinesAndBands, function (plotLine) { 
      plotLine.render(); 
     }); 
    }; 

    HC.Axis.prototype.show = function() { 
     this.visible = true; 
     this.render(); 

     HC.each(this.plotLinesAndBands, function (plotLine) { 
      plotLine.render(); 
     }); 
    }; 
})(Highcharts); 
+0

wydaje się dokładnie to! Spróbuję tego popołudnia. dzięki – Guian

+0

@ Paweł: Inni wysłali różne [inne metody] (http://stackoverflow.com/questions/10877927/hide-axis-and-gridlines-highcharts), aby ukryć topory. To sprawia, że ​​mylące jest, jak prawidłowo to zrobić. Byłoby wspaniale, gdyby HighCharts zaimplementował [prostą funkcję do przełączania widoczności osi] (http://highcharts.uservoice.com/forums/55896-general/suggestions/5164818-control-axis-visibility-show-hide-toggle-axes). (Również twoja odpowiedź nie ukrywa tyknięć - zobacz [przykład, który robi] (http://jsfiddle.net/39xBU/55/)). –

+0

Czy rozwiązanie z aktualizacją nie jest już łatwe? Mój przykład nie ukryje plotLines, plotBands itp., Ale powinno być tak proste, jak dodanie opcji, które trzeba ukryć. –

Powiązane problemy