[英]Time-series histogram
這是D3中的一個版本,模仿@bdemarest使用ggplot2的答案:
此版本使用平鋪的rect元素 。 如果您有一個大型數據集,您可能會從基於像素的熱圖獲得更好的性能。
如果要使用D3計算存儲桶,可以使用d3.nest按天和按值對數據進行分組。 還有d3.layout.histogram ,但是因為你可能想要每天都有均勻間隔的垃圾箱和相同的垃圾桶,所以d3.nest應該足夠了。
一個微妙的考慮因素:我將刻度線放在瓷磚之間的刻度上,以便直觀地指示這些值是如何分箱的。 例如,左下角的桶對應於7月20日800到900之間的所有值(其中7月20日是午夜到午夜的間隔); 至少,這是我從查看你的數據時所假設的。 這比標記rect的中間部分要清楚得多,因為它表示值是浮動而不是舍入。
這是使用R和ggplot2的一種可能的解決方案。
您的數據已准備好粘貼到R控制台:
dat = structure(list(date = structure(c(15541, 15541, 15541, 15541,
15541, 15541, 15541, 15541, 15541, 15541, 15541, 15541, 15541,
15541, 15541, 15541, 15541, 15542, 15542, 15542, 15542, 15542,
15542, 15542, 15542, 15542, 15542, 15542, 15542, 15542, 15542,
15542, 15543, 15543, 15543, 15543, 15543, 15543, 15543, 15543,
15543, 15543, 15543, 15543, 15543, 15543, 15543, 15543, 15543,
15543, 15543, 15544, 15544, 15544, 15544, 15544, 15544, 15544,
15544, 15544, 15544, 15544, 15544, 15544, 15544, 15544, 15544,
15544, 15544, 15544, 15544, 15544, 15545, 15545, 15545, 15545,
15545, 15545, 15545, 15545, 15545, 15545, 15545, 15545, 15545,
15545, 15545, 15545, 15545, 15546, 15546, 15546, 15546, 15546,
15546, 15546, 15546, 15546, 15546, 15546, 15546, 15546, 15546,
15546, 15546, 15546, 15547, 15547, 15547, 15547, 15547, 15547,
15547, 15547, 15547, 15547, 15547, 15547, 15547, 15547, 15547,
15547, 15547, 15547, 15547), class = "Date"), bucket = c(800L,
900L, 1000L, 1100L, 1200L, 1300L, 1400L, 1500L, 1600L, 1700L,
1800L, 1900L, 2000L, 2100L, 2200L, 2300L, 2400L, 800L, 900L,
1000L, 1100L, 1200L, 1300L, 1400L, 1500L, 1600L, 1700L, 1800L,
1900L, 2000L, 2100L, 2200L, 900L, 1000L, 1100L, 1200L, 1300L,
1400L, 1500L, 1600L, 1700L, 1800L, 1900L, 2000L, 2100L, 2200L,
2300L, 2400L, 2500L, 2600L, 2800L, 800L, 900L, 1000L, 1100L,
1200L, 1300L, 1400L, 1500L, 1600L, 1700L, 1800L, 1900L, 2000L,
2100L, 2200L, 2300L, 2400L, 2500L, 2600L, 2700L, 2800L, 800L,
900L, 1000L, 1100L, 1200L, 1300L, 1400L, 1500L, 1600L, 1700L,
1800L, 1900L, 2000L, 2100L, 2200L, 2300L, 2400L, 800L, 900L,
1000L, 1100L, 1200L, 1300L, 1400L, 1500L, 1600L, 1700L, 1800L,
1900L, 2000L, 2100L, 2200L, 2300L, 2400L, 1300L, 1400L, 1500L,
1600L, 1700L, 1800L, 1900L, 2000L, 2100L, 2200L, 2300L, 2400L,
2500L, 2600L, 2700L, 2800L, 2900L, 3000L, 3200L), cnt = c(119L,
123L, 173L, 226L, 284L, 257L, 268L, 244L, 191L, 204L, 187L, 177L,
164L, 125L, 140L, 109L, 103L, 123L, 165L, 237L, 278L, 338L, 306L,
316L, 269L, 271L, 241L, 188L, 174L, 158L, 153L, 132L, 154L, 241L,
246L, 300L, 305L, 301L, 292L, 253L, 251L, 214L, 189L, 179L, 159L,
161L, 144L, 139L, 132L, 136L, 105L, 120L, 156L, 209L, 267L, 299L,
316L, 318L, 307L, 295L, 273L, 283L, 229L, 192L, 193L, 170L, 164L,
154L, 138L, 101L, 115L, 103L, 105L, 156L, 220L, 255L, 308L, 338L,
318L, 255L, 278L, 260L, 235L, 230L, 185L, 145L, 147L, 157L, 109L,
104L, 191L, 201L, 238L, 223L, 229L, 286L, 256L, 240L, 233L, 202L,
180L, 184L, 161L, 125L, 110L, 101L, 132L, 117L, 124L, 154L, 167L,
137L, 169L, 175L, 168L, 188L, 137L, 173L, 164L, 167L, 115L, 116L,
118L, 125L, 104L)), .Names = c("date", "bucket", "cnt"),
class = "data.frame", row.names = c(NA, -125L))
繪圖代碼:
library(ggplot2)
plot_1 = ggplot(dat, aes(x=date, y=bucket, fill=cnt)) +
geom_tile() +
scale_fill_continuous(low="#F7FBFF", high="#2171B5") +
theme_bw()
ggsave("plot_1.png", plot_1, width=6, height=4)
如果在數據中包含零桶值的行,則繪圖可能看起來更好。 然后你可以將
low="#F7FBFF"
改為low="white"
。
將您的數字放在矩陣中並使用'image(mat)'? 看起來就是這樣。 一個網格。 一個柵格。 或者我錯過了什么?
還有一些方法可以使用ggplot,raster和其他可能的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.