GGPLOT - 如何根据预定义标签区分线条并在x轴上添加文本

时间:2013-04-08 10:33:30

标签: r plot ggplot2

我有一个看起来像这样的发行版文件:

Function Freq
foo 1117
...
qux 1992
..
bar 4158
..

可以下载完整的数据here

我想要做的是创建密度图,具体如下:

  1. geom_vline放在x = 800处,并在图中显示值800。
  2. 对于分配'bar',请使用不同厚度的虚线,而不是正常的实线。
  3. 这样就可以创建这样的图形。 enter image description here

    但是我坚持使用以下代码。最好的方法是什么?

    library(ggplot2)
    library(RColorBrewer)
    
    pal <- c(brewer.pal(8,"Dark2"),brewer.pal(12,"Paired"));
    dat<-read.table("http://dpaste.com/1051018/plain/",header=TRUE);
    dat.sub <- data.frame(dat$Function,dat$Freq)
    
    
    ggplot(dat.sub,aes(dat.Freq,color=dat.Function),shape=dat.Function)+
    stat_density(geom="path",position="identity",size=0.5)+
    theme(legend.position="none")+
    scale_color_manual(values=pal)+
    geom_vline(xintercept=800,colour="red",linetype="longdash")
    

1 个答案:

答案 0 :(得分:6)

要更改行的类型,您应将linetype=dat.Function放在aes()内,然后使用scale_linetype_manual()更改行类型,类似于行大小 - 将size=dat.Function置于aes()内{1}}然后使用scale_size_manual()更改线宽(您应该删除size=0.5形式stat_density())要标记垂直线的位置,一种可能性是使用{{更改x轴上的中断1}}或使用scale_x_continuous()在地块内添加一些文字。

annotate()

enter image description here

如果您想在文本ggplot(dat.sub,aes(dat.Freq,color=dat.Function, linetype=dat.Function,size=dat.Function))+ stat_density(geom="path",position="identity")+ scale_color_manual(values=pal)+ geom_vline(xintercept=800,colour="red",linetype="longdash")+ scale_linetype_manual(values=c(2,1,1))+ scale_size_manual(values=c(2,0.8,0.8))+ scale_x_continuous(breaks=c(0,800,2500,5000,7500,10000))+ annotate("text",label="x=800",x=800,y=-Inf,hjust=0,vjust=1) 下放置一个方法是使用网格对象,则可以使用x=800scale_x_continuous()。首先,在theme()中设置scale_x_continuos()breaks=,使用位置800设置labels=。现在x轴下有6个数字。使用x=800theme(),您可以更改文字的功能。如果为要更改的元素赋予值向量,则每个轴文本将具有单独的特征(我为2.元素设置了不同的特征(文本x = 800))

axis.text.x=

enter image description here