1

私は ggplot2 を使用しており、ビンの順序を変更しようとしています。ここにある NY の Stop and Frisk プログラムのデータを使用しています: http://www.nyclu.org/content/stop-and-frisk-data

時刻は整数で指定します (例: 5 = 午前 12:05、355 = 午前 3:55、2100 = 午後 9 時)。

以下を使用して、停止時間のヒストグラムを作成しました

myplot <- ggplot(Stop.and.Frisk.2011) + geom_histogram(aes(x=timestop),binwidth=300)

これにより、ビンが真夜中から午前 3 時、午前 3 時から午前 6 時、午前 6 時から午前 9 時などのかなり良いグラフが得られました。

ただし、最初の 2 つのビン (真夜中 - 午前 3 時と午前 6 時 - 午前 9 時) を最後に移動して、より通常の勤務日をシミュレートしたいと考えています。

ビンの順序を変更する簡単な方法はありますか? ブレーク機能を使用してみましたが、ループバックする方法が見つかりません。

基本的に、ビンを次の順序にする必要があります。

前もって感謝します!

4

2 に答える 2

0

1 つの方法は、 を呼び出す前にデータをビン化することggplotです。cut関数を使用して 3 時間間隔を作成する例を次に示します。

# Load ggplot2 for plotting
library(ggplot2)

# Read in the data
df <- read.csv('SQF 2012.csv', header = TRUE)

# Create intervals every 3 hours based
# on the `timestop` variable
df$intervals <- cut(df$timestop,
                    breaks = c(0, 300, 600,
                               900, 1200, 1500,
                               1800, 2100, 2400))

# Re-order the sequence prior to plotting
df$sequence <- ifelse(df$intervals == '(600,900]', 1, NA)
df$sequence <- ifelse(df$intervals == '(900,1.2e+03]', 2, df$sequence)
df$sequence <- ifelse(df$intervals == '(1.2e+03,1.5e+03]', 3, df$sequence)
df$sequence <- ifelse(df$intervals == '(1.5e+03,1.8e+03]', 4, df$sequence)
df$sequence <- ifelse(df$intervals == '(1.8e+03,2.1e+03]', 5, df$sequence)
df$sequence <- ifelse(df$intervals == '(2.1e+03,2.4e+03]', 6, df$sequence)
df$sequence <- ifelse(df$intervals == '(0,300]', 7, df$sequence)
df$sequence <- ifelse(df$intervals == '(300,600]', 8, df$sequence)
df$sequence <- as.numeric(df$sequence)

# Create the plot
ggplot(df, aes(x = sequence)) +
  geom_histogram(binwidth = 0.5) +
  scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8),
                     labels = c('6AM-9AM', '9AM-12PM', '12PM-3PM', '3PM-6PM',
                                '6PM-9PM', '9PM-12AM', '12AM-3AM', '3AM-6AM')) +
  xlab('Time') +
  ylab('Number\n') + 
  theme(axis.text = element_text(size = rel(1.1))) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  theme(axis.title = element_text(size = rel(1.1), face = 'bold'))

出力

于 2014-10-30T01:11:51.160 に答える
0

これが1つの方法です。0 から 599 までのすべての timestop 値に 2400 を追加しました。このようにして、必要な時間範囲をグラフの最後 (つまり、右側) に移動しました。グラフィックを描いたときに、x 軸を修正しました。

library(data.table)
library(dplyr)

# Read the file
foo <- fread("SQF 2012.csv", header = TRUE, na.strings="NA", colClasses="character")

# Change timestop values
ana <- setDF(foo) %>%
       select(datestop,timestop) %>%
       mutate(timestop = as.numeric(timestop), 
              timestop = ifelse(timestop >= 0 & timestop < 600, 2400 + timestop, timestop))

# Draw the graph
ggplot(data = ana, aes(x = timestop)) +
    geom_histogram() +
    scale_x_continuous(limit = c(600, 3000),
                       breaks = c(600, 900, 1200, 1500,
                                  1800, 2100, 2400, 2700, 3000),
                       labels = c("6:00", "9:00", "12:00", "15:00",
                                  "18:00", "21:00", "24:00", "3:00", "6:00")) +
    xlab("Time")

ここに画像の説明を入力

于 2014-10-30T01:14:57.843 に答える