floating.pie 在 R 中的 plotrix 中
floating.pie in plotrix in R
我用的是R。我的终极目标objective是有一张明尼苏达州县级的GIS地图,每个县会有一个饼图,代表小学、中学的比例, 和大专人员就业。
我有一个包含就业统计数据的数据框。每一行是一个县,列是第一、二、三产业的就业。前十行看起来像这样。
[,1] [,2] [,3]
[1,] 0 94 2208
[2,] 0 45568 65678
[3,] 0 3124 6262
[4,] 48 3908 11278
[5,] 0 6949 9779
[6,] 0 283 992
[7,] 0 7797 27130
[8,] 15 4471 6710
[9,] 51 1973 5768
[10,] 44 14188 23040
为了放置饼图,我使用 plotrix
包的 floating.pie
函数并遍历所有县。 (mn_county
是我的 GIS shapefile,但您不必为此烦恼)
floating.pie(coordinates(mn_county)[s, ][1], coordinates(mn_county)[s, ][2], c(pri, sec,tert), radius = rad
, col = c(rgb(255, 0, 0, max = 255, alpha = 125, names = "red50"), rgb(0, 255, 0, max = 255, alpha = 125, names = "green50"), rgb(0, 0, 255, max = 255, alpha = 125, names = "blue50")))
对于我的饼图,我希望第一职业为红色,第二职业为绿色,第三职业为蓝色。问题是,当第一就业 = 0 时,R 将第二就业着色为红色,将第三就业着色为绿色。我怎样才能防止这种情况发生?
原则上你可以自己破解 floating.pie
函数(零被排除在外,因为它们破坏了一些内部计算;应该可以解决这个问题)或向包维护者发送请求.. .
一个简单的 hack 是为所有类别添加一个小值(小到您永远不会在视觉上注意到差异);或者你可以只使用 min(pri,eps)
...
dat <- data.frame(pri=c(0,10,20),
sec=c(10,20,30),
tert=c(10,10,10))
n <- 3
library(plotrix)
plot(c(0,n+1),c(0,n+1),axes=FALSE,ann=FALSE,type="n")
eps <- 0.001
for (i in 1:n) {
with(dat[i,],floating.pie(i,i,c(pri+eps,sec+eps,tert+eps),
col=c("red","green","blue"),radius=0.5))
}
其他主动提供的建议:
- red/green/blue 不是最好的颜色表示(主要 red/green 与二色视者无法区分),您可以查看
RColorBrewer
包 ...
- 你可能想看看 this answer ...
我用的是R。我的终极目标objective是有一张明尼苏达州县级的GIS地图,每个县会有一个饼图,代表小学、中学的比例, 和大专人员就业。
我有一个包含就业统计数据的数据框。每一行是一个县,列是第一、二、三产业的就业。前十行看起来像这样。
[,1] [,2] [,3]
[1,] 0 94 2208
[2,] 0 45568 65678
[3,] 0 3124 6262
[4,] 48 3908 11278
[5,] 0 6949 9779
[6,] 0 283 992
[7,] 0 7797 27130
[8,] 15 4471 6710
[9,] 51 1973 5768
[10,] 44 14188 23040
为了放置饼图,我使用 plotrix
包的 floating.pie
函数并遍历所有县。 (mn_county
是我的 GIS shapefile,但您不必为此烦恼)
floating.pie(coordinates(mn_county)[s, ][1], coordinates(mn_county)[s, ][2], c(pri, sec,tert), radius = rad
, col = c(rgb(255, 0, 0, max = 255, alpha = 125, names = "red50"), rgb(0, 255, 0, max = 255, alpha = 125, names = "green50"), rgb(0, 0, 255, max = 255, alpha = 125, names = "blue50")))
对于我的饼图,我希望第一职业为红色,第二职业为绿色,第三职业为蓝色。问题是,当第一就业 = 0 时,R 将第二就业着色为红色,将第三就业着色为绿色。我怎样才能防止这种情况发生?
原则上你可以自己破解 floating.pie
函数(零被排除在外,因为它们破坏了一些内部计算;应该可以解决这个问题)或向包维护者发送请求.. .
一个简单的 hack 是为所有类别添加一个小值(小到您永远不会在视觉上注意到差异);或者你可以只使用 min(pri,eps)
...
dat <- data.frame(pri=c(0,10,20),
sec=c(10,20,30),
tert=c(10,10,10))
n <- 3
library(plotrix)
plot(c(0,n+1),c(0,n+1),axes=FALSE,ann=FALSE,type="n")
eps <- 0.001
for (i in 1:n) {
with(dat[i,],floating.pie(i,i,c(pri+eps,sec+eps,tert+eps),
col=c("red","green","blue"),radius=0.5))
}
其他主动提供的建议:
- red/green/blue 不是最好的颜色表示(主要 red/green 与二色视者无法区分),您可以查看
RColorBrewer
包 ... - 你可能想看看 this answer ...