ggplot2分面:每个图形的不同注释文本

3

我有一个名为Raw_Data的数据框,其中包含以下生成的数据:

    Time Velocity Type
1    10        1    a
2    20        2    a
3    30        3    a
4    40        4    a
5    50        5    a
6    10        2    b
7    20        4    b
8    30        6    b
9    40        8    b
10   50        9    b
11   10        3    c
12   20        6    c
13   30        9    c
14   40       11    c
15   50       13    c

我用ggplot2绘制了这些数据:

ggplot(Raw_Data, aes(x=Time, y=Velocity))+geom_point() + facet_grid(Type ~.)

我有三个对象:Regression_a、Regression_b和Regression_c。它们是每个图的线性回归方程。每个图应该显示相应的方程。
使用annotate在每个图上显示特定的方程:
annotate("text", x = 1.78, y = 5, label = Regression_a, color="black", size = 5, parse=FALSE)

我尝试用以下代码解决了这个问题:

Regression_a_eq <- data.frame(x = 1.78, y = 1,label = Regression_a,
                       Type = "a")
p <- x + geom_text(data = Raw_Data,label = Regression_a)

这并没有解决问题。每个图仍然显示回归_a,而不仅仅是图a。

2个回答

7

您可以将表达式作为字符值放入一个新的数据框架中,该数据框架具有与数据数据框架相同的唯一 Type 并使用 geom_text 将它们添加进去:

regrDF <- data.frame(Type = c('a','b','c'), lbl = c('Regression_a', 'Regression_b', 'Regression_c'))

ggplot(Raw_Data, aes(x = Time, y = Velocity)) +
  geom_point() + 
  geom_text(data = regrDF, aes(x = 10, y = 10, label = lbl), hjust = 0) +
  facet_grid(Type ~.)

下面是翻译的结果:

enter image description here

你可以用相应的表达式替换regrDF$lbl中的文本值。


1
如果我们在水平和垂直方向上都有facets,那么这个答案需要补充一下。
regrDF <- data.frame(Type1 = c('a','a','b','b'),
                     Type2 = c('c','d','c','d'),
                     lbl = c('Regression_ac', 'Regression_ad', 'Regression_bc', 'Regression_bd'))    
ggplot(Raw_Data, aes(x = Time, y = Velocity)) + 
       geom_point() + 
       geom_text(data = regrDF, aes(x = 10, y = 10, label = lbl), hjust = 0) +
       facet_grid(Type1 ~ Type2)

答案很好,但仍不完美,因为我不知道如何同时插入数学表达式和换行符(在substitute()表达式中添加换行符)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接