【问题标题】:Legend linetypes not displaying properly ggplot图例线型未正确显示ggplot
【发布时间】:2013-08-07 14:51:23
【问题描述】:

我有以下情节:

ggplot(proba[108:140,], aes(c,four, color="a1")) + 
   geom_line(linetype=1, size=0.3) + 
   scale_x_continuous(breaks=seq(110,140,5)) + 
   theme_bw() + 
   theme(axis.line = element_line(colour = "black", size=0.25),
         panel.grid.major = element_blank(),
         panel.grid.minor = element_blank(),
         panel.border = element_blank(),
         panel.background = element_blank()) + 
   theme(axis.text.x = element_text(angle = 0, hjust = +0.5, size=6,color="black")) + 
   theme(axis.text.y = element_text(angle = 0, hjust = -100, size=6, color="black")) + 
   theme(axis.ticks=element_line(colour="black",size=0.25)) + 
   xlab("\nTime-steps")+ylab("Proportion correct\n") + 
   theme(axis.text=element_text(size=8),
         axis.title=element_text(size=8)) + 
   geom_line(aes(c,three, color="a2"), size=0.2, linetype=2) + 
   geom_line(aes(c,one, color="a3"),linetype=3, size=0.8) + 
   geom_line(aes(c,two, color="a4"), linetype=1, size=0.6) + 
   scale_color_manual(values=c("a1"="red3", "a2"="red3","a3"="blue3","a4"="blue3")) + 
   theme(legend.title = element_text(colour="black", size=7)) + 
   theme(legend.position="bottom" ,
         legend.direction="horizontal", 
         legend.title=theme_blank()) + 
   theme(legend.text=theme_text(size=7), 
         legend.background=theme_blank(), 
         legend.key=theme_blank())

图上的四条线以不同的线型显示,但图例并未显示这些不同的线型,仅显示不同的颜色。我显然在 theme() 中遗漏了一个非常简单的论点,但我无法弄清楚它是什么。也许我需要在 scale_colour_manual() 中再次指定线型?

这是数据:https://dl.dropboxusercontent.com/u/22681355/proba.csv

proba<-read.csv("proba.csv",head=T)

【问题讨论】:

  • 如果您将数据以正确的格式(即melted)并将变量实际映射到美学,这会容易得多。然后会自动创建图例。
  • 是的,你是对的,但我对 melt() 不熟悉,我已经花了很多精力来创建这个情节..

标签: r ggplot2


【解决方案1】:

在这里,这是在 ggplot2 中执行此操作的正确方法:

proba <- read.csv("~/Downloads/proba.csv")

proba1 <- proba[108:140,]
proba1 <- melt(proba1,id.vars = 1:2)

ggplot(proba1,aes(x = c,y = value,colour = variable,linetype = variable,size = variable)) + 
    geom_line() + 
    scale_x_continuous(breaks=seq(110,140,5)) +
    scale_colour_manual(values=c("blue3","blue3","red3","red3")) + 
    scale_linetype_manual(values = c(2,1,3,1)) + 
    scale_size_manual(values = c(0.2,0.3,0.8,0.6)) + 
    xlab("\nTime-steps") + 
    ylab("Proportion correct\n") +
    theme_bw() +
    theme(axis.text=element_text(size=6),
          axis.title=element_text(size=8),
          axis.line = element_line(size=0.25),
          axis.ticks=element_line(size=0.25),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          panel.border = element_blank(),
          panel.background = element_blank(),
          legend.position="bottom" ,
          legend.direction="horizontal", 
          legend.title=element_blank(),
          legend.text=element_text(size=7), 
          legend.background=element_blank(), 
          legend.key=element_blank())

尝试在一次调用 theme 时完成所有主题调整,否则事情会变得非常混乱。另外,你有一些电话给theme_*,本来应该是element_*

【讨论】:

  • 最后一个问题:我能否以某种方式修改代码以仅绘制其中一行或两行而无需更改数据?
  • @user1723765 如果p 是完整的情节,那么p %+% subset(proba1,variable %in% c('one','two'))
  • 是的,但这不会坚持原来的线条颜色和线型,而是无论我绘制哪条线,它总是使用相同的线型
  • @user1723765 是的,您必须修改所有 scale_*_manual 规范才能匹配。
  • 我不明白。我创建了一个变量 p 这是情节,然后我使用您的子集命令对吗?否则,如果我将 scale_*_manual 更改为单个值但保持其他所有内容不变,那么我会告诉我我没有指定 4 个不同的级别
猜你喜欢
  • 2021-12-23
  • 2019-11-19
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 2021-04-02
相关资源
最近更新 更多