簡體   English   中英

如何調整ggplot密度圖中的x軸?

[英]How to adjust x-axis in ggplot's density plot?

我試圖概述工作日我的數據的每小時頻率。 因此,我將不同的日期壓縮為一天,以便只有時間不同,並添加一個代表星期幾的列作為有序因子。

以下是我的數據摘錄:

my.log <- structure(list(Prorated = structure(c(1339535400, 1339536540, 1339524540, 1339480320, 1339537920, 1339529580, 1339500780, 1339532820, 1339522020, 1339522680, 1339465560, 1339529940, 1339472880, 1339508520, 1339519620, 1339536000, 1339526580, 1339514940, 1339518060, 1339512420, 1339513080, 1339500120, 1339543620, 1339485660, 1339496280, 1339526520, 1339514820, 1339531800, 1339531860, 1339501320), class = c("POSIXct", "POSIXt"), tzone = "%Y-%m-%d %H:%M:%S"), Wday = structure(c(1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 4, 1, 1, 3, 3, 4, 4, 5, 5, 5, 1, 2, 2, 2), .Label = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), class = c("ordered", "factor"))), .Names = c("Prorated", "Wday"), row.names = c(NA, 30), class = "data.frame")

range(my.log$Prorated)
# here (n = 30):
# [1] "2012-06-12 01:46:00" "2012-06-12 23:27:00"
# w/ full data set (n = approx. 75000):
# [1] "2012-06-12 00:00:00" "2012-06-12 23:59:00"

當我現在嘗試使用以下代碼繪制密度圖時......

library("ggplot2")
library("scales")
p <- ggplot(my.log) + theme_bw() +
  geom_density(aes(Prorated, colour=Wday)) +
  scale_color_brewer("weekday", palette="Dark2") +
  scale_x_datetime("", breaks=date_breaks("4 hours"),
    labels=date_format("%H:00")) +
  opts(title="Distribution (KDE)")
print(p)

... 具有兩個數據集的x軸不在00:00開始,而是在凌晨02:00開始,因此整個密度圖移動到第二天。 (我想在這里發布圖片,但由於我是新手,所以我不允許這樣做。你可以在ImageShack找到它)

因此,我的問題: 是否有一個選項告訴qqplot()它應該在00:00開始其密度圖?

我檢查了SO的相關問題 (或分別回答 ),但找不到任何問題。 我想到的唯一選擇是xlim()scale_x_continuous(limits=...) 但據我所知,這兩個都不是正確的。

前者會丟棄數據點(或者因為輸入data.frame的所有數據都已經在正確的范圍內),而后者只會移動視點,因此會在23:59時切斷圖形而不添加這些(現在隱藏)數據點在開始...所以,當我使用

scale_x_datetime("", breaks=date_breaks("4 hours"), labels=date_format("%H:00"),
  limits=c(as.POSIXct("2012-06-12 00:00:00"), as.POSIXct("2012-06-12 23:59:00"))

在上面的代碼中,圖形看起來錯誤/不顯示所有數據。

這是一個時區問題。 請參閱此相關問題: ggplot 0.9.0中scale_datetime()的適當時區參數語法是什么

您可以通過將labels參數更改為function(x) format(x, "%H:00", tz="UTC") (或可能是其他一些適當的時區)來解決此問題。 我不得不更改您的示例數據,因為它具有數據框的POSIXt列的格式錯誤的tzone屬性。

ggplot(my.log) + theme_bw() +
  geom_density(aes(Prorated, colour=Wday)) +
  scale_color_brewer("weekday", palette="Dark2") +
  scale_x_datetime("", breaks=date_breaks("4 hours"),
    labels=function(x) format(x,"%H:00",tz="UTC")) +
  opts(title="Distribution (KDE)")

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM