【问题标题】:R adding layers to a ggplot plot with vectors of different lengthR将层添加到具有不同长度向量的ggplot图中
【发布时间】:2017-10-14 17:45:52
【问题描述】:

我研究了这个问题,但所有技巧都在这里失败了。我正在尝试在 ggplot 中构建 ROC 曲线。不同的机器学习模型返回不同长度的观察向量。我的目标是将它们收集在一个情节中,着色并放置图例。

当您的所有数据都具有相同的 X 轴长度 -(观察次数)时,这很容易。所有 x 和 y 都在 [0 到 1] 的范围内。问题是不同数量的观察。我想避免将向量插值和强制到相同的长度,因为每个观察值都带有重要信息。

到目前为止,我发现最好的方法是在同一个图上放置新的线层。

也许其他类型的情节?或来自其他软件包的专门地块。

请帮忙。谢谢!

ggplot(vector_1, aes(x, y ) ) + geom_line() + ???? new layers ???

我的目标是获得这样的情节,但有更多的线条:

这里是 vector1 - 34 个观察值:

vector_1_x:

0 0.02325581 0.02325581 0.04651163 0.04651163 0.06976744 0.09302326 0.11627907 0.13953488 0.1627907 0.18604651 0.20930233 0.23255814 0.25581395 0.27906977 0.30232558 0.3255814 0.37209302 0.39534884 0.41860465 0.44186047 0.46511628 0.48837209 0.51162791 0.53488372 0.62790698 0.65116279 0.74418605 0.76744186 0.86046512 0.90697674 0.93023256 0.97674419 1

vector_1_y:

0 0 0.1666667 0.1666667 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.5 0.5 0.5 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.8333333 0.8333333 0.8333333 1 1 1 1 1

这里是 vector2 - 50 个观察值:

vector_2_x:

0 0 0.02325581 0.04651163 0.04651163 0.06976744 0.09302326 0.11627907 0.13953488 0.1627907 0.18604651 0.20930233 0.23255814 0.25581395 0.25581395 0.27906977 0.30232558 0.3255814 0.34883721 0.37209302 0.39534884 0.39534884 0.41860465 0.44186047 0.46511628 0.48837209 0.51162791 0.51162791 0.53488372 0.55813953 0.58139535 0.60465116 0.62790698 0.65116279 0.65116279 0.6744186 0.69767442 0.72093023 0.74418605 0.76744186 0.79069767 0.81395349 0.8372093 0.86046512 0.88372093 0.90697674 0.93023256 0.95348837 0.97674419 1

vector_2_x:

0 0.1666667 0.1666667 0.1666667 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.3333333 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.8333333 0.8333333 0.8333333 0.8333333 0.8333333 0.8333333 0.8333333 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

【问题讨论】:

  • 编辑您的帖子并粘贴dput(your.df.name)的结果,您将获得更多有用的帮助。
  • dat <- data.frame(x = c(vector_1_x, vector_2_x), y = c(vector_1_y, vector_2_y), name = rep(c('1','2'), each = c(length(vector_1_x), length(vector_2_x))), stringsAsFactors = F); ggplot(dat, aes(x = x, y = y, colour = name))+geom_line()

标签: r ggplot2 roc


【解决方案1】:

vector_1vector_2 放入它们自己的数据框中,如下所示:

df1 <- data.frame(x = vector_1_x, y = vector_1_y)
df2 <- data.frame(x = vector_2_x, y = vector_2_y)

然后你可以为每个ggplot层指定一个不同的data.frame

ggplot() +
  geom_line(data = df1, aes(vector_1_x, vector_1_y), colour = "red") +
  geom_line(data = df2, aes(vector_2_x, vector_2_y), colour = "green")

更新

我上面写的最初几行是可以的,但是将所有向量放在他们自己的data.frame 中会更简洁,并带有一个指示变量来说明它属于哪一行。这看起来像:

x    y    vector
1    1    "line1"
2    3    "line1"
3    6    "line1"
...  ...  ...
1    8    "line2"
2    6    "line2"
3    2    "line2"
...  ...  ...

然后你可以有一个ggplot层:

ggplot(data = df) + geom_line(aes(x, y, colour = vector))

【讨论】:

  • 您可以在aes() 中指定color。老实说,尽管最好将它们全部放在同一个 data.frame 中,并带有一个额外的变量来指定它是哪一行。这将使其更具可扩展性。我所拥有的对于 2-3 行来说是可以的,但对于多行来说可能是不必要的冗长。
  • @bouncyball 好的,我添加了,还添加了一个新版本,可以更好地用于多行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多