Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: grafika do sondy
Forum PHP.pl > Forum > Przedszkole
invx
jak generowac grafike w sondzie questionmark.gif mam taki pomysl: Jesli liczba jest wieksza niz dwucyfrowa dziele ja przez tyle o ile miejsc jest wiekasz np 10, i to co zostanie to takiej szerokosci wyswietlam grafike

P.S.
a jak bym chcial wykres kolowy, wiem ze mozna skorzystac z klas xgraph, (czy jakos tak) a jak by tak samemu smile.gif
Wave
Nie lepiej obliczyć całkowitą liczbę głosów i na jej podstawie utworzyć procentowy wykres?? Kołowego do sondy nie polecam, bo to są ogromne klasy.
hwao
Cytat(Wave @ 2005-07-02 17:23:23)
Nie lepiej obliczyć całkowitą liczbę głosów i na jej podstawie utworzyć procentowy wykres??

To jest najelspze rozwiazanie
Cytat
Kołowego do sondy nie polecam, bo to są ogromne klasy.

Nie koniecznie, mozna je wygenerowac np we flashu albo czym kolwiek innym. smile.gif (js)
Diwi
A ja bym do wyświetlenia użył tego
Wykresy są bardzo ładne. Bardzo łatwo je zaimplementować do aplikacji.


Pozdrawiam
Kas
Najlepiej (tzn. najprościej) zrobić wykres słupkowy.
Sumujesz wszystkie głosy. Następnie dla każdej odpowiedzi ustalasz jej udział procentowy. Przyjmujesz, że 1 procent to np. 4 piksele i generujesz grafikę o odpowiedniej szerokości.

