我对ggplot2很新,所以如果这篇文章过于愚蠢,请原谅我。 我使用以下代码绘制数据,但我无法获得发布所需的样式。
在输出中,我需要:
一个传奇。在我的数据案例中,opts(legend.position="top")
我不知道为什么之后没有任何内容。我还想将图例分成3列,例如columns=3
格中的auto.key
根据因子fill=c("white","grey20","grey70")
使用灰色系统(例如pl
)着色条形图,但似乎我无法使用scale_colour_manual
将x轴上的标签转为水平。
也许是y轴?但是,你认为这是必要的吗?
library(ggplot2)
wt<-gl(3,4,108,labels=c("W30","W60","W90"))
pl<-gl(3,12,108,labels=c("P0","P1","P2"))
gp<-gl(3,36,108,labels=c("A","B","C"))
dat<-cbind(A=runif(108),B=runif(108,min=1,max=10),C=runif(108,min=100,max=200),D=runif(108,min=1000,max=1500))
dat.df<-data.frame(wt,pl,gp,dat)
dat.m<-melt(dat.df)
ggplot(dat.m,aes(x=wt,y=value,group=pl,facet=gp,fill=pl))+
stat_summary(fun.y=mean,geom="bar",size=2,position="dodge")+
stat_summary(fun.ymin=function(x)(mean(x)-sd(x)/sqrt(length(x))),geom="errorbar",
fun.ymax=function(x)(mean(x)+sd(x)/sqrt(length(x))),position="dodge")+
facet_grid(variable~facet,scale="free_y")+ opts(legend.position="top")+
scale_colour_manual(values = c("red", "blue", "green"))
答案 0 :(得分:6)
以下是一些提示:
要获取水平图例,请使用opts(legend.direction="horizontal")
要更改条形的填充,您必须指定scale_fill_manual(values=c("white", "grey20", "grey70"))
。在您的示例中,您已将填充正确映射到pl。唯一缺少的步骤是将手动刻度映射到填充,而不是颜色。颜色一般是指条形的轮廓,而填充是指条形的内部。
要旋转轴文本的角度,请使用opts(axis.text.x = theme_text(angle=45))
。默认方向是水平的,因此我使用45度进行说明。
我不知道你的意思是“也许是y轴”。也许你不想显示y轴,在这种情况下你可以通过opts(axis.title.y = theme_blank())
请注意,您的示例不可重现,因此我不得不发明一些数据。如果您确保您的示例可以重现,您可以让我们更容易回复:
year
trt
的引用
grp
设置了数据,但随后将其称为gp
我的代码:
dat.df <- data.frame(
gp = gl(3, 36, 108, labels=c("A", "B", "C")),
yr = sample(2000:2010, 108, replace=TRUE),
A=runif(108),
B=runif(108, min=1, max=10),
C=runif(108, min=100, max=200),
D=runif(108, min=1000, max=1500)
)
dat.m <- melt(dat.df)
ggplot(dat.m, aes(x=wt, y=value, group=pl, facet=gp, fill=pl))+
stat_summary(fun.y=mean, geom="bar", size=2, position="dodge")+
stat_summary(fun.ymin=function(x)(mean(x)-sd(x)/sqrt(length(x))), geom="errorbar",
fun.ymax=function(x)(mean(x)+sd(x)/sqrt(length(x))), position="dodge")+#, position="dodge"
facet_grid(variable~facet, scale="free_y")+
scale_fill_manual(values=c("white", "grey20", "grey70")) +
opts(
legend.position="top",
legend.direction="horizontal",
axis.text.x = theme_text(angle=45),
axis.title.y = theme_blank()
)