【问题标题】:Re-ordering by multi-dimensional data for ggplot2 plotting通过多维数据重新排序以进行 ggplot2 绘图
【发布时间】:2012-10-30 04:00:16
【问题描述】:

我在制作我认为应该是相当简单的 ggplot2 图表时遇到了一些麻烦。

我在数据框中有一些实验数据。每个数据条目都由正在测量的系统和运行它的实例(问题)标识。每个条目还具有针对特定系统和实例测量的值。

例如:

mydata <- data.frame(System=c("a","b","a","b","a","b"), Instance=factor(c(1,1,2,2,3,3)), Value=c(10,5,4,2,7,8))

现在,我想将此数据绘制在箱线图中,其中 x 轴包含实例标识符,条形图的颜色表示该值适用于哪个系统。条形高度应按数据框中的值加权。

这几乎可以满足我的要求:

qplot(data=mydata, weight=Value, Instance, fill=System, position="dodge")

我想做的最后一件事是重新排序条形图,以便它们按系统 A 的值排序。但是,我想不出一个优雅的方法来做到这一点。

我的第一直觉是使用qplot(data=mydata, weight=Value, reorder(Instance, Value), fill=System, position="dodge"),但这将按每个实例的mean 值排序,我只想使用A 中的值。我可以使用qplot(data=mydata, weight=Value, reorder(Instance, Value, function(x) { x[1] } ), fill=System, position="dodge") 按“排序”实例第一个值”,但这很危险(如果顺序改变了怎么办?)并且读者不清楚。

什么是更优雅的解决方案?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我确信有比这更好的方法,但是使 Instanceordered 有效,并且即使数据发生变化也会继续有效:

    qplot(data=mydata, weight=Value, 
     ordered(Instance,
     levels=mydata[System=='a','Instance'] [order(mydata[System=='a','Value'])])
    ,fill=System, position="dodge")
    

    也许是写同一件事的更优雅的方式:

    qplot(data=mydata, weight=Value, 
    ordered(Instance,
    levels=Instance [System=='a'] [order(Value [System=='a'])]) # Corrected
    ,fill=System, position="dodge")
    

    【讨论】:

    • 谢谢,第一个答案似乎有效,至少不会中断。但是,我认为它可能可以改进。不幸的是,第二个示例不起作用!
    猜你喜欢
    • 2011-04-14
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2013-03-16
    • 2021-06-29
    • 2021-12-27
    相关资源
    最近更新 更多