使用ggplot通过data.frame中的列填充矩形

时间:2015-06-23 12:50:25

标签: r ggplot2

我正在尝试用3个彩色矩形上的线创建一个ggplot。我想在数据库中插入每个矩形的正确填充颜色。 发生该列被视为一个因子,并自动设置填充颜色。 这是我的尝试:

library(ggplot2)

R<-rgb(185, 0, 51,alpha=1, maxColorValue=255)       
Y<-rgb(255, 255, 255,maxColorValue=255)     
G<-rgb(150, 191, 37,alpha=3,maxColorValue=255)      
R<-rgb(185, 0, 51,alpha=1, maxColorValue=255)       


sim<-seq(from=5000,to=14000,length.out=100) 
ut<-c(673,685,697,709,721,733,745,758,770,782,794,806,818,830,842,855,867,879,891,903,915,927,940,952,964,976,988,1000,1012,1025,1037,963,975,986,997,1008,1019,1030,1042,1053,1064,1075,1086,1097,1108,1120,1131,1142,1153,1164,1175,1186,1198,1209,1220,1231,1242,1253,1265,1276,1287,1298,1309,1320,1331,1176,1186,1195,1205,1215,1225,1235,1244,1254,1264,1274,1283,1293,1303,1313,1322,1332,1342,1352,1362,1371,1381,1391,1401,1410,1420,1430,1440,1449,1223,1231,1239,1247,1256,1264)

fasce<-data.frame(xmin=c(sim[1],7566,10517,13127),xmax=c(7566,10517,13127,13598),ymin=ut[1]*0.9,ymax=Inf,color=c(R,Y,G,R),stringsAsFactors =F)
data<-(data.frame(sim,ut))


ggplot() +geom_rect(data=fasce,aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax,fill=color))+
 geom_line(data=data, aes(x = sim, y = ut))+geom_hline(y=ut[1],xmin=sim[1]) 

我也有问题正确显示hline:我想从ut[1]

开始

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要使用scale_fill_identity来使用您提供的实际颜色名称。我从alpha中删除了rgb以获取颜色名称,因为这使事情变得复杂。如果要更改透明度,可以直接在ggplot2中进行。

要添加在图表中特定点开始或结束的水平线,我使用geom_segment代替geom_hline

我使用并放入数据集fasce的颜色。

R = rgb(185, 0, 51, maxColorValue=255)       
Y = rgb(255, 255, 255, maxColorValue=255)     
G = rgb(150, 191, 37, maxColorValue=255)     

ggplot() +
    geom_rect(data=fasce, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill=color)) +
    geom_line(data=data, aes(x = sim, y = ut)) +
    scale_fill_identity() +
    geom_segment(aes(x = min(sim), xend = Inf, y = ut[1], yend = ut[1]))

enter image description here

默认情况下,scale_fill_identity函数不会放置任何图例。如果你想要传奇,你可以使用scale_fill_identity(guide = "legend", breaks = fasce$color)留下的东西。