aussentemperatur als Farbe darstellen.

Hallo

ich möchte den Temperaturverlauf eines Tages als Farbe darstellen, dies möchte ich mit den Farben blau > lila > rot darstellen, wenn ich die Farben aber über den Temperatur verlauf von -20 bis +40 verteile ist im 24h Verlauf kaum eine Farbänderung feststellbar.
Kann man da etwas mit einen Logarithmus, Exponential oder Potenzfunktion machen?

Schöne Grüße
Thomas

ich würde eher überlegen, den oberen und unteren Grenzwert für den Farbverlauf dynamisch anzupassen. Die Temperatur-Spanne für den jeweiligen tag kann man sich ja aus dem Wetterforecast holen.

Schon, aber was bewirkt das? Rot würde dann nur in echten Extremfällen angezeigt. Noch weniger als jetzt. Das ist doch nicht was du willst. Das Gegenteil ist doch gewünscht.

mach die Skala kleiner. Ist es denn wichtig ob -20 noch blauer ist als -5? Und ist es wichtig ob +40 noch roter als +30 ist?

Ich würd sogar soweit gehen, dass ich Rot so dimensioniere, dass es auch wirklich manchmal angezeigt wird. An durchschnittlich warmen Tagen zum Beispiel (25°). Wenn man will kann man dann Richtung Orange und Gelb ja weiter machen oder man definiert halt alls wärmer als 25 ist eben Rot und noch roter gehts nicht. Reicht IMO völlig aus.

Toni

ich bin gerade dran, auch sowas zu machen. Mein Tool heisst „heatmap“, und wird in der Molekularbiologie verwendet, um Microarray-Daten zusammenzufassen. Ich will es aber zweckentfremden, um die Werte mehrerer Temperatur-Sensoren darzustellen.

Die Abfragen-Scripts habe ich schon geschrieben, aber es braucht noch etwas Anpassung. Wenn Du gerne mitarbeiten willst, schick mir ein PM.

Hi Thomas,

mir fällt ein, dass ich vor Wochen mal mit einer Darstellungsform für meine Wetterdaten experimentiert habe. Ich bin mir noch nicht im Klaren, ob und wo ich das einsetze.
Vielleicht inspiriert das, bei Bedarf kann ich Dir den Code zusenden.
Das Scipt generiert eine HTML-Matrix (Stunde x Kalendertag), deren Temperatur in Farbwerte umgerechnet werden. Die Berechnung der Farbwerte richtet sich nach den temp-Max-und Min-Werten des betrachtungszeitraumes.
Grundlage ist eine von Martins Schablonen :smiley:

Raketenschnecke.net Temperatur-Matrix Mai 2012.PNG

Geniales Reziprok zum Nick :smiley:

Hier ist doch seine Lösung. :confused:

Hi Rainer,

das kannte ich nicht, mir ging es aber zunächst um die Art der Darstellung, nicht um die Umrechnung von Temperatur nach Farbwert. das hab ich ja auch nur geklaut :smiley:

Hallo,

ist ja auch noch ganz neu und aus meiner Frage am Anfang entstanden.
Tages Grafik sieht nicht schlecht aus, jetzt hatte ich es mit einer Jahres Darstellung Probiert.

Schöne Grüße
Thomas

sorry für die Thread-Exhumierung,

mir ist eben ein Einfall über den Weg gelaufen und hab glatt ne Temperatur -> RGB Farbwert-Funktion draus gemacht.

:eek: NOCH EINE?!?

ja, ich spiele gern :D. Weiterhin haben mir die Farbspektren der bereits im Forum vorgestellten Lösungen nicht gefallen. Gedacht habe ich die Funktion für eine HTML-Heatmap-Darstellung von Temperatur-Meßwerten. Allerdings hab ich noch keine Idee, wo ich das einsetzen kann :smiley:

Features:

[ul]
[li]Farb-Auflösung 0,1K[/li][li]sehr großer Farbraum, dynamisch nach übergebener Tmin und Tmax[/li][li]unterer Farbraum auf Magenta begrenzt, in der Funktion anpassbar[/li][li]Rückgabewert ist ein HTML-fähiger RGB-String "rgb(255,255,255)[/li][/ul]

Live-Beispiel (wird täglich aktualisiert):
http://www.raketenschnecke.net/HighCharts/Data/Temperatur_Matrix_365_24778.htm

Funktion:


