7

我正在尝试将多条线绘制为 ggplot2 中单个“类”的一部分。我可以绘制如下内容:

包含 5 个类别的图像

但我的问题是我想将 n1、n2 和 n3 显示为一个类(图例中每个类都有一个灰色细线)。

我的问题是,如果我在数据框中创建一个新因子以便对它们进行分组,我最终会绘制从 n1 末尾(右上角)到 n2 开头(左下角)的加法连接,这会添加一条对角线我的图表:

一类图

这更接近我想要的,但有额外的对角线。如果重要,我将使用 ROCR 计算这些,然后从结果performance对象中提取 x 和 y 点以生成这些线。

4

2 回答 2

2

这是一种方法,但我认为您不会非常喜欢它:

d1 <- data.frame(x = 1:10,
                 y = rep(1:2,each = 5),
                 grp = factor(rep(letters[1:2],each = 5),levels = letters[1:3]))
d1 <- rbind(d1,data.frame(x = 1:2,y = c(NA,NA),grp = c('c','c')))

d2 <- data.frame(x = 1:15,
                 y = rep(3:5,each = 5),
                 grp = rep(1:3,each = 5))   

ggplot() + 
    geom_line(data = d1,aes(x = x,y = y,group = grp,colour = grp)) + 
    geom_line(data = d2,aes(x = x,y = y,group = grp),colour = "blue")

在此处输入图像描述

请注意,您的解决方案不适用于其他类型的数据。碰巧,您要合并到图例中同一类别的三行中的每一行都在基本相同的位置开始和结束。如果不是这种情况,您最终会得到不需要的连接线。

上面的方法会更普遍,但正如你所看到的那样尴尬。如果有的话,那就更不方便了。

这种问题已经出现过很多次,可能是我忘记了一个更简单的解决方案。但总的来说,请记住,为了换取ggplot2让您不必手动构建每个图例,与基本图形相比,您(经常,但并非总是)牺牲了一些灵活性。

于 2012-07-13T21:33:41.280 回答
0

尝试绘制此图时,我已将rbindROCR 对象中的项目直接放入 data.frame 中。performance我意识到我可以通过颠倒中间类数据的顺序来缩短从右上角到左下角的行程。IE

n1 <- getPerformance(test1)
n2 <- getPerformance(test2)
n3 <- getPerformance(test3)

将创建三个看起来像的数据框

  type x           y
1   n1 0 0.000000000
2   n1 0 0.003448276
3   n1 0 0.006896552
4   n1 0 0.010344828
5   n1 0 0.013793103
6   n1 0 0.017241379
...
26565   n1 0.9999619 1
26566   n1 1.0000000 1

这里的问题是,当我将 n1 绑定到 n2 时,我会将 n1 的点 (1,1) 连接到 n2 的点 (0,0) - 创建对角线。

在我的情况下,一个(草率的)解决方案是仅仅颠倒每隔一行的顺序,这样就没有对角线了。

n2_rev <- n2[nrow(n2):1,]
ns <- rbind(n1,n2_rev,n3)

所以现在这条线来回走动,而不是始终在同一位置开始和结束,创建以下图表:

想要的图表

尽管如此,我认为有一种更通用的方法来处理这个问题。有没有一种好方法可以在 ggplot2 图中添加一条线,例如lines()base R 的函数?

于 2012-07-13T21:18:12.813 回答