我想要使用data.frame
+ ggplot
以facet_wrap
的方式绘制这个set.seed(1)
df <- data.frame(val=rnorm(36),
gt=c(sapply(c("wt","pd","md","bd"),function(x) rep(x,9))),
ts=rep(c(sapply(c("cb","hp","ac"),function(x) rep(x,3))),4),
col=c(sapply(c("darkgray","darkblue","darkred","darkmagenta"),function(x) rep(x,9))),
index=rep(1:9,4),
stringsAsFactors=F)
df$xlab <- paste(df$ts,df$index,sep=".")
df$gt <- factor(df$gt,levels=c("wt","pd","md","bd"))
:
require(ggplot2)
ggplot(df,aes(x=index,y=val,color=gt))+geom_point(size=3)+facet_wrap(~gt,ncol=4)+
scale_fill_manual(values=c("darkgray","darkblue","darkred","darkmagenta"),labels=levels(df$gt),name="gt",guide=F)+
scale_colour_manual(values=c("darkgray","darkblue","darkred","darkmagenta"),labels=levels(df$gt),name="gt",guide=F)+
labs(x="replicate",y="val")+scale_x_continuous(breaks=df$index,labels=df$xlab)+
theme_bw()+theme(axis.text=element_text(size=6),axis.title=element_text(size=7),legend.text=element_text(size=6),legend.key=element_blank(),panel.border=element_blank(),strip.background=element_blank())
以下是我试图绘制的方式:
scale_x_continuous
给出了:
问题是x0axis刻度标签重复了,因为我正在调用facet_wrap
。如何使用setDisplayHomeAsUpEnabled
来解决问题?
答案 0 :(得分:1)
将xlab
中的实际x值与scales="free_x"
中的facet_wrap
一起使用,并删除对scale_x_continuous
的调用。但请注意,每个面板中的轴标签仍然相同,因为它们对于数据中的每个gt
级别都是相同的。
ggplot(df,aes(x=xlab, y=val, color=gt)) +
geom_point(size=3, show.legend=FALSE) +
facet_wrap(~gt, ncol=4, scales="free_x") +
# scale_fill_manual(values=c("darkgray","darkblue","darkred","darkmagenta"), labels=levels(df$gt), name="gt", guide=F) +
scale_colour_manual(values=c("darkgray","darkblue","darkred","darkmagenta")) +
labs(x="replicate", y="val") +
#scale_x_continuous(breaks=df$index, labels=df$xlab)+
theme_bw() +
theme(axis.text=element_text(size=8),
axis.title=element_text(size=7),
legend.text=element_text(size=6),
legend.key=element_blank(),
panel.border=element_blank(),
strip.background=element_blank())
现在让我们改变xlab
,看看当不同的面板确实有不同的标签时这是如何工作的:
df$xlab[10:20] = LETTERS[1:11]
现在再次运行相同的绘图代码以获得以下内容:
另外一个意外情况是并非所有面板都具有相同数量的x值。在这种情况下,如果您希望每个面板的宽度与每个面板中的x值数量成比例,则可以切换到facet_grid
并添加space="free_x"
。
ggplot(df[-c(1:5),], aes(x=xlab, y=val, color=gt)) +
geom_point(size=3, show.legend=FALSE) +
facet_grid(.~gt, space="free_x", scales="free_x") +
scale_colour_manual(values=c("darkgray","darkblue","darkred","darkmagenta")) +
labs(x="replicate", y="val") +
theme_bw() +
theme(axis.text=element_text(size=8),
axis.title=element_text(size=7),
legend.text=element_text(size=6),
legend.key=element_blank(),
panel.border=element_blank(),
strip.background=element_blank())
其他一些事情:
您不需要为数据框添加颜色名称。如果要更改默认颜色,可以使用scale_colour_***
函数之一设置它们(就像在代码中一样)。
为了将来参考,可以将此c(sapply(c("darkgray","darkblue","darkred","darkmagenta"),function(x) rep(x,9)))
更改为此rep(c("darkgray","darkblue","darkred","darkmagenta"), each=9)
。
您可以移除scale_fill_manual
行,因为您的图表中没有fill
美学。