1

我正在从单个数据帧的子集中制作一组 R 中的饼图(带有循环)。我得到了漂亮的饼图,但是在每个饼图中总是以相同的顺序分配颜色,而我希望在所有饼图中将颜色分配给相同的值。

我的代码是:

for (i in 1:length(voisins)) {                
    y <- subset(zz, Destination==voisins[i])    
    pie(y$pc,labels=y$Names, col=terrain.colors(nrow(y)) , main=c(y$country[1])) 

我想为每个y$Names.

我不允许在这里放图片,所以我把它放在那里:http ://cl.ly/image/080t2Q1v1q3V

如果同一区域具有相同的颜色会更容易阅读!有没有办法做到这一点?

解决方案 :

谢谢你,阿伦,你的回答,但不幸的是,这并没有产生我想要的结果,可能我解释得不够清楚。我相信 ggplot 是一个更好的图形包,我很快就会学会如何使用它,但目前我没有时间,你的回答让我走上了正确的轨道。我找到了一个解决方案:实际上,如果您在示例中制作更大的“t”(具有更多行),然后采用它的子集导致更小的 t1、t2、t3、...,但 t$id 并不总是相同,所以假设在 t1 中我们将有 id = (2,4,9,3),在 t2 中 id = (4,6,3),依此类推。您将看到颜色总是以相同的顺序分配,即在 t1 中 2=red、4=green、9=blue、3=violet,而在 t2 中,4=red、6=green 和 3=blue。所以颜色从一个馅饼到另一个馅饼不同,我希望总是 2=red,4=green,3=blue,9=紫色。我找到的解决方案是根据 t$id 将一个颜色列合并到 t,然后将其保存在子集 t1, t2, t3, ... 并设置 col=t1$color , col=t2$color 等在 pie 命令中。最后很容易,但我希望有一个自动的解决方案,稍后我会看到 Paul 的解决方案。迪迪埃

4

1 回答 1

4

让我首先声明,饼图一开始是个坏主意,因为它们存在重大的感知问题,请参见此处

然后为了解决问题,我会使用ggplot,更具体地说是刻面。首先创建一个饼图:

pie <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) +
 geom_bar(width = 1)
pie + coord_polar(theta = "y")

在此处输入图像描述

要制作每个变量级别的饼图,您可以使用,例如,每个变量的facet_wrap唯一级别:gearmtcars

pie + coord_polar(theta = "y") + facet_wrap(~ factor(gear))
于 2013-01-15T15:39:17.597 回答