[英]Plot geom_scatterpie on a geom_tile plot
我想在geom_tile圖的頂部使用geom_scatterpie
繪制餅圖。 但是,我得到一個錯誤:
Error: Discrete value supplied to continuous scale
這是我無法使用的簡單代碼:
library(ggplot2)
library(scatterpie)
nasafile <- "http://eosweb.larc.nasa.gov/sse/global/text/global_radiation"
nasa <- read.table(file=nasafile, skip=13, header=TRUE)
p <- ggplot(aes(y = Lat , x = Lon), data = nasa )+
geom_tile(aes(fill=Ann)) +
scale_fill_gradientn(colours=brewer.pal('YlOrRd', n=9)) +
theme_bw() +
coord_equal()
plot(p)
這可以工作,但是如果我在上面添加geom_scatterpie
:
首先,要繪制餅圖的數據:
d <- data.frame(x=rnorm(5), y=rnorm(5))
d$A <- abs(rnorm(5, sd=1))
d$B <- abs(rnorm(5, sd=2))
d$C <- abs(rnorm(5, sd=3))
但是當我這樣做時,我得到了錯誤:
p + geom_scatterpie(aes(x=x, y=y), data=d, cols=c("A", "B", "C")) + coord_fixed()
問題是您的geom_tile
使用連續的填充比例,而geom_scatterpie
使用離散的填充比例。 如果將Ann
更改為一個因子,它將起作用。 不理想,但這可行:
nasa$Ann <- as.factor(as.integer(nasa$Ann))
mypalette <- brewer.pal(9, "YlOrRd") # 6 for geom_tile, 3 for geom_scatterpie
p <- ggplot(aes(y = Lat , x = Lon), data = nasa )+
geom_tile(aes(fill=Ann)) +
scale_fill_manual(values = mypalette) +
theme_bw() +
coord_equal()
p
d <- data.frame(x=rnorm(5, 0, 50), y=rnorm(5, 0, 30)) # larger sd
d$A <- abs(rnorm(5, sd=1))
d$B <- abs(rnorm(5, sd=2))
d$C <- abs(rnorm(5, sd=3))
p + geom_scatterpie(aes(x=x, y=y, r = 20), data=d, cols=c("A", "B", "C")) #larger radius
或者,使用size=
而不是fill=
(並且沒有geom_scatterpie
):
p <- ggplot(aes(y = Lat , x = Lon), data = nasa )+
geom_tile(aes(fill=Ann)) +
scale_fill_gradientn(colours=brewer.pal('YlOrRd', n=9)) +
theme_bw() +
coord_equal()
p
d <- data.frame(Lon = c(-100, 0, 100),
Lat = c(-50, 0, 50),
genvar = c(.1, .3, .5))
p + geom_point(data = d, aes(x = Lon, y = Lat, size = genvar),
color = "white")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.