因此,当我必须绘制很多线条时,我可以通过颜色或线型来区分它们
library(ggplot2)
pd = cbind.data.frame(x = rep(c(1,2), each = 4),
y = rep(1:4, times=2),
type = rep(c("A", "B", "C", "D"), times=2))
ggplot(pd, aes(x=x, y=y, col=type)) + geom_line() + theme_bw()
ggplot(pd, aes(x=x, y=y, lty=type)) + geom_line() + theme_bw()给予:


但是我想要这两种颜色和线型,而且我希望自动选择颜色和线型(即,我不想像这个问题:ggplot2 manually specifying color & linetype - duplicate legend那样为每个type手动指定颜色和线型)。
下面是我想要的输出的示例(加上自动生成的图例):

理想情况下是这样的命令
ggplot(pd, aes(x=x, y=y, style=type)) + geom_line() + theme_bw()但我想这需要一个变通的方法。
附言:这样做的动机是20+的线条可能很难单独通过颜色或线型来区分,这就是为什么我正在寻找两者的组合。所以虚线红线不同于实线红线,这两条线也不同于实线蓝线。而且,我不想在每次向ggplot提供数据时自己指定和选择颜色和线型。
发布于 2016-12-14 07:05:09
您还可以通过三角形或圆形等几何图形来区分线条。如果你有很少的数据(比如100个样本),你可以简单地在绘图属性中选择type = "b“,但是如果你有很多数据(比如10000个样本),你可以在生成的线条上绘制几何图形,这样你就可以通过使用points()命令按你喜欢的方式对它进行间隔,在那里你可以指定点的x和y坐标。否则,图形将会相互重叠。示例(带代码):

#!/usr/bin/Rscript
args = commandArgs(trailingOnly=TRUE)
dataLocation = args[1]
fileName = args[2]
abs_path = args[3]
myData <- read.csv(dataLocation, sep = ";")
#paste0 concatenates two strings
fullFileName = paste0(abs_path,fileName)
#plot first line
png(fullFileName, width = 1300, height = 600)
plot(myData[,1], type = "l", cex = 2, cex.axis = 3.0, lty = 1 ,cex.lab = 3.0, ylim = c(0, max(myData)), xlab = "Iteração", ylab = "Valor")
limit = ncol(myData)
if(limit > 1){
for (column in 2:limit){
lines(myData[,column], lty = 1, type = "l")
}
}
for(i in 1:500){
if(i %% 100 == 0){
points(i, myData[i,1], pch = 16, cex = 1.5)
points(i, myData[i,2], pch = 24, cex = 1.5)
points(i, myData[i,3], pch = 0, cex = 1.5)
points(i, myData[i,4], pch = 15, cex = 1.5)
}
}
dev.off()https://stackoverflow.com/questions/31275054
复制相似问题