我想使用ggplot2创建一个图表,显示特定地区政党的投票百分比相对于该地区而非该国家的选民人数。
这是我的数据帧:
data <- read.table(header=TRUE, text='
REGION Q99
Tunis Nahdha
Tunis Jabha
Tunis NidaaTounes
Tunis Nepasvoter
Tunis Nepasvoter
Tunis Nepasvoter
Tunis NidaaTounes
Tunis Nepasvoter
Tunis Nahdha
Tunis NidaaTounes
Tunis CPR
Tunis Nahdha
Tunis Autres
Tunis Nepasvoter
Tunis Nepasvoter
Tunis Nahdha
Tunis Jabha
Tunis Nepasvoter
Tunis Nahdha
Tunis Nahdha
Tunis JabhaChaabia
Tunis Autres
Tunis Nepasvoter
Tunis NidaaTounes
Tunis Nepasvoter
Tunis NidaaTounes
Tunis Nepasvoter
Tunis NidaaTounes
Tunis Jabha
Tunis NidaaTounes
Tunis Autres
Tunis Nahdha
Tunis Nahdha
Tunis Autres
Tunis Jabha
Tunis Nepasvoter
Tunis Nepasvoter
Tunis CPR
Tunis Nahdha
Tunis Nepasvoter
Tunis Nepasvoter
Tunis Nepasvoter
Tunis Nahdha
Tunis NidaaTounes
Tunis CPR
Tunis CPR
Tunis Nepasvoter
Tunis Autres
Tunis Nahdha
Tunis NidaaTounes
Tunis Nahdha
Tunis Autres
Tunis Nepasvoter
Ariana Nahdha
Ariana CPR
Ariana Nahdha
Ariana Nepasvoter
Ariana NidaaTounes
Ariana CPR
Ariana Nepasvoter
Ariana Nahdha
Ariana Nepasvoter
Ariana NidaaTounes
Ariana CPR
Ariana NidaaTounes
Ariana NidaaTounes
Ariana NidaaTounes
Ariana CPR
Ariana Nahdha
Ariana CPR
Ariana Nahdha
Ariana Nahdha
Ariana CPR
Ariana Nahdha
Ariana Nepasvoter
Ariana NidaaTounes
Ariana NidaaTounes
Ariana Nahdha ')
首先,我使用以下代码:
g <- ggplot(data, aes(x = REGION, y =(..count..)/(nrow(data[data$REGION=="Ariana",])), fill = Q99))
g <- g + geom_bar(position = "stack")
但是我得到了这个错误:
nrow(data[data$REGION == "Ariana",]): object 'data' not found
然后我尝试使用environment= environment()
scale = nrow(data[data$REGION=="Ariana",])
g <- ggplot(data, aes(x = REGION, y = (..count..)/scale, fill = Q99), environment = environment())
g <- g + geom_bar(position = "stack")
然后我得到了这个错误:
(count)/scale错误:二进制操作符
的非数字参数
我不确定我是否完全理解了你想要做的事情。无论如何,我会避免在绘图代码中进行任何计算。请先准备数据。这是我的解决方案,如果这是你想要实现的:
dataSummarized <- group_by(data, REGION, Q99) %>%
summarise(percentVotes = n()) %>%
mutate(freq = percentVotes / sum(percentVotes))
g <- ggplot(dataSummarized, aes(x = REGION, y = freq, fill = Q99))
g <- g + geom_bar(stat = "identity")
g