DateHistogram com layout empilhado / percentil
Nov 11 2020
Requisitos
- As barras de cada caixa são empilhadas em 1.
- Rótulos de eixos de Nice Date e suporte máximo para recursos / opções de DateHistogram.
Exemplo
data = Table[RandomDate[], {3}, {10}]
Trama como este, mas com base na data: 233507
Respostas
4 kglr Nov 11 2020 at 17:12
SeedRandom[1]
data1 = RandomChoice[DateRange[{2010, 1, 1}, {2010, 12, 31}, "Day"], 2000];
data2 = RandomChoice[DateRange[{2010, 3, 1}, {2010, 11, 30}, "Day"], 2000];
data3 = RandomChoice[DateRange[{2010, 2, 1}, {2010, 10, 30}, "Day"], 1000];
dh = DateHistogram[{data1, data2, data3},
ChartLayout -> "Stacked", ImageSize -> Medium]
1. Podemos extrair as alturas das barras, modificá-las e usar as alturas modificadas como especificação de altura personalizada no terceiro argumento de DateHistogram:
heights = Reap[DateHistogram[{data1, data2, data3}, Automatic, Sow[#2] &]][[2, 1]];
hl = Transpose[ Normalize[#, Total] & /@ Transpose[heights]];
DateHistogram[{data1, data2, data3},
Automatic, (Last[hl = RotateLeft[hl]] &), ChartLayout -> "Stacked"]
2. Podemos usar um custom ChartElementFunctionque modifica as coordenadas dos retângulos:
ClearAll[assoc, box, cEF]
assoc = Association[Join @@ Values[
GroupBy[Reap[DateHistogram[#, ChartLayout -> "Stacked",
ChartElementFunction -> (ChartElementData["Rectangle"][Sow[#]; ##] &)]][[2, 1]],
First, Thread[# -> (# /. Thread[#[[All, 2, 2]] ->
Normalize[#[[All, 2, 2]], Max]])] &]]] &;
box = assoc[{data1, data2, data3}];
cEF = ChartElementData["Rectangle"][box @ #, ##2] &;
DateHistogram[{data1, data2, data3},
ChartLayout -> "Stacked", ChartElementFunction -> cEF]
3. Podemos pós-processar a DateHistogramsaída produzida com a opção ChartLayout -> "Stacked"de redimensionar as coordenadas verticais dos retângulos:
ClearAll[reScaleRecs, postProcess]
reScaleRecs = Thread[# -> Rectangle @@@
SubsetMap[Rescale, List @@@ #[[All, ;; 2]], {All, All, 2}]] &;
postProcess = # /. Flatten[reScaleRecs /@
GatherBy[Cases[#, _Rectangle, All], #[[1, 1]] &]] &;
postProcess @ dh
Observação: o terceiro método funciona apenas para a função de elemento de gráfico padrão "Rectangle".
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino