Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中地图饼图中不同字符串的特定不同颜色_R - Fatal编程技术网

R中地图饼图中不同字符串的特定不同颜色

R中地图饼图中不同字符串的特定不同颜色,r,R,我正在尝试制作一张地图,上面有几个不同位置的饼图。 我的问题是,我将每个饼图添加到循环的不同迭代中。饼图有一些常见但不同的标签,因此每个切片的颜色不应该总是相同的。有没有办法添加一个参数,指定每次出现每个标签时,切片应使用哪种颜色 在我的代码中,我试图绘制10个饼图(地图中的10个区域),总共有16个不同的标签值(我称之为单倍组)。在每次迭代中,我只保留一个区域的值来绘制它们,这样在每次迭代中颜色都会重新开始。。。 我想添加一些类似于我添加的par部分的内容,但它不起作用 我已经看到,这可以通过

我正在尝试制作一张地图,上面有几个不同位置的饼图。 我的问题是,我将每个饼图添加到循环的不同迭代中。饼图有一些常见但不同的标签,因此每个切片的颜色不应该总是相同的。有没有办法添加一个参数,指定每次出现每个标签时,切片应使用哪种颜色

在我的代码中,我试图绘制10个饼图(地图中的10个区域),总共有16个不同的标签值(我称之为单倍组)。在每次迭代中,我只保留一个区域的值来绘制它们,这样在每次迭代中颜色都会重新开始。。。 我想添加一些类似于我添加的
par
部分的内容,但它不起作用

我已经看到,这可以通过ggplot2中的
scale\u color\u manual
实现,但是我使用的函数不在包中,我认为我应该保留它

df_all
是一个数据框,包含饼图中需要引入的所有信息。使用
grepl
I在每次迭代中独立地拾取每个区域的信息,饼图切片应该用频率列填充。单倍体组应该是标签。主要问题是,例如,单倍体A的颜色与单倍体C的颜色相同(只是因为它们是每个区域的第一个颜色,即使它们不相同)。数据帧看起来像这样(但更大):

区域单倍体组频率
1区域1 A 3
2区域1 B 1
3区域2 A 1
4区域2 D 1
5区域2 E 1
6区域3 C 2
7区域3 B 7
8区域3 E 2
9区域4 D 2

coord
数据框包含两列(x和y),其中的坐标是饼图应放置在地图中的位置(每行对应一个区域)。计数器是一种在每次迭代中拾取对应于下一个区域的下一个坐标的方法<代码>坐标大致如下:

xy
1.3    14.3
2.5    12.5
1.9    10.4
3.7 11.7

一般来说,我的代码如下:

for (i in unique(df_all$Region)){
  counter=counter+1
  d <- df_all[grepl(i, df_all$Region),]
  print(d)
  add.pie(z=d$Frequency, x=coord$x[counter], y=coord$y[counter], radius = 0.005, 
          labels = d$Haplogroup)
    par(col = c("E1b1a7a" = "#A6CEE3", "E1b1a8"= "#428EBF", "R1b"= "#6CADA0",
                "A" = "#7CC171", "E1a" = "#66AB4C", "A3b2" = "#B89B74", "B" = "#E25E57",
                "B2" = "#EE6049", "B2a1" = "#F58242", "E" = "#F99F41", "E1b1" = "#ED8F47",
                "E1b1a" = "#BD93AD", "J1e" = "#9572AB", "L" = "#B19894", "T" = "#E9D27A", 
                "E1b1a7*" = "#B15928"))
}```


Thanks in advance for the help!
for(唯一的i(df_所有$Region)){
计数器=计数器+1

d从一个data.frame中的所有内容开始,或者手动创建:

df_all<-read.csv(text="
r, z, x, y,  l, c
1, 3, 3, 13, A,   red
1, 1, 3, 13, B,  blue
2, 1, 1, 12, A2,  pink
2, 2, 1, 12, B2, green
",header=T)
一旦你把所有东西都放在一起,你就可以使用更简单的
lappy

plot(NA,NA, xlim=c(0,6), ylim=c(10,15) )
lapply(split(df_all,df_all$r),function(s){ #split by region
  add.pie(z=s$z, #your proportions
          x=s$x,
          y=s$y,
          labels=s$l, #your haplotypes
          col = s$colorzp)
})
结果:


您能否编辑该问题,使其包含
df_all
计数器的最低版本,以及
add.pie
的来源,以使其可复制?
plot(NA,NA, xlim=c(0,6), ylim=c(10,15) )
lapply(split(df_all,df_all$r),function(s){ #split by region
  add.pie(z=s$z, #your proportions
          x=s$x,
          y=s$y,
          labels=s$l, #your haplotypes
          col = s$colorzp)
})