我想生成一个类似于此图的图形,但数据点上的符号更大,由其y轴值着色:
下面是一个使用我尝试过的代码的“最小示例”:
library(ggplot2)
strtT <- Sys.time()-30*(24*3600);
endT <- Sys.time()-24*3600
xAxis <- seq(from=strtT,to=endT,by=24*3600)
dat <- data.frame(x = xAxis,
y1 = rnorm(length(xAxis),mean=40,sd=30),
lab = "Y1")
fulldat <- dat;
dat <- data.frame(x = xAxis,
y1 = rnorm(length(xAxis),mean=15,sd=5),
lab = "Y2")
fulldat <- rbind(fulldat,dat);
dat <- data.frame(x = xAxis,
y1 = rnorm(length(xAxis),mean=80,sd=10),
lab = "Y3")
fulldat <- rbind(fulldat,dat);
gp<-ggplot(fulldat, aes(x,y1,color=y1)) +
# geom_point(aes(shape=(factor(lab)),size=6),show.legend=FALSE) +
geom_point(aes(shape=(factor(lab)),size=6)) +
# geom_line(aes(x,y1,linewidth=1.5,color=(14+as.numeric(factor(lab))))) +
geom_line(aes(group=factor(lab)),linewidth=1.0) +
scale_color_gradientn(colours=c("blue","gray80","red"), limits=c(0,max(dat$y1)),
breaks=c(15,30,45,60,75,90,110),
labels=c(1,2,3,4,5,6,7),
na.value = "green",
guide=guide_colorbar(nbin=10, raster=F, barwidth=2, frame.colour=c("black"),
frame.linewidth=1, ticks.colour="black")) +
theme(legend.position = "right")
gp
我无法解决的最大问题是,我希望线由变量“lab”着色,而Y1数据作为数据点,由其y轴值着色。在本例中,数据点和线都由y轴值着色。似乎无法将两者分开。
另一个问题是改善图例的外观。颜色条应该是全高的,线条样式的图例(实验室变量)应该在颜色条旁边,而不是下面。还有那个图例条目是什么,上面写着大小和一个实心点和'6'??我可以摆脱它吗?
1条答案
按热度按时间gkl3eglg1#
一般来说,在
ggplot2
中,每个美学都有一个比例,即您只能有一个color
比例。克服这个问题的一个选择是使用ggnewscale
包,该包允许每个美学有多个比例。因此,在geom_point
中将y1
Map到color
,然后为y1
添加scale_color_gradientn
。然后通过ggnewscale::new_scale_color()
添加新的色标,并添加线条和所需的颜色(在示例代码中,我通过scale_color_brewer
添加了一个brewer pal: