使用geom_boxplot在图上标记值

时间:2012-03-19 12:11:31

标签: r ggplot2

这是我拥有的数据框的一部分:

   Y       X      
1 0.2342 0.49530177
2 0.5628 0.61576918
3 0.3249 0.73623660
4 0.5234 0.85670401
5 1.2354 0.97717143
6 2.3423 0.09763884

我还有另一个数据框:

       start   end  name
    1 0.0123 0.123  A1
    2 0.5352 0.714  A2
    3 0.6239 0.789  B4
    4 0.6985 0.818  D2
    5 0.1264 0.216  V4
    6 0.1932 0.217  H4

所以我正确地绘制了第一个数据框。但我想要做的是在第一个数据图的x轴上标记第二个数据框的名称。

例如(使geom_box或geom_error条形成0.0123到0.123并为第二个数据框的所有部分写A1等),因此箱线图或误差线应该是水平的(与x轴平行) )

如何做到这一点??

谢谢。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你在第二个数据框中的数据就是第一个数据框中的观测误差(或类似的东西)。如果是这种情况,我建议首先合并两个数据帧。然后,假设您的数据帧是D1和D2,下面的代码绘制数据和误差线,同时“翻转”坐标。

# Create artificial data
D1 <- data.frame(X= 1:100, Y = rnorm(100))
D2 <- data.frame(start= D1$Y - abs(rnorm(100, 10)), end = D1$Y + abs(rnorm(100, 10)), name = sample(c('A','B', 'C', 'D', 'E'), 100, rep = TRUE))

# First step: Combine the two data frames
D3 <- data.frame(D1, D2)

# Plot data
library(ggplot2)
ggplot(D3) +
    geom_point(aes(x = X, y = Y)) + # Plots the points
    geom_errorbar(aes(x = X, ymax = start, ymin = end, width = 1)) + # Creates the errorbars
    coord_flip() # Flips the coordinates

答案 1 :(得分:0)

我不确定你想要最终的情节看起来是什么样的,特别是因为你的例子中的间隔重叠。这是一种可能性:

DF1 <-
structure(list(Y = c(0.2342, 0.5628, 0.3249, 0.5234, 1.2354, 
2.3423), X = c(0.49530177, 0.61576918, 0.7362366, 0.85670401, 
0.97717143, 0.09763884)), .Names = c("Y", "X"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))
DF2 <-
structure(list(start = c(0.0123, 0.5352, 0.6239, 0.6985, 0.1264, 
0.1932), end = c(0.123, 0.714, 0.789, 0.818, 0.216, 0.217), name = structure(c(1L, 
2L, 3L, 4L, 6L, 5L), .Label = c("A1", "A2", "B4", "D2", "H4", 
"V4"), class = "factor")), .Names = c("start", "end", "name"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

使用

制作图表
ggplot() + 
  geom_point(data=DF1, aes(X, Y)) +
  geom_errorbarh(data=DF2, aes(xmax=end, xmin=start, x=(start+end)/2, y=0)) +
  geom_text(data=DF2, aes(x=(start+end)/2, y=0, label=name))

enter image description here

您可以使用颜色来尝试区分底部的条形图,但如果它们中的条纹非常多,则很快就无法区分。

ggplot() + 
  geom_point(data=DF1, aes(X, Y)) +
  geom_errorbarh(data=DF2, aes(xmax=end, xmin=start, x=(start+end)/2, y=0, colour=name)) +
  geom_text(data=DF2, aes(x=(start+end)/2, y=0, label=name, colour=name)) +
  scale_colour_discrete(guide="none")

enter image description here