Może to zrobić tak...

  1. <?php
  2. $plik = fopen('wynik.txt', 'r');
  3. flock($plik, 1);
  4. fscanf($plik, &#092;"%dt%dt%d\", &$tak, &$nie, &$nie_wiem);
  5. flock($plik, 3);
  6. $suma = $tak + $nie + $nie_wiem;
  7. ?>
  8. Czy podoba Ci się ta strona?
  9. <br><br><br>
  10. <img src=\"./sonda/sonda_01.gif\" width=\"
  11. <?php
  12. printf(&#092;"%.0f\", $tak * 100 * 4 / $suma + 4);
  13. ?>
  14. px\" height=\"14px\">
  15. <br>
  16. Tak <div style=\"text-align: right;\"><?php echo round($tak * 100 / $suma); ?>%</div>
  17. <br>
  18. <img src=\"./sonda/sonda_02.gif\" width=\"
  19. <?php
  20. echo $nie * 100 * 4 / $suma + 4;
  21. ?>
  22. px\" height=\"14px\">
  23. <br>
  24. Nie <div style=\"text-align: right;\"><?php echo round($nie * 100 / $suma); ?>%</div>
  25. <br>
  26. <img src=\"./sonda/sonda_03.gif\" width=\"
  27. <?php
  28. echo $nie_wiem * 100 * 4 / $suma + 4;
  29. ?>
  30. px\" height=\"14px\">
  31. <br>
  32. Nie wiem <div style=\"text-align: right;\"><?php echo round($nie_wiem * 100 / $suma); ?>%</div>
  33. <br><br>
  34. <?php echo(&#092;"Oddano $suma głosów.\"); ?>
id4
Witam

Cytat
Nie lepiej obliczyć całkowitą liczbę głosów i na jej podstawie utworzyć procentowy wykres??

Pozwolicie, że sie nie zgodzę?
Gdyby na podstawie wszystkich głosów obliczyć procentowy udział każdej z nich, to wykres będzie brzydki! Żadne z wyników nie dojdzie do końca osi współrzędnych (jeśli mogę to tak nazwać).

Załóżmy, że będą 2 słupli, razem 9 głosów. Jeden słupek ma 6, kolejny 3 głosy. No i głupia sytuacja, bo wykres jest przewidziany na 9 głosów, a max słupek ma 6! Tak nie może być.

Należy przyjąć, że największa ilość głosów to max wykresu. No i teraz obliczyć stosunek, czyli dla pierwszej wypowiedzi słupek wyniesie 100% (6 głosów), a dla drugiej 50% (3 głosy). Trzeba jeszcze obliczyć współczynnik (ważna rzecz).

Współczynnik to liczba która odpowiada za prawidłowe wyświetlanie. Załóżmy, że nasz max słupek ma 100px. Tak więc współczynnik będzie równy 100(px)/6(głosy)=16,67. Teraz możemy spokojnie i bez obaw obliczyć wysokość kolejnego słupka, tj. 16,67(współczynnik)*3(głosy)=50(px).

Moze to trochę zamieszałem, ale wg. mnie to najlepszy sposób na dobre, ładne i prawidłowe wyświetlenie danych z sondy czy statystyk. Uzyskujemy przez to peną kontrolę nad słupkami, bo w tym obliczeniach jedyną stałą wartością jest wysokość wykresu (założone 100px). Inne rzeczy są już liczone dynamicznie i zawsze wyświetlone są optymalnie do wysokości wykresu.

Zachęcam do testów i oczywiście radzę użyć takich funkcji jak round(), ceil() itp dla zaokrąglania wyników dla graficznych słupków do INT - bo jak przedstawić 0,5 px smile.gif

Sorki za elaborat - starałem się skrócić smile.gif

P.S: Przykład dla wcześniejszych wypowiedzi pokazałby, że biorąc pod uwagę np. 20 odpowiedzi, z łączną suma 100 głosów, to średnio max słupek dochodziłby do 1/5 max wysokości smile.gif
Kas
Można tak - wtedy wykres jest dużo ładniejszy i mniej miarodajny. tongue.gif
Jednym słowem... jak kto lubi.
Chociaż np. na www.onet.pl jest zrobione całkiem ładnie i punktem odniesienia jest suma wszystkich głosów. Oni dali tam takie "puste" słupki jako dopełnienie do 100%.

A co do php/SWF Charts to są bardzo ładne. Chyba sam tego użyję. smile.gif
id4
Cytat(Kas @ 2005-07-02 21:31:40)
wtedy wykres jest dużo ładniejszy i mniej miarodajny.


Mniej miarodajny?questionmark.gif
Kas
Nie masz prówannia do 100%.
Wykres odnosi się do maksymalnej wartości.

Jak masz np. 5 głosów na tak i 10 głosów na nie to masz:
- 100% na nie
- 50% na tak.

A powinno być raczej :
- 66.(6)% na nie
- 33.(3)% na tak.

Chyba dobrze zrozumiałem Twój elaborat. tongue.gif
I wtedy suma procent głosów jest zawsze >= 100%. Poza tym różnica w punktach procentowych jest inna.
id4
Cytat(Kas @ 2005-07-02 21:45:11)
Nie masz prówannia do 100%.
Wykres odnosi się do maksymalne wartości.

Jak masz np. 5 głosów na tak i 10 głosów na nie to masz:
- 100% na nie
- 50% na tak.

A powinno być raczej :
- 66.(6)% na nie
- 33.(3)% na tak.

Chyba dobrze zrozumiałem Twój elaborat.  tongue.gif

Ja pisałem o WYŚWIETLANIU a nie OPISYWANIU smile.gif
Opisać wykres możesz jak chcesz, czy to w % czy w ilości oddanych głosów smile.gif

Mnie głównie chodzi o to, że mój przykład jest na tyle dobry, że bez względu na ilość "słupków" zawsze pokazuje przedział w którym są głosy, od 0 do max ilości głosów - a ten inny sposób przy dużej ilości słupków będzie je pokazywał niedokładnie i brzydko, bo słupki będą bardzo niskie w stosunku do max wysokości wykresu.

P.S. Pytanie w wątku brzmiało o grafikę do sondy, więc raczej o Obliczenie Jak Obliczyć i Wyświetlić - więc opisałem smile.gif A jak zainteresowany to opisze (wykres), to inna rzecz smile.gif
Kas
Nie chcę się zbyt mądrzyć... smile.gif
Ale byłoby jednak super, gdyby rozmiar słupków miał związek z opisem oraz z ilością głosów.

A w opisywanym przypadku masz słupki o szerokości (wysokości):
- x px.
- 1/2 x px.

Powinno być:
- 0.(6)x px.
- 0.(3)x px

Gdzie x to maksymalna szerokość lub wysokość.

Chociaż na upartego można liczyć i od wartości maksymalnej.
Moim (nie) skromnym zdaniem to poprostu sprawa gustu.
A w wypadku bardzo dużej ilości słupków można dać inny przlicznik % -> piksele.

Swoją drogą nasza dyskusja jest mocno bezprzedmiotowa. Ja poprostu uważam, że normalizacja przy wykresie ma zwykle mały sens.
Efekt końcowy wyjdzie identyczny lub bardzo podobny - stosunek długości słupków będzie taki sam.
id4
Cytat(Kas @ 2005-07-02 21:54:55)
Efekt końcowy wyjdzie identyczny lub bardzo podobny.


Znowu się nie zgodzę smile.gif
Zobacz na to: Kliknij.
Takiego efektu nie uzyskasz inaczej niż jak opisałem. Inaczej te słupki nie dojdą do końca - i nie ma tutaj nic wspólnego opisanie tego w prawidłowy sposób.

Faktem jest jednak, że każdy sposób pokaże prawidłowy stosunek - tylko przy dużej ilości i rodzajów głosów wysokość poszczególnch słupków będą niżesz, niż miejsce nad czy obok nich smile.gif

No i nie zgodze się z przelicznikiem % -> px.
Zazwyczaj miejsce na sobdę jest z góry określone, i nie da się na sztywno przydzielić ilości px, bo inaczej będzie wyglądał przelicznik dla 10, a inaczej dla 100 głosów na dany słupek smile.gif
Kas
Co jest lepsze... rewolwer czy pistolet?
Podobna dyskusja. smile.gif

Dla mnie zdecydowanie czytelniejszy jest wykres, gdzie punkt odniesienia to suma wszystkich wartości.
Ale przyznaję, że ten wygląda całkiem ładnie.
id4
Jeśli znajdę trochę czasu jutro to napisze jakąś funkcję do wyświetlania wykresów dla obu przypadków - wtedy to już będzie tylko i wyłącznie kwestia gustu smile.gif
Kas
Do robienia takich wykresów liczonych od sumy mam gotowe.

  1. <?php
  2. $plik = fopen('wynik.txt', 'r');
  3. flock($plik, 1);
  4. fscanf($plik, &#092;"%dt%dt%d\", &$tak, &$nie, &$nie_wiem);
  5. flock($plik, 3);
  6. $suma = $tak + $nie + $nie_wiem;
  7. ?>
  8. Czy podoba Ci się ta strona?
  9. <br><br><br>
  10. <img src=\"./sonda/sonda_01.gif\" width=\"
  11. <?php
  12. printf(&#092;"%.0f\", $tak * 100 * 4 / $suma + 4);
  13. ?>
  14. px\" height=\"14px\">
  15. <br>
  16. Tak <div style=\"text-align: right;\"><?php echo round($tak * 100 / $suma); ?>%</div>
  17. <br>
  18. <img src=\"./sonda/sonda_02.gif\" width=\"
  19. <?php
  20. echo $nie * 100 * 4 / $suma + 4;
  21. ?>
  22. px\" height=\"14px\">
  23. <br>
  24. Nie <div style=\"text-align: right;\"><?php echo round($nie * 100 / $suma); ?>%</div>
  25. <br>
  26. <img src=\"./sonda/sonda_03.gif\" width=\"
  27. <?php
  28. echo $nie_wiem * 100 * 4 / $suma + 4;
  29. ?>
  30. px\" height=\"14px\">
  31. <br>
  32. Nie wiem <div style=\"text-align: right;\"><?php echo round($nie_wiem * 100 / $suma); ?>%</div>
  33. <br><br>
  34. <?php echo(&#092;"Oddano $suma głosów.\"); ?>


Plik wynik.txt

Kod
56    21    57


Mam też całą taką ankietę. Chętnie opublikuję, ale to nic szczególnie odkrywczego.
Nobla pewnie za to nie dostanę. A mogłoby być tak pięknie. biggrin.gif

P.S.
Wszysycy wiedzą, że pistolet jest lepszy. tongue.gif
id4
No i super smile.gif

Spróbuj teraz przetestować ten kod dla wartości:

Kod
3 52 482


A jak starczy Ci czasu to spróbuj go rozwinąć dla większej ilości danych, np:

Kod
3 52 482 53 274 351


Wtedy zrozumiesz, dlaczego staram się naprowadzić Cię na inny sposób wyświetlania (nie opisywania) smile.gif

P.S. Zauważ też, że w moim JPG jest rozpiętość liczb od 57 do 327.

EDIT

Zapomniałem o jednym! Umieść Twój kod w tabeli, np. 300px - bo teraz wynik prezentowany jest na całym ekranie - a sonda raczej jest w jakimś określonym miejscu smile.gif I ma określone wymiary smile.gif
Kas
Przy

Kod
3    52    482


lub

Kod
56    21    999


u mnie całość wygląda całkiem dobrze.
Poza tym procent jest liczony od opowiednio 527 oraz 1076.
W Twoim rozwiązaniu byłoby 482 i 999 - niewielka różnica.

Sonda jest umieszczona w tabeli o szerokości 600 pikseli (cellpadding="5"), więc może mieć maksymalnie 590 pikseli.

Co nie zmienia faktu, że przy normalizacji słupki byłby może trochę ładniejsze. smile.gif
Tak na marginesie to do sporej sondy to rozwiązanie jest bardzo sensowne.
id4
Cytat(Kas @ 2005-07-02 22:39:37)
Co nie zmienia faktu, że przy normalizacji słupki byłby może trochę ładniejsze.  smile.gif

Przede wszystkim dochodziłyby (przynajmniej jeden) do końca wykresu, bardziej dokładnie rysując różnicę pomiędzy samymi odpowiedziami (a nie pomiędzy sumą odpowiedzi). No i takie nieładny fakt: masz 20 odpowiedzi w ankiecie i na każdą z odpowiedzi jest 10 głosów. jaki jest efekt? Jeśli Twoja tabela ma 600px, to każdy słupek ma 30px - mnie tylko i wyłącznie o to chodzi smile.gif

nie jestem grafikiem, ale może uda mi się to zobrazować smile.gif

Kod
TWOJA
|-----               |25%
|-----               |25%
|----                |20%
|------              |30%

MOJA
|----------------    |25%
|----------------    |25%
|------------        |20%
|--------------------|30%


Ato tylko 4 możliwości - dla 10 górny przykład będzie miał na prawdę tylko małe kawałeczki grafik - dla 20 nie wspomnę smile.gif
Kas
Już od dwana rozumiem o co Ci chodzi.
I podtrzymuję...

1) Wygląd to kwestia sporna. O gustach się nie dyskutuje.

2) Ja poprostu przyzwyczaiłem się do "mojego" typu wykresu (prawdopodobnie to źle).

Przyznaję, ze przy tak dużej ankiecie (i tak absurdalnym rozkładzie głosów) Twoje rozwiązań jest dużo ładniejsze.

Swoją drogą to prezentacji danych procentowych świetny może być wykres kołowy np. taki jak ten.
id4
Cytat(Kas @ 2005-07-02 23:03:51)
Swoją drogą to prezentacji danych procentowych świetny może być wykres kołowy np. taki jak ten.

Jak najbardziej - jak tylko są ku temu możliwości - powiedzmy to - zagospodarowania miejsca smile.gif W wykresach kołowych KONIECZNIE musi być zastosowane Twoje rozwiązanie smile.gif - czyli liczenie z sumy.

Kod
|-                   | 5%
|--                  |10%
|----                |20%
|--------            |40%
|---                 |15%
|--                  |10%


Jakkolwiek bym nie kombinował, rażą mnie te dziury na końcu wykresu smile.gif No ale to kwestia gustu smile.gif Wybór należy do zainteresowanych osób.
Kas
Te dziury na końcu wykresu można spokojnie wykorzystać na np. podanie ilości głosów lub wartości procentowej.

A co do gustu i przyzwyczajeń zgadzam się - to należy (i zależy) od zainteresownych osób.
id4
Cytat(Kas @ 2005-07-02 23:40:28)
Te dziury na końcu wykresu można spokojnie wykorzystać na np. podanie ilości głosów lub wartości procentowej.

Ja mam chyba w tym wątku skłonność do nie zgadzania się (co oczywiście nie jest wyrazem niesympatii do forumowiczów) smile.gif

Kod
|-                   | 5%
|--                  |10%
|-----------------   |85%


W przypadku takiego rozłożenia głosów tabela się rozjedzie, ponieważ za najdłuższym słupkiem jest za mało miejsca, by coś zmieścić. A takie ryzyko eliminuje to rozwiązanie z wiadomych względów.

Wykresy należy tak projektować, by żaden układ nie mógł spowodować rozjechania się wykresów itp.
Kas
Przy rozkładzie głosów

- 5%
- 10%
- 85%

nawet bez Twojego rowiązania można zrobić dość ładny wykres.

Oczywiście - warto projektować wszystko (nie tylko wykresy) by nie miało tendencji do rozjeżdzania się.
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.