Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana koloru wykresu w zależności od wartości
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Lethys
Witam,

Przerzuciłem się na morris js, aby przedstawić dane z bazy.

Generalnie wszystko działa ale mam problem z dodatkowo opcją, tzn. chcę zmienić kolor konkretnego punktu wykresu gdy action=buy

tak wygląda mój JSON:

  1. [{"longdate":"2014-08-20 18:20:01","price":"1620","action":"buy"},{"longdate":"2014-08-20 18:40:01","price":"1640","action":""},{"longdate":"2014-08-20 19:00:01","price":"1620","action":""}]


A tak kod wykresu:

  1. $.getJSON('results.json', function(day_data) {
  2.  
  3. Morris.Line({
  4. element: 'graph',
  5. data: day_data,
  6. xkey: 'longdate',
  7. ykeys: ['price'],
  8. labels: ['Cena'],
  9. pointSize: 4,
  10. lineColors: function(action) {
  11. if(action == "buy") return "#0da3be";
  12. else if(action == "sell") return "#11ca26";
  13. //else return działa bo pobiera ten kolor
  14. else return "#7c7c7c";
  15. },
  16. hoverCallback: function(index, options, content) {
  17. //var displayDate = "<b>"+changeDateFormat(day_data[index]['clock'])+"</b><br>";
  18. var date = "<b><font color='black'>Data: "+day_data[index]['longdate']+"</font></b><br>";
  19. var param1 = "<font color='"+lineColor[0]+"'>Cena - "+day_data[index]['price']+"</font><br>";
  20. return date+param1;
  21. },
  22. xLabelFormat : function (x) {
  23. return changeDateFormat(x);
  24. }
  25.  
  26.  
  27.  
  28.  
  29. });
  30. });


Else return działa, czyli jest problem z odczytaniem tego actiona.

Teoretycznie powinno działać ale nie działa smile.gif
nospor
Przed chwilą w innym temacie sam pisales, że potrzebujesz zupelnie innej struktury json niż ta co podajesz tutaj. Czyzbys uzywal dwoch roznych skryptow, z ktorych kazdy potrzebuje innej struktury?

poza tym widze tu totalną sprzecznosc....
xkey: 'longdate',
ykeys: ['price'],
labels: ['Cena']

Sie zdecyduj, bo nie chce mi sie wierzyc, ze longdate podaje sie jako tekst, ale juz price jako tablice.

No i co to robi w dziale php? Przecież z php to nie ma żadnego związku. Przenosze
Lethys
Cytat(nospor @ 21.08.2014, 11:54:09 ) *
Przed chwilą w innym temacie sam pisales, że potrzebujesz zupelnie innej struktury json niż ta co podajesz tutaj. Czyzbys uzywal dwoch roznych skryptow, z ktorych kazdy potrzebuje innej struktury?

poza tym widze tu totalną sprzecznosc....
xkey: 'longdate',
ykeys: ['price'],
labels: ['Cena']

Sie zdecyduj, bo nie chce mi sie wierzyc, ze longdate podaje sie jako tekst, ale juz price jako tablice.



Tak w poprzednim temacie potrzebowałem innej struktury, ale przeniosłem się na inna biblioteke i teraz inaczej wygląda Json.

Tak longdate jest zapisane jako tekst, a gry price nie zapisze sie jako tablice, to skrypt nie działa, więc jest tak.


Ale nie z tego powodu zakładałem ten topic, nospor może wiesz czemu nie zmienia mi kolorów? wink.gif
nospor
Cytat
Ale nie z tego powodu zakładałem ten topic, nospor może wiesz czemu nie zmienia mi kolorów?
A z jakiego jak nie z tego? Zalozyles topic bo ci nie dziala. Ja wskazuje wiec na potencjalne bledy. Nie znam tego liba co uzywasz, moge jedynie tylko sie domyslac co tez uczynilem.

edit: skoro w chodzi ci w else return to zobacz jaką wartosc ma ACTION w tej funkcji i bedziesz wiedzial moze cos wiecej. To jest podstawowe debugowanie, ktore powinienies zrobic samemu przed napisananiem na forum
Lethys
Trzeba będzie to prawdopodobnie zrobić za pomoca pętli.

Nadal coś nie działa, przy takim skrypcie nie wyświetla się wykres.

Obecnie tak skrypt wygląda:

  1. $( document ).ready(function() {
  2. var lineColor = ['#7c7c7c','#357ebd'];
  3. var day_data = [];
  4. function changeDateFormat(mydate)
  5. {
  6. var dateDMY = new Date(mydate);
  7. var monthNames = [ "Sty", "Lut", "Mar", "Kwi", "Maj", "Cze",
  8. "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru" ];
  9. var date = dateDMY.getDate();
  10. var month = monthNames[dateDMY.getMonth()];
  11. var year = dateDMY.getFullYear();
  12. var mydate = "";
  13. var seperator = "-";
  14. mydate = mydate.concat(date,seperator,month,seperator,year);
  15. return mydate;
  16. }
  17.  
  18. function drawLine(action){
  19.  
  20. if(!action) return;
  21.  
  22. var color = null;
  23. if(action == "buy") color ="red";
  24. else color = "black";
  25.  
  26. Morris.Line({
  27. element: 'graph',
  28. data: day_data,
  29. action: 'action',
  30. xkey: 'longdate',
  31. ykeys: ['price'],
  32. labels: ['Cena'],
  33. pointSize: 4,
  34. lineColors: function() {
  35. return color;
  36. },
  37. hoverCallback: function(index, options, content) {
  38. //var displayDate = "<b>"+changeDateFormat(day_data[index]['clock'])+"</b><br>";
  39. var date = "<b><font color='black'>Data: "+day_data[index]['longdate']+"</font></b><br>";
  40. var param1 = "<font color='"+lineColor[0]+"'>Cena - "+day_data[index]['price']+"</font><br>";
  41. return date+param1;
  42. },
  43. xLabelFormat : function (x) {
  44. return changeDateFormat(x);
  45. }
  46.  
  47. });
  48. }
  49.  
  50.  
  51. $.getJSON('results.json', function(day_data) {
  52. var l = day_data || [];
  53. for(var i = 0; i < l.length; i++){
  54. drawLine(l[i].action);
  55. }
  56. });
  57.  
  58.  
  59.  
  60. });
  61.  
nospor
Sprawdzales w ogole to co napisalem?
Cytat
edit: skoro w chodzi ci w else return to zobacz jaką wartosc ma ACTION w tej funkcji i bedziesz wiedzial moze cos wiecej. To jest podstawowe debugowanie, ktore powinienies zrobic samemu przed napisananiem na forum


Zas co do nowego skryptu:
Nigdzie nie przypisujesz wartosci dla day_data wiec czemu sie dziwisz ze nie dziala? Czemu w ogole nie sprawdzasz czy zmienne na ktorych operujesz zawierają to co mają zawierac? To taki problem sprawdzic? Zapewniem Cie ze jest to szybciej zrobic nic pisac kolejnego posta na forum...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.