Ankündigung

Einklappen
Keine Ankündigung bisher.

PHPLOT Legende -> Daten Zuordnung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHPLOT Legende -> Daten Zuordnung

    Guten Morgen,

    verschiedene Auswertungen lasse ich mir als Balkendiagramm mit PHPLOT ausgeben.
    Was mir nicht gelingt, und auch nicht in der Doku zu finden ist:
    Eine Zuordnung der Legende zu den tatsächlichen Daten bei unterschiedlicher Sortierung.

    Beispieldiagramm mit Quelltext (phplot.com)
    Wenn ich z. B. die Werte der Datenarrays absteigend sortieren lasse, stimmen zwar die Daten selbst, aber nicht mehr die dazugehörige Legende überein.
    Beispiel:
    PHP-Code:
    // 40=Engineering, 2=Manufacturing, 4=Administration
    $data = array(array('Jan'4024));
    $plot->SetLegend(array('Engineering''Manufacturing''Administration'));

    // andere Sortierung
    // 40=Engineering, 4=Administration, 2=Manufacturing 
    $data = array(array('Jan'4042));
    $plot->SetLegend(array('Engineering''Manufacturing''Administration'));
    // Daten stimmen nicht mehr mit Legende überein 
    Die Legende sollte aber zwingend an den jeweiligen Wert gebunden sein (40,4,2) und nicht starr wie überall beschrieben, weil sonst in umfangreichen Diagrammen die Legende nicht mit den tatsächlichen Daten übereinstimmt.

    Ich hoffe, ich konnte mein Problem einigermassen verständlich erklären.
    Wie kann man das verbinden?

  • #2
    Die Legende mußt Du imho in der gleichen Reihenfolge angeben, wie die Daten.
    Habe zwar noch nie mit PHPlot gearbeitet, aber so liest sich das für mein verständnis.

    Für Dich heißt das: Wenn Du die Daten tauschst, mußt Du auch die Legenden-Bezeichnungen entsprechend tauschen.
    PHP-Code:
    // 40=Engineering, 4=Administration, 2=Manufacturing
    $data = array(array('Jan'4042)); 
    $plot->SetLegend(array('Engineering' 'Administration''Manufacturing')); 

    Kommentar


    • #3
      Zitat von Arne Drews Beitrag anzeigen
      Für Dich heißt das: Wenn Du die Daten tauschst, mußt Du auch die Legenden-Bezeichnungen entsprechend tauschen.
      Genau da liegt das Problem. Die Daten sind natürlich nicht statisch und eine Kopplung der Reihenfolgen ist bei phplot offensichtlich nicht vorgesehen.
      Wenn ich die Daten innerhalb der einzelnen Bereiche unsortiert ausgebe:
      Code:
      Array
      (
          [0] => Array
              (
                  [0] => benutzerid_1
                  [1] => 6555.330000000003
                  [2] => 7711.41
                  [3] => 829.9100000000001
              )
      
          [1] => Array
              (
                  [0] => benutzerid_2
                  [1] => 3349.3099999999995
                  [2] => 4281.91
                  [3] => 525.9
              )
      )
      entspricht SetLegend(array('Teile', 'Arbeitsleistung', 'Fremdleistung'))

      Lasse ich aber eine absteigende Sortierung über die Bereiche laufen:
      Code:
      Array
      (
          [0] => Array
              (
                  [0] => benutzerid_1
                  [1] => 7711.41
                  [2] => 6555.330000000003
                  [3] => 829.9100000000001
              )
      
          [1] => Array
              (
                  [0] => benutzerid_2
                  [1] => 4281.91
                  [2] => 3349.3099999999995
                  [3] => 525.9
              )
      )
      stimmt die Zuordnung der Legende nicht mehr überein, weil bspw. im Array[0][1] im ersten Beispiel die Legende auf Teile zeigt, und im zweiten Beispiel auf Arbeitsleistung was aber nicht richtig ist.

      Somit müsste die Legende ebenfalls dynamisch für die einzelnen Unterbereiche ausgelegt sein.

      Dazu habe ich weder in der Doku, noch im Netz was gefunden und gehofft, jemand weiß wieder mal mehr als ich

      Kommentar


      • #4
        Dann nimm doch einfach die drei unsortierten Daten des ersten Datensatzes per array_slice() und mach daraus mittels array_combine() ein Key/Value-Pair mit den Legendenbeschriftungen als Keys.

        Den sortierst Du ebenfalls wie die anderen auch und holst Dir über array_keys() die Legendenbeschriftungen in neuer Reihenfolge wieder.


        Nur mal kurz zusammengetippert, müsstest Du noch anpassen, aber der Weg sollte gehen:
        PHP-Code:
        $aData = array(
                array( 
        'benutzerid_1'6555.3300000000037711.41829.9100000000001 ),
                array ( 
        'benutzerid_2'3349.30999999999954281.91525.9 )
            );

        $aLegend_original = array( 'Teile''Arbeitsleistung''Fremdleistung' );
        $aLegend_sorted array_combine$aLegend_originalarray_slice($aData[0], 13) );

        arsort$aLegend_sorted );

        var_dumparray_keys($aLegend_sorted) ); 
        Setzt natürlich immer vorraus, daß das Verhältnis zwischen Teile, Arbeitsleistung und Fremdleistung in allen Datensätzen gleich ist!

        Kommentar

        Lädt...
        X