R 多个馅饼,带有散馅饼或GG力

R 多个馅饼,带有散馅饼或GG力,r,ggplot2,ggforce,scatterpie,R,Ggplot2,Ggforce,Scatterpie,我试图在一张图片上绘制多个图表。我想使用自定义注释来打印光栅图像。但是现在我甚至不能得到多个图表 最终,我想要6个馅饼在图像上方的不同点上绘制。imX和imY给出了PIE在图像上的位置坐标 head(wholebody_cutLH_wide_t[c(1,2,102,103,104)]) Acidobacteriaceae Actinomycetaceae imX imY radius 1 0.000000e+00 7.665687e-05 2.00 5.5 0.5 2

我试图在一张图片上绘制多个图表。我想使用自定义注释来打印光栅图像。但是现在我甚至不能得到多个图表

最终,我想要6个馅饼在图像上方的不同点上绘制。imX和imY给出了PIE在图像上的位置坐标

head(wholebody_cutLH_wide_t[c(1,2,102,103,104)])
Acidobacteriaceae Actinomycetaceae  imX imY radius
1      0.000000e+00     7.665687e-05 2.00 5.5    0.5
2      0.000000e+00     4.580237e-04 1.50 1.0    0.5
3      0.000000e+00     4.112573e-04 1.75 2.0    0.5
4      6.431473e-04     3.856008e-02 0.30 1.0    0.5
5      0.000000e+00     3.013013e-04 1.50 4.8    0.5
6      3.399756e-05     1.372986e-02 1.50 5.2    0.5
下面是我对scatterpie的尝试:

现在我的错误是:

Error: Only strings can be converted to symbols
以下是我对dplyr和ggforce的尝试:

我的错误是:

Error in ggplot(dat_pies) + geom_arc_bar(aes(x0 = imX, y0 = imY, r0 = 0,  : 
could not find function "+<-"
这两种方法中的任何一种都会很有帮助。
感谢您的第一次尝试,您应该使用:

ggplot(wholebody_cutLH_wide_t) +
  geom_scatterpie(aes(x=imX, y=imY,r=radius),
     data=wholebody_cutLH_wide_t,
     cols=colnames(wholebody_cutLH_wide_t)[1:2],
     color=NA, alpha=.8)

看起来您实际上并没有根据数据调整代码。下面是修复的ggforce示例:

wholebody_cutLH_wide_t <- read.table(text = "Acidobacteriaceae Actinomycetaceae  imX imY radius
      0.000000e+00     7.665687e-05 2.00 5.5    0.5
      0.000000e+00     4.580237e-04 1.50 1.0    0.5
      0.000000e+00     4.112573e-04 1.75 2.0    0.5
      6.431473e-04     3.856008e-02 0.30 1.0    0.5
      0.000000e+00     3.013013e-04 1.50 4.8    0.5
      3.399756e-05     1.372986e-02 1.50 5.2    0.5", header = TRUE)

library(tidyr)
library(dplyr)
library(ggforce)

# convert to long format, add a grouping variable to keep track of which pies go together
wholebody_cutLH_long <- mutate(wholebody_cutLH_wide_t, group=letters[1:6]) %>%
  gather(type, amount, -imX, -imY, -radius, -group)

dat_pies<-left_join(wholebody_cutLH_long,
                    wholebody_cutLH_long %>%
                      group_by(group) %>%
                      summarize(amount_total = sum(amount))) %>%
  group_by(group) %>%
  mutate(end_angle = 2*pi*cumsum(amount)/amount_total,
         start_angle = lag(end_angle, default = 0))

# now draw
ggplot(dat_pies) + 
  geom_arc_bar(aes(x0 = imX, y0 = imY, r0 = 0, r = radius,
                   start = start_angle, end = end_angle, fill = type)) +
  coord_fixed()

谢谢,太好了。我改变了cols,然后我把半径改为0.02,这样它们就不会重叠太多,并试图去掉图例,现在我得到了一个新的错误。我编辑了我的原始帖子。@user2814482为什么将col更改为NA???你应该使用cols=colnameswholebody\u cutLH\u wide\u t[1:2]!哎呀,我的错。我试着把颜色弄对,把cols错当成col?但“缩放颜色”手册似乎不起作用。scatterpie with color=NA没有提供足够的颜色,因此某些切片是相同的。在scatterpie中使用颜色是一个完全不同的问题。请打开一个新问题并关闭此问题。请定义AllColorsAllColorsAllColors=grDevices::colors[grep'gra | ey',grDevices::colors,invert=T]您的代码无法工作,因为您没有将其正确地适配到数据集。作为一般规则,在您尝试使代码段适应您的情况之前,您应该尝试理解代码段的每一行;否则事情就不会发生了。例如,在ggforce的例子中,据我所知,您仍然使用另一个例子中的列名。我已经发布了一个修复ggforce示例的答案,其中还包括在图像上绘制的部分。
ggplot(wholebody_cutLH_wide_t) +
  geom_scatterpie(aes(x=imX, y=imY,r=radius),
     data=wholebody_cutLH_wide_t,
     cols=colnames(wholebody_cutLH_wide_t)[1:2],
     color=NA, alpha=.8)
wholebody_cutLH_wide_t <- read.table(text = "Acidobacteriaceae Actinomycetaceae  imX imY radius
      0.000000e+00     7.665687e-05 2.00 5.5    0.5
      0.000000e+00     4.580237e-04 1.50 1.0    0.5
      0.000000e+00     4.112573e-04 1.75 2.0    0.5
      6.431473e-04     3.856008e-02 0.30 1.0    0.5
      0.000000e+00     3.013013e-04 1.50 4.8    0.5
      3.399756e-05     1.372986e-02 1.50 5.2    0.5", header = TRUE)

library(tidyr)
library(dplyr)
library(ggforce)

# convert to long format, add a grouping variable to keep track of which pies go together
wholebody_cutLH_long <- mutate(wholebody_cutLH_wide_t, group=letters[1:6]) %>%
  gather(type, amount, -imX, -imY, -radius, -group)

dat_pies<-left_join(wholebody_cutLH_long,
                    wholebody_cutLH_long %>%
                      group_by(group) %>%
                      summarize(amount_total = sum(amount))) %>%
  group_by(group) %>%
  mutate(end_angle = 2*pi*cumsum(amount)/amount_total,
         start_angle = lag(end_angle, default = 0))

# now draw
ggplot(dat_pies) + 
  geom_arc_bar(aes(x0 = imX, y0 = imY, r0 = 0, r = radius,
                   start = start_angle, end = end_angle, fill = type)) +
  coord_fixed()
library(cowplot)

ggplot(dat_pies) +
  draw_image("https://upload.wikimedia.org/wikipedia/commons/1/15/Human_skeleton_diagram.png",
             x=0, y=0, width = 2.2, height = 6) +
  geom_arc_bar(aes(x0 = imX, y0 = imY, r0 = 0, r = radius,
                   start = start_angle, end = end_angle, fill = type)) +
  coord_fixed()