【问题标题】:Plot geom_scatterpie on a geom_tile plot在 geom_tile 图上绘制 geom_scatterpie
【发布时间】:2017-08-04 10:22:50
【问题描述】:

我想在 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()

【问题讨论】:

    标签: r plot ggplot2 pie-chart tile


    【解决方案1】:

    问题是您的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")
    

    【讨论】:

    • 感谢您的回答。情节失去了分辨率,但我认为它回答了如何在此处使用 geom_scatterpie 的问题。如果您知道绘制此地图的更好方法,包括饼图,您介意发布这个问题吗?再次感谢。
    • 老实说,我喜欢你的地图的高分辨率版本,但不喜欢分散的地图。您要添加的数据的性质是什么?
    • 它是世界不同人群中遗传变异的频率。我想重现这个图:journals.plos.org/plosgenetics/article?id=10.1371/…
    • 诀窍是使用其他比例,而不是填充。由于饼图中只有两个类别,您能否将遗传变异表示为总数的百分比,以便将变量减少到一个数字?请参阅上面的修改。
    • AFAIK 您不能将 coord_polar 用于多个饼图。除了我建议的较低分辨率的方法外,我不知道其他方法(当然这并不意味着不可能......)
    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多