2017-06-22 6 views
0

Ich habe eine gemischte Grafik, die ich für meinen Datensatz automatisch aus einer Tabelle mit Arbeitswochen im Vergleich zu erwarteten Anzahl (Balken) und zwei projizierten Beispielen (Zeilen) aktualisieren möchte. Wie aktualisiere ich @data automatisch für das Diagramm, damit es nicht manuell eingegeben werden muss?Wie kann ich meinen GD :: Graph automatisch aktualisieren?

Hier ist, woran ich gearbeitet habe: (Um das Beispiel zu erleichtern, ist die Tabelle die Daten für die erste Zeile mit "W25" ... und die dritte Zeile, alias erste Zeile, wo die letzte Zahl ist 6.4 ich später mit den anderen beschäftigen würde und sie für jetzt hartkodierte verlassen)

Beispiel der Tabelle, die auf der Webseite hergestellt wird..

print "<p>\n"; 
print "<TABLE BORDER=1>\n"; 
print "<caption>Projected Weekly Output</caption>\n"; 
print "<TR><TH>WW<TH>Wafers\n"; 
foreach $ww (sort keys %ww_proj_hash) 
{ 
$qty_outs = $ww_proj_hash{$ww}; 
print "<TR><TD>$ww <TD align=center>$qty_outs\n"; 
} 
print "</TABLE><p>\n"; 

$ ww Reihe 1 und $ qty_outs Zeile 3 erzeugt sehr ähnliche Ergebnisse wie unten beschrieben.

my @data = (
    [ "W25", "W26", "W27", "W28", "W29", "W30", "W31", "W32", "W33", "W34", "W35"], 
    [  1,   2,  2.8, 3.6,  4,   5,  5.5,  6, 7, 7.5, 8 ], 
    [  1,   2,  2.8, 3.6,  4.4,   5.6,  6.4    ], 
    [  1,  1.95,  2.7, 3.4, 3.7,   4.7,  5,  5.5  ], 
); 


my $graphmixed = GD::Graph::mixed->new (500,350); 

$graphmixed->set(
    x_label   => 'X Label', 
    y_label   => 'Y label', 
    title   => 'Projected Supply vs. Request', 

    t_margin  => 5, 
    b_margin  => 2, 
    l_margin  => 5, 
    r_margin  => 5, 

    y_min_value  => 0, 
    y_max_value  => 8, 
    y_tick_number => 8, 
    y_label_skip => 3, 
    cumulate  => 1, 

    types   => [qw(bars lines lines)], 
    dclrs   => [qw(#4f81bd #98B954 #BE4B57)], 
    borderclrs  => [qw(black)], 
    fgclr   => black, 
    textclr   => black, 
    labelclr  => black, 
    axislabelclr => black, 

    y_long_ticks  => 1, 
    line_width  => 4, 
    bar_spacing  => 10, 
    transparent  => 0, 
) or warn $graphmixed->error; 


$tmp_trend_file = 'graphmixed.png'; 
open(IMG, ">$tmp_trend_file") or die $!; 
binmode IMG; 
print IMG $graphmixed->plot(\@data)->png(); 
close IMG; 
print "<p><img src=$tmp_trend_file border=1><p>\n"; 
+1

Es klingt wie Sie Wahrscheinlich möchten Sie tatsächlich eine JavaScript-Bibliothek verwenden, zB Highcharts, D3, Plotly usw. –

+0

Was meinen Sie mit "Wie aktualisiere ich @data automatisch für das Diagramm, damit es nicht manuell eingegeben werden muss? " - Meinst du nur, du willst, dass das Datenfeld mit den gleichen Werten ausgefüllt wird, die du in die HTML-Tabelle eingibst, anstatt sie hart zu codieren? –

Antwort

1

Ich erwarte nicht viele Stimmen dafür, aber der einfachste Weg ist es, ein meta Element im Kopf der HTML-ähnliche

<meta http-equiv="refresh" content="10" /> 

Hierdurch wird der Browser hinzufügen, um die Seite zu aktualisieren nach der Anzahl der Sekunden in der content Attribut, so wird Ihr Server-Code ausgeführt und senden Sie eine neue Seite an den Browser

Es ist entmutigt, weil es schlechte UI-Design ist, um die Seite unerwartet zu aktualisieren, wenn der Benutzer eingeben kann, aber es klingt wie das ist was Sie beabsichtigen,

Wenn Sie diese „richtig“ machen wollen, und vielleicht die Seite nur aktualisieren, wenn sich die Daten ändern, dann müssen Sie einige AJAX-Code schreiben, um die Anzeige zu aktualisieren weniger disruptively

Verwandte Themen