如何使用ggplot在绘图上写入某些参数的值

时间:2015-09-23 01:56:35

标签: r ggplot2 shiny

我想为我正在开发的闪亮应用程序解决以下问题。

我的问题是:如何在ggplot上写出AUC,Cmax及其标准差的值。

示例数据如下所示:

data <-
ID   TIME   DV   AUC   Cmax   SD_AUC SD_Cmax
1     0     0    1.4   4.1    0.8    0.5
1     1     0.5  1.4   4.1    0.8    0.5
1     2     2    1.4   4.1    0.8    0.5
1     3     4    1.4   4.1    0.8    0.5
1     4     6    1.4   4.5    0.8    0.5
1     5     3    1.4   4.5    0.8    0.5
1     6     2    1.4   4.5    0.8    0.5
1     7     1    1.4   4.5    0.8    0.5

绘图编码:

plotobj <- ggplot(data)
plotobj <- plotobj + geom_line(aes(x=TIME, y=DV), colour="red", size=1)

情节应该接近这个:(我在excel中绘制的情节仅用于演示)

enter image description here

如何使用ggplot在R中实现此目的?

注意:AUC,Cmax和SD的值会根据shinyapp中的某些参数而更改(更新)。因此,ggplot代码应该是通用的,并且取相应列中的任何值。

我以AUC的代码为例:

plotobj <- plotobj + annotate("text", x = 6, y = 5, label = "median AUC", colour = "red", size = 6)

但无法获得那里的数字。

2 个答案:

答案 0 :(得分:0)

让我们摘录一些您的数据:

AUC   Cmax   SD_AUC SD_Cmax
1.4   4.1    0.8    0.5
1.4   4.1    0.8    0.5
1.4   4.1    0.8    0.5
1.4   4.1    0.8    0.5
1.4   4.5    0.8    0.5
1.4   4.5    0.8    0.5

非常重复和无聊!这是不必要的。选择您喜欢的数据转换方法并将其转换为:

metrics = structure(list(Label = structure(c(1L, 3L, 2L, 4L),
    Label = c("Median AUC", "Median Cmax", "SD AUC", "SD Cmax"), class = "factor"),
    Value = c(1.4, 0.8, 4.5, 0.5)),
    .Names = c("Label", "Value"),
    class = "data.frame", row.names = c(NA, -4L))

metrics

        Label  Value
 'Median AUC'    1.4
     'SD AUC'    0.8
'Median Cmax'    4.5
    'SD Cmax'    0.5

实际上,如果您愿意,可以直接进入下一步,但上述数据应该很容易获得并且是一个很好的起点。

annotation = paste(metrics$Label, metrics$Value, sep = " = ", collapse = "\n")

然后你可以添加到你的情节对象:

annotate(geom = "text" label = annotation, x = 6, y = 5)

您必须使用xy值来定位它。

答案 1 :(得分:0)

由于每次更改Shiny应用中的参数时AUC和Cmax的值都会更新,因此使用geom_text是可行的方法。我可以看到Gregor上面的答案背后的逻辑,但是使用annotate可以添加文本,但不能添加在更新Shiny应用时发生变化的数字。

问题所要求的工作可以使用以下方式完成:

     yscalemax <- max(data$DV)      #set values for plot limits
      xscalemax <- max(data$TIME)*1.1
      plotobj <- ggplot(data)
      plotobj <- plotobj + geom_line(aes(x=TIME, y=DV), colour="red", size=1)
      plotobj <- plotobj + stat_summary(aes(x=TIME, y=DV), fun.y=median, geom="line", colour="red", size=1)
      plotobj <- plotobj + geom_text(aes(label = paste("AUC =",AUC)), x = xscalemax*0.8, y = yscalemax*0.6, colour = "red", size = 6)
      plotobj <- plotobj + geom_text(aes(label = paste("SD AUC =",SD_AUC)), x = xscalemax*0.8, y = yscalemax*0.55, colour = "red", size = 6)

Cmax等等。在这种情况下,文本的位置将根据max(DV)max(TIME)进行调整,其中AUCSD_AUC的计算值会贴在图上。