我一直在努力使用ggplot2软件包在R中制作Pareto Chart。在许多情况下,制作条形图或直方图时,我们希望项目按X轴排序。在帕累托图表中,我们希望项目按Y轴上的值降序排列。有没有办法让ggplot绘制由Y轴上的值排序的项目?我尝试首先对数据帧进行排序,但ggplot似乎对其进行了重新排序。

例:

val <- read.csv("http://www.cerebralmastication.com/wp-content/uploads/2009/11/val.txt")
val<-with(val, val[order(-Value), ])
p <- ggplot(val)
p + geom_bar(aes(State, Value, fill=variable), stat = "identity", position="dodge") + scale_fill_brewer(palette = "Set1")

数据帧val已排序,但输出如下所示:

r - 使用ggplot2和R创建帕累托图-LMLPHP
(来源:cerebralmastication.com)

Hadley正确地指出,这将产生一个更好的图形来显示实际值与预测值:
ggplot(val, aes(State, Value)) + geom_bar(stat = "identity", subset = .(variable == "estimate"), fill = "grey70") + geom_crossbar(aes(ymin = Value, ymax = Value), subset = .(variable == "actual"))

返回:

r - 使用ggplot2和R创建帕累托图-LMLPHP
(来源:cerebralmastication.com)

但这仍然不是帕累托图。有小费吗?

最佳答案

ggplot2中的条按因子中的水平顺序进行排序。

val$State <- with(val, factor(val$State, levels=val[order(-Value), ]$State))

关于r - 使用ggplot2和R创建帕累托图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1735540/

10-10 04:58