如何标记我的y轴,并在r中使一个简单的图形看起来很好?

时间:2015-03-24 22:51:30

标签: r plot axis

你好我必须使用r制作一个简单的图形,但是我想让它看起来很好,我在标记y轴时遇到了一些麻烦,到目前为止我写的是:

anim <- c(1.72,1.6,1.7,1.74,1.8)
mirr <- c(.80,.95,1.13,1.17,1.26)
g_range <- range(0.8, anim, mirr)
plot(anim, type="o", col="blue", ylim=g_range, axes=FALSE, ann=FALSE)
axis(1, at=1:5, lab=c(".5", ".6", ".7", ".8", ".9"))
axis(2, las=2, at=0:g_range[2])
axis(2)
box()
lines(mirr, type="o", pch=22, lty=2, col="red")
title(main="corr vs dprime", col.main="forestgreen", font.main=4)
title(xlab="Correlation", col.lab="black", font.main=4)
title(ylab="dprime", col.lab="black", font.main=4)
legend(1, g_range[2], c("anim", "mirr"), cex=0.8,
col=c("blue","red"), pch=21:22, lty=1:2);

给出了这个图:

enter image description here

我无法弄清楚如何使图形区域足够大以适应图例,以及如何正确标记我的y轴,我不知道侧面1来自哪里?新手所以任何帮助都会很棒!

2 个答案:

答案 0 :(得分:2)

如果您选择使用R中的base绘图功能,则可以解决您的每个问题。以下回复仅用于回顾和说明此问题的先前评论,并包括其他与SO相关的材料以获得额外帮助。

首先,让我们解决y轴问题。正如原始注释中所建议的那样,您当前正在相对于y轴调用axis命令两次。通过在早期确定所需的y轴限制,可以使用ylim参数轻松应用它们。

df<-data.frame(anim=c(1.72,1.6,1.7,1.74,1.8),mirr=c(.80,.95,1.13,1.17,1.26))
gmin<-min(df) #<---- ESTABLISH MIN Y-AXIS VALUE
gmax<-max(df) #<---- ESTABLISH MAX Y-AXIS VALUE
plot(df$anim,type="o",col="blue",ylim=c(gmin,gmax),axes=FALSE,ann=FALSE)
box()
axis(1,at=1:5,lab=seq(0.5,0.9,0.1))
axis(2,seq(gmin,gmax,0.2),las=2)
lines(df$mirr,type="o",pch=22,lty=2,col="red")
title(main="corr vs dprime",col.main="forestgreen",font.main=4)
title(xlab="Correlation",col.lab="black",font.main=4)
title(ylab="dprime",col.lab="black",font.main=4)

Image 1

其次,图例可以放在绘图区域内或放在外面。如原始评论中所述,输入?legend并查看x, y参数以定位您的图例。这可能是您最好的方法,因为您的x和y值范围很小,这样可以轻松放置图例。虽然不太具体,但您也可以使用关键字来指定图例的位置(详细信息下的?legend),例如“bottomright”,“bottom”,“bottomleft”,“left”,“topleft”,“top”,“ topright“,”right“和”center“。例如:

legend('bottomright', c("anim", "mirr"), cex=0.8,col=c("blue","red"), pch=21:22, lty=1:2)

Image 2 - Legend using keywords

调整参数(例如x.interspy.interspcex)可以更改图例的形状和相对大小。

此外,您可以使用ggplot2在绘图区域之外创建图例,如上一个答案所示。以下SO答案推荐了几个选项:Plot a legend outside of the plotting area in base graphics?。最常用的方法利用xpd中的par参数,然后使用x, y中的insetlegend参数。

如果不调整绘图区域的边距,您只需选择x和y参数,即可正确放置图例,而不会重叠其他项目。例如:

par(xpd=TRUE)
legend(4.5,2.1,c('anim','mirr'),cex=0.8,col=c('blue','red'),pch=21:22,lty=1:2)

enter image description here

可以使用bty中的legend参数控制关于图例的框。

如果您希望自己的传奇更像上一个答案,则需要查看mai中的maromapar参数,以便传说正确显示(see here)。配置完成后,您可以使用inset中的legend参数指定图例区域外的图例位置:

par(oma=c(0,0,0,1),mar=c(5.1,4.1, 4.1, 5.1),xpd=T)
plot(df$anim,type="o",col="blue",ylim=c(gmin,gmax),axes=FALSE,ann=FALSE)
box()
axis(1,at=1:5,lab=seq(0.5,0.9,0.1))
axis(2,seq(gmin,gmax,0.2),las=2)
lines(df$mirr,type="o",pch=22,lty=2,col="red")
title(main="corr vs dprime",col.main="forestgreen",font.main=4)
title(xlab="Correlation",col.lab="black",font.main=4)
title(ylab="dprime",col.lab="black",font.main=4)
legend('right',inset=c(-0.4,0),c('anim','mirr'),cex=0.8,col=c('blue','red'),pch=21:22,lty=1:2)

enter image description here

除了其他答案之外,我希望这篇小评论可以帮助您了解当前情况,并使用base和其他绘图功能展示R的灵活性。学分归于以前的用户和他们的评论以及其他SO答案。

答案 1 :(得分:1)

我使用ggplot2

anim <- c(1.72,1.6,1.7,1.74,1.8)
mirr <- c(.80,.95,1.13,1.17,1.26)

df <- data.frame(
dprime = c(anim, mirr),
correlation = rep(seq(.5,.9,.1), 2),
group = rep(c("anim", "mirr"), each=5)
)
# Uncomment if you don't have ggplot2 installed
# install.packages("ggplot2")

library(ggplot2)

g <- ggplot(df, aes(correlation, dprime, color=group)) + 
  geom_line() +
  geom_point() +
  ggtitle("Corr vs. Dprime")
g

enter image description here