2017-04-26 31 views
7

私はggplotを使ってPOSIXct時間のプロットを作成しようとしていますが、軸を逆にしたいのですが、動作させるのが苦労しています。 私はscale_y_datetimeを使っています。実際のアプリケーションでは、この軸でブレークを制御することが重要です。ggplotでの日時の逆転(POSIXctデータ)軸

これは私の問題の例です。最初は通常の順序で、次に軸を逆転しようとしました。私は限界を反転させることにより、Y軸を逆転しようとすると DateTime MinMax Limits

、私はこのように、すべてのブレークやデータを失う:

ggplot(MyData, aes(x=Value, y=Date)) + 
    geom_point() + 
    scale_y_datetime(limits=c(max(MyData$Date),min(MyData$Date))) 

DateTime MaxMin Limits

この生成

# Some random dates and values to plot 
MyData <- 
    structure(list(Date = structure(c(1492979809.99827, 1492602845.68722, 
    1493093428.90318, 1492605578.0691, 1492961342.65056, 1492771976.83545, 
    1493020588.88485, 1493057018.85104, 1492852011.23873, 1492855996.55059 
), class = c("POSIXct", "POSIXt")), Value = c(4.52885504579172, 
    6.0024610790424, 8.96430060034618, 7.06435370026156, 5.08460514713079, 
    3.47828012891114, 6.29844291834161, 0.898315710946918, 1.44857675535604, 
    5.74641009094194)), .Names = c("Date", "Value"), row.names = c(NA, 
    -10L), class = "data.frame") 

library(ggplot2) 
library(scales) 
ggplot(MyData, aes(x=Value, y=Date)) + 
    geom_point() + 
    scale_y_datetime(limits=c(min(MyData$Date),max(MyData$Date))) 

datetime軸を反転する簡単な方法はありますか?ここハドレーウィッカムからこのpostから助けを借りて

+0

私はこれが適切であるかどうかを疑問視したいです視覚化。日付は通常独立変数であるため、(1)ほとんどの人がx軸上でそれらを見ることが予想されます。(2)その場合、逆転は意味をなさないでしょう。おそらく、あなたは「最近の日付からの時間」、_e.g._ 'max(Date) - Date'に変換することで逆転できますか? – neilfws

+1

@neilfws私はあなたに同意しない。私の例は、私が持っていた問題を説明することに過ぎず、私が達成しようとしているものではありません。私の究極の目標は、カレンダースタイルの出力、Y軸に週、X軸に日数を持つものを生成することです。カレンダーを見るときと同じように、上から下に向かって進行する週を示す方が理にかなっています。ありがとう! – David

+0

その場合、私は "ggplot2 calendar"の検索を行います。他の人が考えて対処している問題であることは間違いありません。 – neilfws

答えて

9

を使用すると、逆日時スケールを得ることができる方法である:ここでは

c_trans <- function(a, b, breaks = b$breaks, format = b$format) { 
    a <- as.trans(a) 
    b <- as.trans(b) 

    name <- paste(a$name, b$name, sep = "-") 

    trans <- function(x) a$trans(b$trans(x)) 
    inv <- function(x) b$inverse(a$inverse(x)) 

    trans_new(name, trans, inv, breaks, format) 
} 

rev_date <- c_trans("reverse", "time") 

ggplot(MyData, aes(x=Value, y=Date)) + 
    geom_point() + 
    scale_y_continuous(trans = rev_date) 

はプロットである: enter image description here

+0

リンクと答えをありがとう。これは完璧に動作しています! – David