13

ここで何が間違っているのですか?毎日24時間の長方形を透明な灰色で交互にシェーディングしようとしています。ただし、forループの最後の長方形のみが描画されます(?!?)forループではなく手動で実行すると、正常に機能します。

これをベクトル化してforループを回避する方法はありますか?(そして、qplotでそれを行うことができますか?)私はggplot2に不慣れで、はい、Hadleyのサイト、本、および例を読みました。

2番目の問題:美学のアルファ設定は、長方形が背景を遮るのを防ぎません。透明性を得る方法は?

dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192))
# (ymin, ymax are computed for this series using min/max(na.rm==TRUE))
ymax <- 5.0
ymin <- 0.0
p <- ggplot(dat, aes(x=my_x_series,alpha=0.9)) 
alternate_daily_bars_xmin <- c(4,52,100,148)

for (shade_xmin in alternate_daily_bars_xmin) {
    shade_xmax <- min(shade_xmin+24, 192) # clamp at end of x-range
    p <- p + geom_rect(aes(alpha=0.5,xmin=shade_xmin,xmax=shade_xmax,ymin=ymin,ymax=ymax), fill='gray80')
}
p <- p + geom_point(aes(y=my_y_series))
p
4

1 に答える 1

28

四角形をプロットするには、各行に 1 つの四角形の座標が含まれるデータ フレームを作成します。この構造は、長方形だけでなく、すべての多角形で機能します。これがわかれば、ループを回避するのは簡単です。

次に、変数を美学にマッピングするかどうかに注意してください。あなたの場合、alpha希望する値に設定する必要があるため、設定の一部にはなりませんaes()

library(ggplot2)

dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192))
rect_left <- c(4,52,100,148)
rectangles <- data.frame(
  xmin = rect_left,
  xmax = rect_left + 24,
  ymin = 0,
  ymax = 5
)

ggplot() +
  geom_rect(data=rectangles, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), 
            fill='gray80', alpha=0.8) +
  geom_point(data=dat, aes(x=my_x_series, y=my_y_series))

ここに画像の説明を入力

于 2012-05-12T17:02:11.310 に答える