如何在ggplot中绘制具有特定坐标的线?

时间:2018-06-15 11:56:18

标签: r ggplot2

这是一个棘手的问题,因为我正在弯曲ggplot的规则。

请看下面的例子。 我想用一条线(中心到中心)连接每对黑色和灰色的光线。

我尝试使用geom_path()。请参阅注释掉的行,这将产生错误消息:“错误:美学必须是长度1或与数据(6)相同:x,y,颜色,组”

我认为geom_path()和geom_line()可能不是正确的方法。我想我需要用指定坐标绘制一条线的东西,然后我试着找出一种提供坐标的方法(类似于geom_rect)。 有办法吗?

#create dataframe 
set.seed(1)
N = 20
rownameorder <- c("C", "B", "A", "D", "E", "F")
datforgraph <- data.frame( 
    ID = rep(c(1001:1020), each=6), 
    CLASS = rep(20, N*6),
    TEST = rep(rownameorder, N), 
    T1 = round(rnorm(N*6, 50, 10)), 
    T2 = round(rnorm(N*6, 50, 10))
)
datforgraph$T1UPPER <- datforgraph$T1 + 5
datforgraph$T1LOWER <- datforgraph$T1 - 5
datforgraph$T2UPPER <- datforgraph$T2 + 5
datforgraph$T2LOWER <- datforgraph$T2 - 5
studentdata <- subset(datforgraph, ID==1002)

#create graphics
COLORS <- c("#FF9999", "#FFFF99", "#99FF99", "#99C199", "#9999FF")
RECTS <- data.frame(ystart = c(20,30,40,60,70), yend = c(30,40,60,70,80))
ggp <- ggplot() + 
    coord_cartesian(ylim=c(10,90), expand=FALSE) + 
    scale_x_discrete() + 
    scale_y_continuous() + 
    geom_blank(data=studentdata, aes(x=factor(TEST, rownameorder))) + 
    geom_rect(data=RECTS, aes(ymin=ystart, ymax=yend, xmin=0, xmax=7), fill=COLORS) + 
    geom_rect(data=studentdata, fill="black", alpha=0.99, color="black", size=0.1, aes(xmin=as.numeric(factor(TEST, rownameorder)) - 0.3, xmax=as.numeric(factor(TEST, rownameorder)) - 0.1, ymin=T1LOWER , ymax=T1UPPER)) + 
    geom_rect(data=studentdata, fill="darkgrey", alpha=0.99, color="black", size=0.1, aes(xmin=as.numeric(factor(TEST, rownameorder)) + 0.1, xmax=as.numeric(factor(TEST, rownameorder)) + 0.3, ymin=T2LOWER , ymax=T2UPPER)) + 
    #geom_path(data=studentdata, mapping=aes(x=c(as.numeric(factor(TEST, rownameorder)) - 0.3, as.numeric(factor(TEST, rownameorder)) + 0.3), y=c(T1, T2), color=factor(TEST, rownameorder), group=1)) + 
    theme_classic() + 
    theme(axis.line.y = element_blank(), axis.title.y = element_blank(), axis.ticks.y = element_blank(), axis.text.y = element_blank()) + 
    xlab("") + 
    ylab("")
ggp

1 个答案:

答案 0 :(得分:2)

ggp + 
geom_segment(data = studentdata,aes(x = c(0.9:5.9), y = T1, xend = c(1.1:6.1), yend = T2))

从您的第xmax=as.numeric(factor(TEST, rownameorder)) - 0.1行和aes(xmin=as.numeric(factor(TEST, rownameorder)) + 0.1开始,我提取了段的相应x坐标,它们应该低于0.1并且整数高于0.1。

enter image description here