6

RまたはD3.jsのいずれかを使用して、このプレゼンテーション(スライド36〜39)で説明されているような時系列ヒストグラムを作成することは可能ですか?または、バケット化されたデータを時系列として表示するためのより良い方法はありますか?

編集:これは、事前にバケット化されたサンプルデータです。理想的には、D3またはRが単独でバケット化を行います。そして、はい、それが明確でなければ、私はこれを自分で書くことができることを理解しています。これを行うパッケージがすでにあるのかどうか疑問に思っていますが、まだ出会っていません。ありがとう!

4

3 に答える 3

12

これがD3のバージョンで、ggplot2を使用した@bdemarestの回答をモデルにしています。

D3ヒートマップ

このバージョンは、タイル状のrect要素を使用します。大規模なデータセットがある場合は、ピクセルベースのヒートマップからパフォーマンスが向上する可能性があります。

D3を使用してバケットを計算する場合は、d3.nestを使用して、データを日ごとおよび値ごとにグループ化できます。d3.layout.histogramもありますが、おそらく等間隔のビンと毎日同じビンが必要なので、d3.nestで十分です。

微妙な考慮事項の1つ:値がどのようにビニングされるかを視覚的に示すために、タイル間のスケールに目盛りを配置しました。たとえば、左下のバケットは、7月20日の800から900までのすべての値に対応します(7月20日は深夜から深夜までの間隔です)。少なくとも、それは私があなたのデータを見てから推測したことです。これは、値が丸みを帯びているのではなく床になっていることを示しているため、長方形の中央にラベルを付けるよりもわずかに明確です。

于 2012-07-29T23:10:16.773 に答える
11

これは、Rとggplot2を使用した1つの可能な解決策です。

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"

于 2012-07-27T19:19:59.540 に答える
4

数値を行列に入れて「image(mat)」を使用しますか?それがすべてのように見えます。グリッド。ラスター。それとも私は何かが足りないのですか?

ggplot、ラスター、およびおそらく他の方法でこれを行う方法もあります。

于 2012-07-27T15:01:48.750 に答える