[英]ggplot2: plotting multiple graphs in the same plot
我嘗試使用ggplot2
在同一圖上繪制多個圖。 任何想法如何做到這一點? 我得到了一個名為draw.data
的函數,該函數在R中用於繪制曲線,並且使用ggplot
。 我想知道是否可以設置為TRUE
來強制ggplot
通過下一次調用draw.data
函數在同一窗口上繪制下一個圖形。
這是代碼:
draw.data <- function(xy){
# Bibliothek für ggplot-Funktion
# Dependencies: > library("ggplot2") must be imported!
x.lab <- "concentration [M]"
y.lab <- "normalised luminescence [%]"
my.data <- data.frame(xy)
my_labels <- parse(text = paste("1E", seq(-10, -4, 1), sep = ""))
# Find max, min and difference
# y.max <- max(my.data$y)
# y.min <- min(my.data$y)
y.max <- 1
y.min <- 0
diff <- y.max - y.min
# Find percentage and apply to new column
my.data$y <- apply(my.data, 1, function(z) ((z["y"] - y.min)/diff)*100)
ggp.temp <- ggplot(my.data, aes(x,y)) +
#geom_point(aes(x = x, y = y, color = as.factor(x))) +
#geom_point(aes(x = x, y = y)) +
#geom_line(aes(x = x, y = y)) +
#geom_line(aes(x = x, y = y, color = as.factor(x))) +
geom_line() +
# Draw 2 lines at 50% and 90% through the y-axis
geom_hline(yintercept = c(50, 90), linetype = "dotted") + # draw dotted horizontal lines at 50 and 90
scale_x_continuous(x.lab, breaks = seq(-10, -4, 1), labels = my_labels) +
labs(title = "Graph", x = x.lab, y = y.lab)
return (ggp.temp)
}
這就是我希望劇情的樣子。
x y
[1,] -10 1.14259527
[2,] -9 1.15024188
[3,] -8 1.10517450
[4,] -7 1.00961311
[5,] -6 0.71238360
[6,] -5 0.20355333
[7,] -4 0.04061895
[8,] -10 1.11022461
[9,] -9 1.11083317
[10,] -8 1.07867942
[11,] -7 0.98422000
[12,] -6 0.73539660
[13,] -5 0.36134577
[14,] -4 0.18124645
[15,] -10 2.13212408
[16,] -9 1.14529425
[17,] -8 1.25102307
[18,] -7 1.16045169
[19,] -6 0.50321380
[20,] -5 0.15422609
[21,] -4 0.10198811
[1,] -10 1.16539392
[2,] -9 1.15855333
[3,] -8 1.11766975
[4,] -7 0.97204379
[5,] -6 0.53504417
[6,] -5 0.17431435
[7,] -4 0.29470416
[8,] -10 1.03683145
[9,] -9 1.07524250
[10,] -8 1.07761291
[11,] -7 0.96401682
[12,] -6 0.78346457
[13,] -5 0.32783725
[14,] -4 0.08103084
[15,] -10 0.81372339
[16,] -9 0.85402909
[17,] -8 0.86584396
[18,] -7 0.80705470
[19,] -6 0.53086151
[20,] -5 0.15711034
[21,] -4 0.11496499
如評論中所述, gpplot
通過在繪圖中添加不同的圖層來工作。 為了實現所需的功能,您應該像這樣調整功能:
draw.data <- function(xy, add = FALSE) {
x.lab <- "concentration [M]"
y.lab <- "normalised luminescence [%]"
my.data <- data.frame(xy)
my_labels <- parse(text = paste("1E", seq(-10, -4, 1), sep = ""))
y.max <- 1
y.min <- 0
diff <- y.max - y.min
my.data$y <- apply(my.data, 1, function(z) ((z["y"] - y.min)/diff)*100)
if (!add) {
ggplot(my.data, aes(x,y)) +
geom_line() +
geom_hline(yintercept = c(50, 90), linetype = "dotted") +
scale_x_continuous(x.lab, breaks = seq(-10, -4, 1),
labels = my_labels) +
labs(title = "Graph", x = x.lab, y = y.lab)
} else {
geom_line(aes(x, y), data = my.data )
}
}
然后,您可以使用以下功能:
bp <- draw.data(dat)
bp + draw.data(dat.new1, TRUE) + draw.data(dat.new2, TRUE)
但是,這是由於缺少未經測試的可重復數據。
您可以更新代碼以將每條新線添加到現有繪圖中。
dat1 <- list(x = 1:10, y = c(100, 100, 90, 70, 45, 35, 30, 25, 20, 20))
dat2 <- list(x = 2:11, y = c(100, 98, 91, 73, 46, 37, 35, 30, 29, 28))
library(ggplot2)
draw.data <- function(xy, obj = ggplot()){
# Bibliothek für ggplot-Funktion
# Dependencies: > library("ggplot2") must be imported!
x.lab <- "concentration [M]"
y.lab <- "normalised luminescence [%]"
my.data <- data.frame(xy)
my_labels <- parse(text = paste("1E", seq(-10, -4, 1), sep = ""))
# Find max, min and difference
# y.max <- max(my.data$y)
# y.min <- min(my.data$y)
y.max <- 1
y.min <- 0
diff <- y.max - y.min
# Find percentage and apply to new column
my.data$y <- apply(my.data, 1, function(z) ((z["y"] - y.min)/diff)*100)
ggp.temp <- obj +
geom_line(data = my.data, aes(x = x, y = y)) +
# Draw 2 lines at 50% and 90% through the y-axis
geom_hline(yintercept = c(50, 90), linetype = "dotted") +
scale_x_continuous(x.lab, breaks = seq(-10, -4, 1),
labels = my_labels) +
labs(title = "Graph", x = x.lab, y = y.lab)
return (ggp.temp)
}
p1 <- draw.data(xy = dat1)
p2 <- draw.data(xy = dat2, obj = p1)
print(p2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.