0

我想要一个带有饼图而不是点的物种 x 样本(两个字符串/因子)散点图。点的大小应与每个样本中物种的丰度相关。这可以通过以下几点轻松完成:

d <- data.frame(Tax=c("A", "B", "C"), Sample=c("01", "02", "03"))
d$A <- abs(rnorm(3, sd=1))
d$B <- abs(rnorm(3, sd=2))
d$size=c(0.1,0.2,0.3)
library(ggplot2)
ggplot(d,aes(x=Tax, y=Sample, size=size)) + geom_point()

用 scatterpie 包的 geom_scatterpie 可以实现用饼图替换点(可在 CRAN 上获得)

但是,这不适用于 x/y 美学中的因素:

library(scatterpie)
ggplot() + geom_scatterpie(aes(x=Tax, y=Sample, r=size), data=d, cols=c("A", "B")) 

Warning:
Removed 6 rows containing non-finite values (stat_pie). 

面板已绘制,但仍为空。请注意,scatterpie 与数字 x/y 美学效果很好:

d <- data.frame(x=c(1,2,3), y=c(1,2,3))
d$A <- abs(rnorm(3, sd=1))
d$B <- abs(rnorm(3, sd=2))
d$size=c(0.1,0.2, 0.3)
ggplot() + geom_scatterpie(aes(x=x, y=y, r=size), data=d, cols=c("A", "B")) + coord_fixed()

如何更改 geom_scatterpie 以接受非数字轴?

4

1 回答 1

1

这应该有效:

d2 <- d %>% 
  mutate(tax_num = as.numeric(as.factor(Tax)), 
         sample_num = as.numeric(as.factor(Sample)))

ggplot() + geom_scatterpie(data=d2, aes(x=tax_num, y=sample_num, r=size), cols=c("A", "B")) + 
  scale_x_continuous(breaks=c(1,2,3), labels=c("A", "B", "C")) + 
  scale_y_continuous(breaks=c(1,2,3), labels=c("01", "02", "03")) + 
  labs(x="Tax", y="Sample") + 
  coord_fixed() 

在此处输入图像描述

于 2021-03-08T18:44:16.123 回答