3

我有一个如下所示的分发文件:

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

完整的数据可以在这里下载。

我想要做的是创建密度图,具有以下内容:

  1. 在 x=800 处放置一个geom_vline,并在图中显示值 800。
  2. 对于分布“条”,使用不同粗细的虚线,而不是正常的实线。

这样它就可以创建这样的图形。 在此处输入图像描述

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

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")
4

1 回答 1

6

要更改线的类型,您应该放在linetype=dat.Function里面aes()然后使用scale_linetype_manual()来更改线类型,类似于线条大小 - 放在size=dat.Function里面aes()然后使用scale_size_manual()来更改线宽(您应该删除size=0.5表格stat_density())要标记垂直线的位置,一种可能性是更改在 x 轴上用 . 中断scale_x_continuous()或在绘图内添加一些文本annotate()

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=800在轴下方,一种方法是使用网格对象,另一种可能是使用scale_x_continuous()and theme()。首先,在scale_x_continuos()设置800 位置使用breaks=和。现在 x 轴下有 6 个数字。使用并且您可以更改文本的功能。如果您为要更改的元素提供值向量,则每个轴文本将具有单独的特征(我为 2. 元素设置了不同的特征(文本 x=800))labels=x=800theme()axis.text.x=

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),
                     labels=c(0,"x=800",2500,5000,7500,10000))+
  theme(axis.text.x=
       element_text(color=c("grey35","red","grey35","grey35","grey35"),
                    size=rel(c(1,1.2,1,1,1,1)),
                    face=c("plain","bold","plain","plain","plain","plain")))

在此处输入图像描述

于 2013-04-08T10:49:12.753 回答