使用不同的变量在ggplot中显示正确的标签

时间:2017-10-18 17:32:36

标签: r ggplot2 concatenation facet-wrap

我有一个包含4个变量的数据:

id|name|year|value|
1   A    16   500
1   A    15   400
1   A    14   430
2   B    16   200
2   B    15   180
2   B    14   170
3   A    16   620
3   A    15   510
3   A    14   200

然后,我必须在ggplot中为每个id创建一个时间线图,但是显示其标签而不是它的id。我做的是:

ggplot(db, aes(x=year, y= value)) + geom_line() + facet_wrap(~db$id)

但是它显示的是图表写了他们的ID而不是他们的名字,所以我尝试了:

ggplot(db, aes(x=year, y= value)) + geom_line() + facet_wrap(~db$name)

它创建了带有正确标签的折线图,但是id 1和id 3都有相同的名称,因此,最后,它只创建了2个图表而不是3个,其中一个图表有6个观察而不是3个

有没有办法将名称与ID连接?然后通过id连接更正名称。

2 个答案:

答案 0 :(得分:0)

<强>更新

在新行上创建名为nameid的合并name2id列,然后生成图表。

db$name2 <- paste(db$name,db$id,sep="\n") 

ggplot(db, aes(x=year, y= value)) + geom_line() + facet_wrap(~name2)

enter image description here

你可以这样做:

ggplot(db, aes(x=year, y= value)) + 
  geom_line() + 
  facet_wrap(~interaction(id, name))

为name和id的每个组合创建一个单独的图表。如果您要排除1.2.,我们必须调整解决方案。

数据:

db <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), name = structure(c(1L, 
1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L), .Label = c("A", "B"), class = "factor"), 
    year = c(16L, 15L, 14L, 16L, 15L, 14L, 16L, 15L, 14L), value = c(500L, 
    400L, 430L, 200L, 180L, 170L, 620L, 510L, 200L)), .Names = c("id", 
"name", "year", "value"), class = "data.frame", row.names = c(NA, 
-9L))

答案 1 :(得分:0)

Marko212's answer肯定更好。但是,如果您需要在将来的某个时间点SQLiteConnection GetConnection(): name连接。

id