我想對ggplot中的區域進行著色,但我不想手動告訴geom_rect()在哪里停止,哪里開始。我的資料會發生變化,而且我總是想根據一個條件對幾個區域進行著色。
這里舉個例子,條件是 "負":
library("ggplot2")
set.seed(3)
plotdata <- data. frame(somevalue = rnorm(10)。 指標= 0 ,計數器= 1。 10)
plotdata[plotdata$somevalue < 0,]$指標<- 1
plotdata
plotranges <- data. frame(from = c(1。 4,9)。 到= c(2。 4,9))
ggplot()
geom_line(data = plotdata, aes(x = counter, y = somevalue))
geom_rect(data = plotranges, aes(xmin =從- 1, xmax = to, ymin = -Inf。 ymax = Inf), alpha = 0. 4)
但是我的問題是,可以這么說,set.seed()引數發生了變化,我想仍然自動生成繪圖,而不用手動指定陰影的最小和最大值。有沒有一種方法(也許不用geom_rect(),而是用geom_bar()?)來直接根據我的指標變數繪制陰影?
編輯:這是我自己的最佳嘗試,你可以看到不是很好:
ggplot(data = plotdata。 aes(x = counter, y = somevalue)) = somevalue)) geom_line() geom_line
geom_bar(aes(y = indicator*max(somevalue))。 stat= "identity")
uj5u.com熱心網友回復:
你可以使用stat_summary()來計算你的指標的運行極端值。在下面的代碼中,data.table::rleid()按指標的運行情況將資料分組。在摘要層中,y并沒有真正做什么,所以我們用它來存盤你的資料點的解析度,然后我們再用它來抵消xmin/xmax引數。after_stat()函式被用來在計算范圍之后訪問計算的變數。
library("ggplot2")
plotdata <- data. frame(somevalue = rnorm(10)。 counter = 1。 10)
plotdata$指標<- 作為。 numeric(plotdata$somevalue < 0)
ggplot(plotdata, aes(counter。 somevalue))
stat_summary()
geom = "rect",
aes(group = data. table::rleid(indicator),
xmin = after_stat(xmin - y * 0。 5),
xmax = after_stat(xmax y * 0。 5),
alpha = I((指標) * 0。 4),
y =解析度(計數器)),/span>
fun.min = min, fun. max = max,。
方向 = "y"。 ymin = -Inf。 ymax = Inf
)
geom_line()

創建于2021-09-14,由reprex包(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/318912.html
標籤:
