首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2:根据颜色和线型区分线条

ggplot2:根据颜色和线型区分线条
EN

Stack Overflow用户
提问于 2015-07-08 01:05:44
回答 1查看 1.9K关注 0票数 1

因此,当我必须绘制很多线条时,我可以通过颜色或线型来区分它们

代码语言:javascript
复制
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手动指定颜色和线型)。

下面是我想要的输出的示例(加上自动生成的图例):

理想情况下是这样的命令

代码语言:javascript
复制
ggplot(pd, aes(x=x, y=y, style=type)) + geom_line() + theme_bw()

但我想这需要一个变通的方法。

附言:这样做的动机是20+的线条可能很难单独通过颜色或线型来区分,这就是为什么我正在寻找两者的组合。所以虚线红线不同于实线红线,这两条线也不同于实线蓝线。而且,我不想在每次向ggplot提供数据时自己指定和选择颜色和线型。

EN

回答 1

Stack Overflow用户

发布于 2016-12-14 07:05:09

您还可以通过三角形或圆形等几何图形来区分线条。如果你有很少的数据(比如100个样本),你可以简单地在绘图属性中选择type = "b“,但是如果你有很多数据(比如10000个样本),你可以在生成的线条上绘制几何图形,这样你就可以通过使用points()命令按你喜欢的方式对它进行间隔,在那里你可以指定点的x和y坐标。否则,图形将会相互重叠。示例(带代码):

代码语言:javascript
复制
#!/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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31275054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档