tôi được hỏi bởi một sinh viên nếu nó đã có thể tái tạo một âm mưu tương tự như hình dưới đây sử dụng R:Thêm hình ảnh tùy chỉnh để geom_polygon điền vào ggplot
Đây là từ this paper....
này loại công cụ không phải là chuyên môn của tôi, nhưng sử dụng đoạn mã sau tôi đã có thể tạo ra các dấu ba chấm CI 95% và vẽ chúng với geom_polygon()
. Tôi đã lấp đầy những hình ảnh bằng hình ảnh tôi chụp từ thư viện phylopic bằng cách sử dụng gói rphylopic
.
#example data/ellipses
set.seed(101)
n <- 1000
x1 <- rnorm(n, mean=2)
y1 <- 1.75 + 0.4*x1 + rnorm(n)
df <- data.frame(x=x1, y=y1, group="A")
x2 <- rnorm(n, mean=8)
y2 <- 0.7*x2 + 2 + rnorm(n)
df <- rbind(df, data.frame(x=x2, y=y2, group="B"))
x3 <- rnorm(n, mean=6)
y3 <- x3 - 5 - rnorm(n)
df <- rbind(df, data.frame(x=x3, y=y3, group="C"))
#calculating ellipses
library(ellipse)
df_ell <- data.frame()
for(g in levels(df$group)){
df_ell <- rbind(df_ell, cbind(as.data.frame(with(df[df$group==g,], ellipse(cor(x, y),
scale=c(sd(x),sd(y)),
centre=c(mean(x),mean(y))))),group=g))
}
#drawing
library(ggplot2)
p <- ggplot(data=df, aes(x=x, y=y,colour=group)) +
#geom_point(size=1.5, alpha=.6) +
geom_polygon(data=df_ell, aes(x=x, y=y,colour=group, fill=group), alpha=0.1, size=1, linetype=1)
### get center points of ellipses
library(dplyr)
ell_center <- df_ell %>% group_by(group) %>% summarise(x=mean(x), y=mean(y))
### animal images
library(rphylopic)
lion <- get_image("e2015ba3-4f7e-4950-9bde-005e8678d77b", size = "512")[[1]]
mouse <- get_image("6b2b98f6-f879-445f-9ac2-2c2563157025", size="512")[[1]]
bug <- get_image("136edfe2-2731-4acd-9a05-907262dd1311", size="512")[[1]]
### overlay images on center points
p + add_phylopic(lion, alpha=0.9, x=ell_center[[1,2]], y=ell_center[[1,3]], ysize=2, color="firebrick1") +
add_phylopic(mouse, alpha=1, x=ell_center[[2,2]], y=ell_center[[2,3]], ysize=2, color="darkgreen") +
add_phylopic(bug, alpha=0.9, x=ell_center[[3,2]], y=ell_center[[3,3]], ysize=2, color="mediumblue") +
theme_bw()
Mà cho những điều sau đây:
này là ok, nhưng những gì tôi thực sự muốn làm là thêm một hình ảnh trực tiếp đến 'điền' lệnh của geom_polygon. Điều này có thể không?
Tôi cho rằng câu trả lời chính thức là "không thể" ([Câu trả lời của Hadley] (http://stackoverflow.com/a/2901210/1900149)). Tuy nhiên, có một câu trả lời gần đây hơn của @baptiste [ở đây] (http://stackoverflow.com/questions/26110160/how-to-apply-cross-hatching-to-a-polygon-using-the-grid-graphical- hệ thống) có thể hữu ích. – tonytonov
Đây không phải là những gì bạn đang yêu cầu, nhưng theo tinh thần của "công cụ phù hợp cho công việc phù hợp": Tôi sẽ tạo biểu đồ cơ bản trong R, với dữ liệu đằng sau nó. Sau đó tôi sẽ sử dụng Photoshop, hoặc nó miễn phí, mã nguồn mở gần tương đương [GIMP] (http://www.gimp.org/). Sau đó tạo các lớp khác nhau và điều chỉnh độ trong của chúng để cho hình bầu dục xuyên qua. –