function getRGBColor($Tmax, $Tmin, $Tvalue)
{
/*
    Funktion rechnet Temperaturwerte in RGB-Farbwerte um. Übergabeparameter sind Maximal-Temperatur, Minimal-Temperatur und Temperaturwert,
    dessen Farbwert berechnet werden soll. Das Farbband reicht von Rot (max. Temperatur) bis Violett (min Temperatur). Der untere Temperaturbereich geht
    theoretisch auch bis Rot, ist aber auf Magenta begrenzt ($Blauanteil_min).

    Wertebereich Beispiel (ohne Farbbegrenzung für Tmin): Wertebereich 0-100°C, aufgeteilt in 6 Teilbereiche
        1. Teilbereich
           0- 16,6°C (R=255, G=0, B=130) - (R=255, G=0, B=255)
        2. Teilbereich
           16,7- 33,3°C (R=255, G=0, B=255) - (R=0, G=0, B=255)
        3. Teilbereich
           33,4- 50,0°C (R=0, G=0, B=255) - (R=0, G=255, B=255)
        4. Teilbereich
           50,1- 66,7°C (R=0, G=255, B=255) - (R=0, G=255, B=0)
        5. Teilbereich
           66,7- 83,3°C (R=0, G=255, B=0) - (R=255, G=255, B=0)
        6. Teilbereich
           83,3- 100,0°C (R=255, G=255, B=0) - (R=255, G=0, B=0)
*/
     
     
    // Deklarationen
    $Tvalue                 = round($Tvalue, 1);
    $TOffset               = $Tmin * -1;
    $Blauanteil_min     = 190;               // Farbgrenze für Temperatur-Min, Blauanteil 190 => Magenta
    $Tmax                = $Tmax + $TOffset;
    $Tvalue              = $Tvalue + $TOffset;
    $Tmin                = $Tmin + $TOffset;
    $teiler              = ($Tmax - $Tmin)/6;
    $BOffset               = ($Blauanteil_min/255)*100;
    $TeilerOffset        = (($teiler*$BOffset)/100)/6;


    // Teilbereiche / Farbwert berechnen
    if($Tvalue <= ($teiler - ($TeilerOffset*6)))
    {
       // 1. Teilbereich, B berechnen
       $Tvalue      = $Tvalue - ($TeilerOffset*6);
       $B       = round(($Tvalue*($Blauanteil_min-255))/$teiler, 0) + $Blauanteil_min;
       return 'rgb(255,0,'.$B.')';
    }
    elseif(($Tvalue > ($teiler - ($TeilerOffset*6))) && ($Tvalue <= (($teiler*2) - ($TeilerOffset*5))))
    {
       // 2. Teilbereich, R berechnen
       $Tvalue      = $Tvalue - ($teiler - ($TeilerOffset*6));
       $R           = 255 - round(($Tvalue*255)/$teiler, 0);
       return 'rgb('.$R.',0,255)';
    }
    elseif(($Tvalue > ($teiler*2 - ($TeilerOffset*5))) && ($Tvalue <= ($teiler*3 - ($TeilerOffset*4))))
    {
      // 3. Teilbereich, G berechnen
      $Tvalue      = $Tvalue - ($teiler*2 - ($TeilerOffset*5));
      $G       = round(($Tvalue*255)/$teiler, 0);
      return 'rgb(0,'.$G.',255)';
    }
    elseif(($Tvalue > ($teiler*3 - ($TeilerOffset*4))) && ($Tvalue <= ($teiler*4 - ($TeilerOffset*3))))
    {
       // 4. Teilbereich, B berechnen
       $Tvalue      = $Tvalue - ($teiler*3 - ($TeilerOffset*4));
       $B           = 255 - round(($Tvalue*255)/$teiler, 0);
       return 'rgb(0,255,'.$B.')';
    }
    elseif(($Tvalue > ($teiler*4 - ($TeilerOffset*3))) && ($Tvalue <= ($teiler*5 - ($TeilerOffset*2))))
    {
      // 5. Teilbereich, R berechnen
      $Tvalue      = $Tvalue - ($teiler*4 - ($TeilerOffset*3));
      $R           = round(($Tvalue*255)/$teiler, 0);
      return 'rgb('.$R.',255,0)';
    }
    elseif(($Tvalue > ($teiler*5 - ($TeilerOffset*2))) && ($Tvalue <= $teiler*6))
    {
       // 6. Teilbereich, G berechnen
       $Tvalue      = $Tvalue - ($teiler*5 - ($TeilerOffset*2));
       $G       = 255 - round(($Tvalue*255)/$teiler, 0);
       return 'rgb(255,'.$G.',0)';
    }
    return false;
}