0 votes
in SoSci Survey (dt.) by s133453 (165 points)

Hallo,

ich will ein Diagramm mit 2 Balken erstellen, dass einen zuvor errechneten Wert durch die Antwort des Probanden enthält und der zweite Balken soll einen starren Wert (deutscher Durchschnitt) anzeigen. Ich habe das folgendermaßen versucht:

$hours = value('CO01_01');
$co2_e = 0.17 * $hours;
$co2_durchschnitt = 0.56;

$hours2 = value('CO02_01');
$co2_t = 0.24 * $hours2;

$co2_gesamt = $co2_e + $co2_t ;
replace('%co2_gesamt%', sprintf('%1.1f', $co2_gesamt));

html('

Im betreffenden Jahr lag ihr CO2-Ausstoß bei %co2_gesamt% t CO2. Der deutsche Durchschnitt liegt bei 0.56 t CO2-Ausstoß für Flugreisen. Im nachfolgenden Diagramm haben wir ihren Ausstoß in Bezug zum deutschen Durchschnitt gesetzt.

');
html(
  diagram('bar', 'co2_gesamt', 'co2_durchschnitt', 'value=2', 'width=200')
);

Leider wird mir folgendes angezeigt:
In der Funktion diagram() muss mindestens eine Variablen-Kennung angegeben werden.

1 Answer

+1 vote
by SoSci Survey (305k points)
edited by SoSci Survey

Die Funktion diagram() ist eher ein Relikt als tatsächlich gut nutzbar. Und die Funktion diagram2() unterstützt nur ein Polprofil. Das liegt nicht zuletzt daran, dass diese Funktionen in der Praxis quasi nie zum Einsatz kommen.

Versuchen Sie es bitte einmal mit der Funktion chart(), die bisher aber noch im Teststadium ist:

$img = chart(
  [$co2_durchschnitt, $co2_gesamt],
  ['Durchschnitt', 'Ihr Wert'],
  'bar',
  null, false, false
);
html('<div><img src="'.$img.'"></div>');

Ansonsten kann man mittels Chart.js optisch sehr ansprechende Charts in allen Formen und Farben erstellen. Auch ein Grund, warum die SoSci-internen Funktionen kaum benötigt werden. Die JavaScript-Bibliothek Chart.js ist in SoSci Survey direkt verfügbar:

library('chartJS');

Den JavaScript-Code für das Chart fügen Sie dann einfach als HTML-/JavaScript-Code ein. Die Werte übergeben Sie am einfachsten als Platzhalter.

by s071001 (110 points)
Die Funktion Chart() funktioniert, aber wenn man es so wie hier beschrieben umsetzt erscheint der Chart 2x. Es wird also gleich im ersten Befehlt auch dargestellt. Lässt sich das umgehen und der Chart "nur" als Variable speichern?
by SoSci Survey (305k points)
Guter Punkt, danke für den Hinweis. Ich habe den Code oben entsprechend angepasst. Und zwar kennst die Funktion chart() insgesamt 6 Parameter und der sechste entscheidet, ob sie direkt eine Ausgabe erzeugt oder die URL nur zurückgibt.

Die Funktion wird kaum nachgefragt und genutzt - entsprechend ist sie aus dem o.g. Teststadium noch nicht groß entwachsen und auch nicht in der Anleitung dokumentiert. Es ist aber nicht geplant, die Parameter in näherer Zukunft zu ändern.
by s071001 (110 points)
Danke für die Rückmeldung. Ich bin nun auf die Chart.js Funktion umgestiegen. Hier ist aber das Problem, dass wenn ich die js script in html im php code chunk einbette ein Fehler mir mitteilt, dass die php construct new nicht unterstützt wird. Wie kann ich in diesem Fall die dynamischen Platzhalter verändern? Ich hätte es sonst im php code via replace() gemacht, aber das geht ja in html nicht...Danke!!
by SoSci Survey (305k points)
Sie können das 'new' einfach teilen, wenn Sie es im PHP-Code verwenden möchten:

html('var xyz = ne'.'w Chart()');

Eleganter ist es natürlich, den JS-Code in einen Textbaustein (Darstellung "HTML-Code") auszulagern und mit Platzhaltern zu arbeiten.

text('meinJS', [
  '%value1%' => $datenA,
  '%value2%' => json_encode($datenB)
]);
by s071001 (110 points)
Vielen Dank!! Der Platzhalter war die Lösung. So lässt sich das Ganze dynamisch wunderbar mit chart.js umsetzen.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...