2017-06-20 9 views
0

灰色の背景のハイライトを、私がプロットに挿入した2つの垂直の破線で一直線にしたい。私は "nd"と "pc"で一直線にハイライトを得ることができますが、私は2つの時点(前/後の治療)の間で背景を整列させたいと思います。ggplotの背景を2つの処理の間でハイライト表示

私は破線で行ったように、ハイライトの境界をx = 1.5と4.5と特定しようとしましたが、結果として"Error: Discrete value supplied to continuous scale"が表示されます。

データ:

> dput(LipCon) 
structure(list(ChillTime = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L), .Label = c("nd", 
"6", "13", "24", "pc"), class = "factor"), Lipid = c(30.85703644, 
21.91554596, 25.19641351, 56.05474457, 43.02224726, 31.93075251, 
21.50358848, 28.74947619, 31.81816769, 30.68972065, 26.63482725, 
39.6305118, 29.90226926, 24.28663997, 23.10808485, 30.8010717, 
23.78336938, 18.92581619, 24.73146066, 22.48963284)), .Names = c("ChillTime", 
"Lipid"), row.names = c(NA, -20L), class = "data.frame") 

次のように私の現在のコードは次のとおりです。

ggplot(LipCon, aes(x = ChillTime, y = Lipid)) + 
    theme_bw() + 
    labs(x = 'Time (weeks)', y = 'Lipid Content (%)') + 
    ggtitle("Lipid Content") + 
    theme(plot.title = element_text(hjust = 0.5, face='bold')) + 
    geom_rect(aes(xmin = 'nd', xmax = 'pc', ymin=-Inf, ymax=Inf), alpha=0.6, fill="grey90") + 
    geom_boxplot() + 
    geom_vline(aes(xintercept=1.5), linetype="dashed") + 
    geom_vline(aes(xintercept=4.5), linetype="dashed") 

Current plot

+1

、私はあなたが見ているものは考えている... – CPak

+0

[Rで素晴らしい再現性の例を作るには?]をお読みください(https://でのstackoverflow .com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Masoud

+0

プロットは今質問に添付されています...私は... – Alex

答えて

1

aesでこのようにそれを記述しないでください:

geom_rect(aes(xmin = 1.5, xmax = 4.5, ymin=-Inf, ymax=Inf), alpha=0.6, fill="grey90")

代わりに、この書き込み:x軸は箱型図のための離散的であるLipConをプロットだスケールに適合するaes力あなたの四角形の使用、

geom_rect(xmin = 1.5, xmax = 4.5, ymin=-Inf, ymax=Inf, alpha=0.6, fill="grey90")

を。 aes部分を省略すると、この制約から解放され、スカラーを使用してx軸上にプロットして、軸上の正確な場所を参照することができます。 geom = "rect"

完全なコード

ggplot(LipCon, aes(x = ChillTime, y = Lipid)) + 
    theme_bw() + 
    labs(x = 'Time (weeks)', y = 'Lipid Content (%)') + 
    ggtitle("Lipid Content") + 
    theme(plot.title = element_text(hjust = 0.5, face='bold')) + 
    geom_rect(xmin = 1.5, xmax = 4.5, ymin=-Inf, ymax=Inf, alpha=0.6, fill="grey90") + 
    geom_boxplot() + 
    geom_vline(aes(xintercept=1.5), linetype="dashed") + 
    geom_vline(aes(xintercept=4.5), linetype="dashed") 

enter image description here

+0

優秀!ありがとう! – Alex

+0

お手伝いいただきありがとうございます。また、スタックオーバーフローを歓迎します。この回答または他の誰かがあなたの問題を解決した場合は、それを合格とマークしてください。 –

0

使用annotate互いの上に代わり、多くの長方形のプロットに1つの四角形を追加します。

矩形レイヤーを最初のプロットレイヤーとして使用するときに離散スケールの代わりに連続的なスケールを作成する問題を回避するには、geom_blankを最初のジオメトリレイヤーとして使用できます。データやプロットなし

ggplot(LipCon, aes(x = ChillTime, y = Lipid)) + 
    geom_blank() + 
    theme_bw() + 
    labs(x = 'Time (weeks)', y = 'Lipid Content (%)') + 
    ggtitle("Lipid Content") + 
    theme(plot.title = element_text(hjust = 0.5, face='bold')) + 
    annotate(geom = "rect", xmin = 1.5, xmax = 4.5, ymin = -Inf, ymax = Inf, alpha = 0.6, fill = "grey90") + 
    geom_boxplot() + 
    geom_vline(aes(xintercept=1.5), linetype="dashed") + 
    geom_vline(aes(xintercept=4.5), linetype="dashed") 

enter image description here

関連する問題