【问题标题】:ggplot graph in R based on many variablesR中的ggplot图基于许多变量
【发布时间】:2013-02-04 14:58:26
【问题描述】:

我在 csv 文件中有两个数据集,d1d2。每个数据有 6 列。我设法通过melt 命令将它们组合在一起,并在ggplot 中将它们组合在一起。在我添加了一个额外的列之后,该列是图表所依赖的另一个变量,我无法获得所需的图表。提供数据集示例和我的代码。

数据集之后使用meltreshape包:

initi A   B       C     D    E   L1
0.005 1 23.7      1.0  1.0  24.7 d2
0.005 2 31.2      2.0  2.1  31.2 d2
0.005 3 35.8      3.1  3.2  35.6 d2
 1    1 6.2       1.0  1.0  6.2  d1
 1    2 10.1      2.0  2.1  7.0  d1
 1    3 11.2      3.0  3.5  7.0  d1
 2    1 14.2      8.0 14.3  5.2  d1
 2    2 15.9      7.0 13.0  5.5  d1
 2    3 16.0      6.2 12.4  5.8  d1

我需要在X-axis 中绘制A,在Y-axis 中绘制Biniti 值将代表每个图表。换句话说,它将在传说中。对于d1,我需要在AB 之间绘制结果。对于d2,我想绘制两个图表,其中第一个图表是initi = 1,第二个图表是initi = 2d1d2 的所有图表都在 AB 之间,并在图表中合并。在这种情况下,总共 3 条线组合在一张图中。 在添加initi 列之前,我设法绘制了d1d2。现在我在挣扎。以下是我的代码:

 dlist <- list(d1 =data1 ,d2 = data2) 
 reshaped_data <- melt(dlist, id.vars = c('initi','A','B','C','D','E')) 
 graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi)) +  
     geom_point(size = 5)+
     geom_line() +
     ggtitle("DATA1 vs DATA2") 

上面的代码很接近我想要的......除了线路以奇怪的方式连接。我应该将“initi”的每个模式作为一行。加上图例没有显示'init'的每个值

【问题讨论】:

  • 我不太确定这是否是您想要的。所以,我会在评论中写在这里,看看它是否是在我写答案之前:这有效吗? ggplot(data = df, aes(x = A, y = B, colour=factor(initi))) + geom_point() + geom_line() + facet_grid( . ~ L1)
  • 是的,它做了一些接近我想要的东西。它产生了两个相邻的图表。对于 d1,它生成了一个仅包含 d1 结果的图表(A VS B)。在图 2 中,d2 结果!!!?一个标题和一个图例下的两个图表???我想把它们结合起来??
  • 对不起,我不太明白...您能否再次解释一下(通过编辑您的帖子您想要绘制的内容)?
  • 对于d2,您显示的数据中根本没有initi=1
  • 您要基于L1initi 进行分面吗?不太清楚.. 你是什么意思initi 正在改变?

标签: r ggplot2


【解决方案1】:
dlist <- list(d1 =data1 ,d2 = data2) 
reshaped_data <- melt(dlist, id.vars = c('initi','A','B','C','D','E')) 
graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi)) +  
geom_point(size = 5)+
ggtitle("DATA1 vs DATA2") 
print(graph_AB)

我刚刚从原始问题中删除了 geom_line !

【讨论】:

    【解决方案2】:

    你说你想要两张图,一张当initi 为 1 时,另一张当它为 2 时,但它的值也是 0.005。如果要省略 0.005 级别,则需要先对数据进行子集化。

    在 ggplot2 中,多个图被称为“构面”,因为你的构面依赖于一个变量,所以你想要的命令是facet_wrap()。 (如果你的构面依赖于 2 个变量,你会使用 facet_grid。)构面应该是因子,所以我们会确保 initi 是一个因子

    reshaped_data$initi <- factor(reshaped_data$initi)
    

    然后将 + facet_wrap(~ initi) 添加到您的 ggplot 中。

    编辑: 如果您只想要一张图表,请尝试

    graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi, group = L1)) +  
        geom_point(size = 5)+
        geom_line() +
        ggtitle("DATA1 vs DATA2")
    
    graph_AB
    

    以后,使用dput 发布数据。例如,如果您执行dput(reshaped_data) 并将其粘贴到您的问题中,输出将是这样的:

        structure(list(initi = c(0.005, 0.005, 0.005, 1, 1, 1, 2, 2, 
    2), A = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), B = c(23.7, 31.2, 
    35.8, 6.2, 10.1, 11.2, 14.2, 15.9, 16), C = c(1, 2, 3.1, 1, 2, 
    3, 8, 7, 6.2), D = c(1, 2.1, 3.2, 1, 2.1, 3.5, 14.3, 13, 12.4
    ), E = c(24.7, 31.2, 35.6, 6.2, 7, 7, 5.2, 5.5, 5.8), L1 = structure(c(2L, 
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("d1", "d2"), class = "factor")), .Names = c("initi", 
    "A", "B", "C", "D", "E", "L1"), class = "data.frame", row.names = c(NA, 
    -9L))
    

    任何人都可以粘贴到 R 中并轻松使用。

    【讨论】:

    • 我认为initi,因为它必须在传说中,应该是colour,并且刻面应该在L1...
    • @Arun 嗯,也许吧。基于“初始值将代表每个图表”,我认为目标是解决这个问题,但这很令人困惑。也许“将代表”应该是“将出现在”,在这种情况下我错了。
    • 我想要绘制的是一个图表来比较 d1 和 d2 结果(A 和 B)相对于“初始”的变化。我尝试了类似 :'ggplot(df,aes(x = A, y = B, color = initi,shape=L1))' 的方法,但它没有正确显示图例。
    • @shujaa 我想我需要 facet_grid(ini​​t 和 L1 都在改变)
    • 能否提供完整的 ggplot 命令供您参考。
    猜你喜欢
    • 2022-07-29
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    相关资源
    最近更新 更多