2012-01-02 19 views
5

Czy ktoś wie, czy jest możliwe, aby stworzyć coś takiego w Highcharts:highchart: dodawanie zdjęć do góry wykresu na każdej kolumnie

Highchart question

Chodzi o ikon pogodowych na szczycie. Dodałem je jako "wykres rozproszenia", co jest miłe, więc obrazy/wykres można wyłączyć. Ale chcę, żeby zawsze byli na szczycie. Na przykład: y = 20px lub coś podobnego. Czy można to zrobić z Highchart? Wiem, ustawić swoje dane na "30 celcius", ale to zepsułoby wykres, gdyby temperatura wzrosła do 30 stopni.

Odpowiedz

0

Biorąc pod uwagę, że highcharts to po prostu SVG, zawsze możesz przejść bezpośrednio i manipulować SVG, aby pokazać obrazy, które chcesz, zwykle tylko z CSS. Możesz sprawdzić wykres za pomocą przeglądarki internetowej Chrome i znaleźć elementy, które chcesz nadać stylu. Muszę was ostrzec, że samemu posiadanie niestandardowych highcharts utrudniało aktualizowanie do nowszych wersji.

8

Można użyć sztuczki mające dwa x-osie, jeden z obrazów i offset'ed do górnej części tabeli i jeden z typowych etykiet na dole:

xAxis: [{ 
    offset: -290, 
    tickWidth: 0, 
    lineWidth: 0, 
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 
    labels: { 
     x: 5, 
     useHTML: true, 
     formatter: function() { 
      return '<img src="http://highcharts.com/demo/gfx/sun.png"><img>&nbsp;'; 
     } 
    } 
}, { 
    linkedTo: 0, 
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
}], 

Pełny przykład na jsfiddle

enter image description here

+1

Nie znałem istniejącej opcji 'useHTML'. dużo mnie ocaliło. – raymondralibi

+0

Problem z tym rozwiązaniem polega na tym, że nie można używać danych z 'serii' w formatatorze, w którym ustawiasz obraz (przynajmniej nie znalazłem sposobu na uzyskanie do nich dostępu). –

1

znalazłem rozwiązanie przez przypadek ze względu na kod logowania zapomniałem usunąć. Możesz uzyskać dostęp do danych wewnątrz metody formatyzatorem za pomocą „to”:

... 
plotOptions: { 
    series: { 
     dataLabels: { 
      useHTML: true, 
      enabled: true, 
      x: -50, 
      y: -50, 
      formatter: function(){ 
       console.log(this); 
       return '<span>'+this.y+'</span><br/>'+this.series+'<img src="'+this.key+'" />'; 
      }, 
     } 
    ... 

Kod ten na pewno nie działa, ale pojawia się pomysł, prawda? Mam nadzieję, że to pomoże!

Powiązane problemy