Wie kann ich mehr als einen Wert am selben Datum darstellen?

  • Ich versuche, Werte darzustellen, die an verschiedenen Tagen und zu unterschiedlichen Zeiten vorkommen. Ich verwende DateListPlot, aber es werden alle Werte für einen Tag am selben Tag dargestellt. Gibt es eine Möglichkeit, die x-Achse irgendwie zu "erweitern", um die Stunden anzuzeigen? Gibt es so etwas wie ein "TimeListPlot"? Beispiel:

     dateValues={{{2011, 2, 11, 14, 56, 0.}, 107}, {{2011, 2, 11, 14, 57, 0.}, 104}, 
    {{2011, 2, 11, 14, 59, 0.}, 97}, {{2011, 2, 11, 17, 5, 0.}, 96}, 
    {{2011, 2, 11, 17, 6, 0.}, 94}, {{2011, 3, 11, 9, 34, 0.}, 102}, 
    {{2011, 5, 11, 12, 37, 0.}, 100}, {{2011, 5, 11, 12, 38, 0.}, 99}, 
    {{2011, 7, 11, 14, 53, 0.}, 121}, {{2011, 7, 11, 14, 55, 0.}, 106}, 
    {{2011, 7, 11, 14, 56, 0.}, 106}, {{2011, 7, 11, 14, 57, 0.}, 107}, 
    {{2011, 7, 11, 19, 6, 0.}, 111}, {{2011, 8, 11, 18, 58, 0.}, 106}, 
    {{2011, 8, 11, 19, 0, 0.}, 102}, {{2011, 8, 11, 19, 1, 0.}, 103}, 
    {{2011, 9, 11, 17, 42, 0.}, 95}, {{2011, 9, 11, 17, 46, 0.}, 94}, 
    {{2011, 9, 11, 19, 9, 0.}, 102}, {{2011, 10, 11, 19, 5, 0.}, 106}, 
    {{2011, 10, 11, 19, 6, 0.}, 107}, {{2011, 10, 11, 19, 8, 0.}, 97}, 
    {{2011, 11, 11, 11, 48, 0.}, 107}, {{2011, 11, 11, 11, 49, 0.}, 106}, 
    {{2011, 11, 11, 11, 50, 0.}, 106}, {{2011, 11, 11, 11, 51, 0.}, 91}, 
    {{2011, 11, 11, 11, 52, 0.}, 92}, {{2011, 11, 11, 11, 53, 0.}, 123}, 
    {{2011, 11, 11, 11, 54, 0.}, 120}, {{2011, 11, 11, 11, 55, 0.}, 98}}
     

    Dann, wenn Sie es plotten :

     DateListPlot[dateValues]
     

    Wie kann ich mehr als einen Wert am selben Datum darstellen?

    Sie erhalten alles Die ersten 5 Werte in derselben Spalte.

    Versuchen wir, mehr als einen Wert in der "entspannten" Achse zu zeichnen, die @doctor_image erstellt hat:

     dateValues2={{{2011, 2, 11, 14, 56, 0.}, 107, 60, 51}, {{2011, 2, 11, 14, 57, 0.}, 104, 60, 50}, 
    {{2011, 2, 11, 14, 59, 0.}, 97, 60, 46}, {{2011, 2, 11, 17, 5, 0.}, 96, 65, 49}, 
    {{2011, 2, 11, 17, 6, 0.}, 94, 66, 71}, {{2011, 3, 11, 9, 34, 0.}, 102, 66, 51}, 
    {{2011, 5, 11, 12, 37, 0.}, 100, 65, 59}, {{2011, 5, 11, 12, 38, 0.}, 99, 66, 53}, 
    {{2011, 7, 11, 14, 53, 0.}, 121, 83, 44}, {{2011, 7, 11, 14, 55, 0.}, 106, 59, 37}, 
    {{2011, 7, 11, 14, 56, 0.}, 106, 62, 35}, {{2011, 7, 11, 14, 57, 0.}, 107, 69, 50}, 
    {{2011, 7, 11, 19, 6, 0.}, 111, 66, 49}, {{2011, 8, 11, 18, 58, 0.}, 106, 67, 55}, 
    {{2011, 8, 11, 19, 0, 0.}, 102, 64, 50}, {{2011, 8, 11, 19, 1, 0.}, 103, 68, 53}, 
    {{2011, 9, 11, 17, 42, 0.}, 95, 60, 47}, {{2011, 9, 11, 17, 46, 0.}, 94, 58, 43},    
    {{2011, 9, 11, 19, 9, 0.}, 102, 61, 54}, {{2011, 10, 11, 19, 5, 0.}, 106, 69, 49}, 
    {{2011, 10, 11, 19, 6, 0.}, 107, 68, 51}, {{2011, 10, 11, 19, 8, 0.}, 97, 60, 47}, 
    {{2011, 11, 11, 11, 48, 0.}, 107, 68, 53}, {{2011, 11, 11, 11, 49, 0.}, 106, 66, 47}, 
    {{2011, 11, 11, 11, 50, 0.}, 106, 64, 49}, {{2011, 11, 11, 11, 51, 0.}, 91, 71, 77}, 
    {{2011, 11, 11, 11, 52, 0.}, 92, 72, 82}, {{2011, 11, 11, 11, 53, 0.}, 123, 85, 57}, 
    {{2011, 11, 11, 11, 54, 0.}, 120, 82, 62}, {{2011, 11, 11, 11, 55, 0.}, 98, 81, 77}}
     

    Ich habe es geschafft, sie auf einer regulären Grafik zu zeichnen, kann jedoch nicht die "entspannte Achse" verwenden:

     With[{labels = 
    Rotate[DateString@#, (3 \[Pi])/2] & /@ dateValues2[[All, 1]]}, 
    ListPlot[{dateValues2[[All, 2]], dateValues2[[All, 3]], 
    dateValues2[[All, 4]]}, 
    Ticks -> {Transpose[{Range@Length@labels, labels}], Automatic}, 
    Filling -> {1 -> {2}}, Joined -> {False, False, True}]]
     

    Wie kann ich mehr als einen Wert am selben Datum darstellen?

    Dies ist eine visuelle Methode, um Blutdruck und Puls darzustellen. Einen Vorschlag zur Verwendung der "entspannten" Achse?

    29 September 2012
    Mr.Wizard
2 answers
  • Auf diese Weise werden die Datumswerte in regelmäßigen Abständen mit den Datumsangaben als gedrehte Zeichenfolgenbeschriftungen auf der X-Achse dargestellt, ähnlich wie in Excel beschrieben.

     With[{labels = Rotate[DateString@#, (3 \[Pi])/2] & /@ dateValues[[All, 1]]}, 
     ListPlot[dateValues[[All, 2]], 
      Ticks -> {Transpose[{Range@Length@labels, labels}], Automatic},Filling->Axis]]
     

    Wie kann ich mehr als einen Wert am selben Datum darstellen?

    Mit etwas mehr Spielerei ist es möglich, etwas zu bekommen, das versucht spiegeln den korrekten Fluss der Zeitleiste wider. Punkte sind jedoch auf einen Mindestabstand beschränkt.

     (* Ease points that are close to one another apart, 
    by minimum separation MinSeparation * ( Max-Min ) of data  *)
    
    Options[Relax] = {MinSeparation -> 0.02};
    Relax[data_, OptionsPattern[]] := 
     With[{sep = OptionValue@MinSeparation (Max@data - Min@data)}, 
      Flatten[{First@data, First@data + Accumulate[If[# < sep, sep, #] & /@ Differences@data]}]]
     

    Plotten Sie die Werte mit Datumsbezeichnungen:

     With[{labels = Rotate[DateString@#, (3 \[Pi])/2] & /@ dateValues[[All, 1]], 
      softCoords = Relax[AbsoluteTime /@ dateValues[[All, 1]]]}, 
     ListPlot[{softCoords, dateValues[[All, 2]]}\[Transpose], 
      Ticks -> {{softCoords, labels}\[Transpose], Automatic}, 
      Filling -> Axis, AxesOrigin -> {First@softCoords - 10^6, 80}]]
     

    Wie kann ich mehr als einen Wert am selben Datum darstellen?

    Für Ihre überarbeiteten Daten sind dies die Zeichencode:

     With[{labels = 
       Rotate[DateString@#, (3 \[Pi])/2] & /@ dateValues2[[All, 1]], 
      softCoords = Relax[AbsoluteTime /@ dateValues2[[All, 1]]]}, 
     ListPlot[{
     {softCoords, dateValues2[[All, 2]]}\[Transpose], 
     {softCoords, dateValues2[[All, 3]]}\[Transpose], 
     {softCoords, dateValues2[[All, 4]]}\[Transpose]}, 
      Ticks -> {{softCoords, labels}\[Transpose], Automatic}, 
      AxesOrigin -> {First@softCoords - 10^6, 0}, 
      Joined -> {False, False, True}, Filling -> {1 -> {2}}]]
     

    Geben Sie ein Diagramm wie folgt aus:

    Wie kann ich mehr als einen Wert am selben Datum darstellen?

    Relax generiert eine Reihe neuer Koordinaten für die Daten, die getrennt wurden.

    Die neuen Koordinaten bilden dann die Grundlage für das Relaxed-Diagramm, das mit ListPlot erstellt wurde.

    Jeder Datensatz, der einem Datum zugeordnet ist, kann dann als Liste von {in & amp; & 6; Softcoordinate, Wert} Paare (dh {AbsoluteTime, Wert}). Dies wird durch den Ausdruck erreicht:

    {softCoords, dateValues2[[All, 2]]}\[Transpose]

    05 May 2012
    image_doctor
  • DateListPlot verarbeitet Stunden und Minuten korrekt. Ihre Daten erstrecken sich jedoch über mehrere Monate (von Februar bis November), sodass bei dieser Skala ein Unterschied von einer Stunde einfach nicht sichtbar ist Ihre Daten können Monat und Tag ausgetauscht werden. Sie haben den 11. eines jeden Monats. Hinweis: Erster Wert ist Jahr, zweiter Monat und dritter Tag.

    27 April 2012
    Szabolcs