2017-08-08 9 views
2

xg軸が一連のイベントを表し、y軸がそれらのイベント間の日数を表すggplot2を使用してファセット付きのTチャートを作成しようとしています。 。 x軸はイベント日付でラベル付けする必要がありますが、x軸ティックの間隔はイベント間のリアルタイムに関係なく均一でなければならないため、時系列ではありません。第2変数をggplot2ファセットの軸目盛りにラベルを付ける

ファセット層を追加すると、私は混乱しています。ここではいくつかのサンプルデータがあります:

g <- ggplot(df, aes(x=EventNBR, y=Y)) + 
    geom_point() + 
    geom_line() + 
    facet_wrap(~ Group, scales='free_x') 

Plot should show EventDT along X-axis, not EventNBR

私は成功せずscale_x_discreteするラベルのパラメータを使用しようとしました::

イベントの日付を無視
df <- data.frame(EventDT = as.POSIXct(c("2014-11-22 07:41:00", "2015-02-24 08:10:00", 
            "2015-06-10 13:54:00", "2015-07-11 02:43:00", 
            "2015-08-31 19:08:00", "2014-11-18 14:06:00", 
            "2015-06-09 23:10:00", "2016-02-29 07:55:00", 
            "2016-05-22 04:30:00", "2016-05-25 21:46:00", 
            "2014-12-22 16:19:00", "2015-05-13 16:38:00", 
            "2015-06-01 09:05:00", "2016-02-21 02:30:00", 
            "2016-05-13 01:36:00")), 
      EventNBR = rep(1:5, 3), 
      Group = c(rep('A', 5), rep('B',5), rep('C',5)), 
      Y = c(15.818750, 94.020139, 106.238889, 30.534028, 51.684028, 
        187.670139, 203.377778, 264.364583, 82.857639, 3.719444, 
        169.829861, 142.013194, 18.685417, 264.725694,81.962500)) 

、私はこれを生成することができます

xaxis.ticks <- function(x) { 
    df[which(df$EventNBR) == x] } 

g + scale_x_discrete(labels = xaxis.ticks) 

しかし、私が説明できない方法で間違っているそれは私の目盛のラベルを完全に切り捨てます。

このデータセットでは、EventNBRとEventDTの間に1-1の対応があるため、簡単な解決策が必要なようですが、わかりません。私は痛いほど簡単に見落としていますか?

答えて

1

一般的に、これは前述のように非常に問題のあるものですhereとこれに関するいくつかの他のトピックがあります。

幸いにもあなたの場合は、scales='free_x'を使用しているため可能です。あなたがする必要がどのような

は、あなたが正しいラベルであなたの列にこれらのインデックスを上書きすることができます

df$id <- 1:nrow(df) 

、その後のようなユニークなインデックス列を追加することです。

g <- ggplot(df, aes(x=id, y=Y)) + 
    geom_point() + 
    geom_line() + 
    facet_wrap(~ Group, scales='free_x') 
g + scale_x_continuous(breaks=df$id, labels=df$EventDT) + 
    theme(axis.text.x=element_text(angle=90, vjust=.5)) 

解決法は簡単かもしれませんが、これはあなたの例では機能しています。

また、x軸は数値で離散的ではないため、ラベルは消えているようです。したがって、scale_x_continuousを使用すると、正しいラベルが生成されます。

EDIT:

だから、完全な例は、この

library(ggplot2) 
df <- data.frame(EventDT = as.POSIXct(c("2014-11-22 07:41:00", "2015-02-24 08:10:00", 
             "2015-06-10 13:54:00", "2015-07-11 02:43:00", 
             "2015-08-31 19:08:00", "2014-11-18 14:06:00", 
             "2015-06-09 23:10:00", "2016-02-29 07:55:00", 
             "2016-05-22 04:30:00", "2016-05-25 21:46:00", 
             "2014-12-22 16:19:00", "2015-05-13 16:38:00", 
             "2015-06-01 09:05:00", "2016-02-21 02:30:00", 
             "2016-05-13 01:36:00")), 
       EventNBR = rep(1:5, 3), 
       Group = c(rep('A', 5), rep('B',5), rep('C',5)), 
       Y = c(15.818750, 94.020139, 106.238889, 30.534028, 51.684028, 
         187.670139, 203.377778, 264.364583, 82.857639, 3.719444, 
         169.829861, 142.013194, 18.685417, 264.725694,81.962500)) 

df$id <- 1:nrow(df) 

g <- ggplot(df, aes(x=id, y=Y)) + 
    geom_point() + 
    geom_line() + 
    facet_wrap(~ Group, scales='free_x') 
g + scale_x_continuous(breaks=df$id, labels=df$EventDT) + 
    theme(axis.text.x=element_text(angle=90, vjust=.5)) 

のように見え、次の出力生成:

result

+0

ああ、私は解決策にすぐに話を聞きましたこの。 EventDT列はファセット化されていないが、3つのファセット全体にわたってまっすぐに再現されている。すなわち、グループBおよびCの両方がグループAのEventDTでラベル付けされている。 –

+0

@f_lost私の場合はありません。私は画像と完全な例を追加します。 – drmariod

+0

ありがとう、これは今私のために働く。私は偶然、私に奇妙な行動を起こすために昨日何かを変えたに違いない。 –

関連する問題