Ich versuche, eine DateListBarChart
Funktion, die datierte Daten annimmt und ein Balkendiagramm mit denselben Platzierungen ausgibt wie DateListPlot
. Es ist wichtig, dass sie die Daten in der gleichen horizontalen Position darstellen, wenn sie die gleichen Daten erhalten, so dass sie mit Show
. Ich finde es schwierig, die Einstellungen für BarSpacing
rechts, damit sich der horizontale Bereich des Diagramms nicht ändert und die Balken im Wesentlichen an der gleichen Stelle bleiben.
Es ist mir nicht gelungen, die korrekte Skalierung abzuleiten, so dass BarSpacing->{0.2,0.3}
führt dazu, dass 20 % der für diese Stabgruppe verfügbaren Länge der x-Achse für die Abstände zwischen den Stäben dieser Gruppe und 30 % für die Abstände zwischen den Stabgruppen verwendet werden. Aus technischen Gründen mache ich dies, indem ich Dinge an RectangleChart
. Laut der Dokumentation, BarSpacing
wird als absolute Einheit in RectangleChart
. Natürlich müssen die absoluten Größen der Lücken kleiner sein, wenn es mehr Serien gibt, und die Balken müssen schmaler sein.
Einige Beispiele:
arList = FoldList[0.9 #1 + #2 &, 0.01, RandomReal[NormalDistribution[0, 1], 24]]
{0.01, 0.334557, 2.02709, 1.1878, 1.9009, 3.08604, 2.36652, 3.04111,
3.32364, 3.22662, 3.12626, 2.59118, 1.69334, 1.21069, 0.23171,
0.689415, -0.852649, -0.124624, 0.58604, -0.481886, 0.221074,
-0.300329, 2.36137, 0.427789, -1.47747}
dists = RandomChoice[{3, 4}, Length[arList]]
{4, 4, 4, 3, 4, 3, 4, 3, 4, 4, 3, 4, 4, 3, 4, 4, 4, 4, 3, 4, 3, 3, 3, 3, 3}
Ergebnisse in:
RectangleChart[Transpose[{dists - 0 - 0/2, arList}],
PlotRange -> {{0, 100}, {-2, 4}}, ChartStyle -> EdgeForm[None],
Frame -> True, GridLines -> Automatic, BarSpacing -> {0, 0}]
RectangleChart[Transpose[{dists - 0.7 - 0.5/2, arList}],
PlotRange -> {{0, 100}, {-2, 4}}, ChartStyle -> EdgeForm[None],
Frame -> True, GridLines -> Automatic, BarSpacing -> {0.7, 0.5}]
Beachten Sie, dass die Daten nicht den gleichen Abstand entlang der x-Achse haben wie im vorherigen Beispiel.
Noch unübersichtlicher wird es, wenn Sie versuchen, mehrere Serien in einem Diagramm darzustellen (wie in diesem Beispiel, um es zu illustrieren).
RectangleChart[
Transpose[{{dists - i/2 - j/2, arList}, {dists - i/2 - j/2,
arList}}, {2, 3, 1}], PlotRange -> {{0, 180}, {-2, 4}},
ChartStyle -> EdgeForm[None], Frame -> True, Ticks -> None,
GridLines -> Automatic, BarSpacing -> {i, j}]
Ich habe lange versucht, die richtige Formel zu finden, damit die BarSpacing
Einstellungen für die benutzerdefinierte Funktion (hier nicht zu sehen) führen zu den richtigen Abständen und Balkenbreiten, so dass sich der horizontale Plotbereich nicht ändert, wenn die BarSpacing
tut.
Was übersehe ich?
EDIT: Als Antwort auf belisarius, ist dies ein Beispiel dafür, wo ich hin will. Es funktioniert, irgendwie (die Balken sind nicht ganz in Ausrichtung mit der Linie, aber das ist wahrscheinlich die Daten, die ich verwende), aber die Fälle mit gestapelten Balken nicht mit den Balken zu plotten, wo sie sein sollten, wie jede Art von Balkendiagramm auf seine eigene, wo es mehrere Serien. (Ich bin ziemlich stolz auf den Algorithmus zur Platzierung der Datumsbeschriftung: die Verantwortlichen bei der Arbeit wollen diesen Look nicht aufgeben).
Und hier ist eine, die einfach nicht funktioniert. Die Daten sollten den horizontalen Bereich ausfüllen. (Die unterschiedlich breiten Balken sind beabsichtigt - es handelt sich um eine Kombination aus jährlichen und vierteljährlichen Daten).
EDIT 2
Ich erinnere mich, warum ich nicht Filling
in einem DateListPlot
um die Balken wie in Mike Honeychurchs Paket zu zeichnen - wenn Sie etwas anderes als sehr dünne Balken haben, endet es damit, dass die Oberkante an der falschen Stelle ist.
DateListPlot[{dateARList},
PlotStyle -> {AbsolutePointSize[6], Yellow}, Filling -> {1 -> 0},
FillingStyle -> {1 -> {{AbsoluteThickness[12], Darker[Red, 0.25]}}},
PlotRange -> All]