【问题标题】:Re-order y-axis by Number of Observations按观察次数对 y 轴重新排序
【发布时间】:2013-11-27 21:44:31
【问题描述】:

我正在尝试按与每个值相关的观察次数对分类/非数字 y 轴进行重新排序。

我导入一个如下所示的表:

View(ranges)

ID  | Time | Value | obs
B1  | 1:11 | 1     | 91
B1  | 1:12 | 2     | 91
...
U30 | 2:22 | 99    | 101

然后重新排序:

ranges <- ranges[with(ranges, order(obs, ID)), ]

然后绘制:

p <- ggplot(ranges, aes(x=Time, y=ID, fill=Value))
p <- p + geom_tile(colour = "white")
p

但 y 轴上的顺序并不反映每个 ID 的观察次数。

如何对 y 轴进行排序以反映数据框中 ID 的频率?非常感谢。

示例数据,逗号分隔:

ID,DATE,VALUE,OBS
B9148,41275,0133,7
B9148,41276,3344,7
B9148,41277,7907,7
B9148,41278,2052,7
B9148,41279,6617,7
B9148,41280,9411,7
B9148,41281,6302,7
U1821,41275,7585,11
U1821,41276,5086,11
U1821,41277,5731,11
U1821,41278,5358,11
U1821,41279,9977,11
U1821,41280,1446,11
U1821,41281,2728,11
U1821,41282,5369,11
U1821,41283,8171,11
U1821,41284,5817,11
U1821,41285,0166,11
F7484,41275,8971,10
F7484,41276,5635,10
F7484,41277,8629,10
F7484,41278,5832,10
F7484,41279,4775,10
F7484,41280,4519,10
F7484,41281,1527,10
F7484,41282,7861,10
F7484,41283,5713,10
F7484,41284,0824,10
S3804,41275,0573,4
S3804,41276,0123,4
S3804,41277,8468,4
S3804,41278,6258,4
B8088,41275,9117,7
B8088,41276,8489,7
B8088,41277,0902,7
B8088,41278,8684,7
B8088,41279,7229,7
B8088,41280,3587,7
B8088,41281,0907,7

【问题讨论】:

  • 也许使用reorder(),如示例所示here.
  • 按您创建的新列对它们进行排序,然后照常绘制。
  • 这似乎不起作用。我将使用更具体的代码进行编辑。
  • 您的数据非常具体。我可以人工生成它,但这比回答问题本身需要更长的时间。换句话说,提供一些数据。
  • 添加了示例数据。谢谢。

标签: r ggplot2


【解决方案1】:

您可以手动执行此操作:

ranges$ID <- factor(ranges$ID, levels=c("S3804", "B8088", "B9148", "F7484", "U1821"))

或多或少自动:

ranges$ID <- factor(ranges$ID, levels=as.character(unique(ranges$ID)))

为什么会发生这种情况的基本思想是因为因子水平是单独存储的,不受排序影响,而 ggplot 是逐级绘制的。

您也可以参考this 问题以获取有关此概念的演示。

这是你想要的吗?请注意,如果您想要相反的顺序,只需在 as.character() 之前添加 rev() 即可。

【讨论】:

  • 正是我想要的。非常感谢。
  • 对于后代,关键是 ggplot 要求您重新排序值和级别。
猜你喜欢
  • 2016-07-04
  • 2022-11-11
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2021-03-04
  • 1970-01-01
相关资源
最近更新 更多