簡體   English   中英

在geom_tile圖上繪制geom_scatterpie

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM