我已经尝试了其他建议(Order bars in ggplot和Order Bars in ggplot2 bar graph)来订购列,但仍然无法获取。
我有一个数据集,该数据集的列名为“ Zap”,其中的值我要从出现的最高计数到最小的计数进行排序。 这是我的R代码:
mydata %>%
group_by(Zap) %>%
summarize(count = n()) %>%
mutate(percent = count/sum(count)) %>%
ggplot(aes(x=Zap, y=count, fct_infreq(Zap))) +
xlab("EA5 Zigbee Enabled")+
geom_col() +
geom_text(aes(label = paste0(round(100 * percent, 1), "%")), vjust = -0.25)
该代码实际上没有重新排序任何内容。这就是我得到的(未排序)
我也尝试过:
mydata %>%
group_by(Zap) %>%
summarize(count = n()) %>%
mutate(percent = count/sum(count)) %>%
ggplot(aes(x=Zap, y=count)) +
x=reorder(Zap,Zap, function(x)-count(x)) +
xlab("EA5 Zigbee Enabled")+
geom_col() +
geom_text(aes(label = paste0(round(100 * percent, 1), "%")), vjust = -0.25)
但是这段代码给了我一个错误:
重新排序时出错(Zap,Zap,函数(x)-count(x)):对象“ Zap” 找不到
有什么想法我在做什么错吗?
答案 0 :(得分:1)
您可以使用reorder(Zap, -count)
作为aes
的x变量的定义,按变量的数量对x变量进行排序:
mydata %>%
group_by(Zap) %>%
summarize(count = n()) %>%
mutate(percent = count/sum(count)) %>%
ggplot(aes(x=reorder(Zap, -count), y=count, fct_infreq(Zap))) +
xlab("EA5 Zigbee Enabled")+
geom_col() +
geom_text(aes(label = paste0(round(100 * percent, 1), "%")), vjust = -0.25)
数据示例
mydata <- data.frame(Zap = c(rep("enabled",85*5),rep("enabled22",1*5),rep("disabled",14*5)))
答案 1 :(得分:0)
这是我最终使用的东西,这要感谢@HubertL的评论:
mydata %>%
group_by(Zap) %>%
summarize(count = n()) %>%
mutate(percent = count/sum(count), Zap = reorder(Zap, -count, FUN=identity)) %>%
ggplot(aes(x=Zap, y=count)) +
xlab("EA5 Zigbee Enabled")+
geom_col() +
geom_text(aes(label = paste0(round(100 * percent, 1), "%")), vjust = -0.25)
答案 2 :(得分:0)
fct_infreq()
包中的forcats
函数按频率对因数重新排序,可以代替reorder()
使用。另外,ggplot2
自己计算统计信息,可以通过stat()
函数访问该统计信息。
因此,无需事先聚合数据。相反,可以直接从mydata
数据集中创建图:
mydata <- data.frame(Zap = rep(c("enabled","enabled.22", "disabled"), 5 * c(85, 1, 14)))
library(ggplot2)
mydata %>%
ggplot() +
aes(x = forcats::fct_infreq(Zap)) +
geom_bar() +
geom_text(aes(y = stat(count), label = sprintf("%.1f%%", 100 * stat(count / sum(count)))),
stat = "count", vjust = -0.25) +
xlab("EA5 Zigbee Enabled")
geom_text()
需要指定y
和label
美观度,它们可以使用stat()
从计算出的统计数据中得出。