如何标记我的 y 轴,并使简单的图形在 r 中看起来不错?
How to do I label my y axis, and make a simple graph look good in r?
嗨,我必须使用 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);
给出这张图:
我不知道如何使图形区域足够大以舒适地容纳图例,以及如何正确标记我的 y 轴,我不知道横向 1 从何而来? r 新手所以任何帮助都会很棒!
我会使用 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
如果您选择继续使用 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)
其次,图例既可以放在绘图区内,也可以放在绘图区外。按照原始评论中的建议,输入 ?legend
并查看 x, y
参数以定位您的图例。这可能是您最好的方法,因为您的 x 和 y 值范围很小,这样可以轻松放置图例。虽然不太具体,但您也可以使用关键字来指定图例的位置(?legend
under Details),例如 "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)
调整参数,例如 x.intersp
、y.intersp
和 cex
,将允许您更改图例的形状和相对大小。
此外,您可以使用 ggplot2
在绘图区域之外创建图例,如上一个答案所示。以下 SO 答案中推荐了几个选项:Plot a legend outside of the plotting area in base graphics?。最流行的方法利用 par
中的 xpd
参数,然后是 legend
中的 x, y
或 inset
参数。
无需调整绘图区域的边距,您只需 select 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)
可以使用 legend
中的 bty
参数控制有关图例的框。
如果您希望您的图例更像之前的答案,您将需要查看 par
中的 mai
、mar
和 oma
参数,以便图例已正确显示 (see here)。配置完成后,您可以使用 legend
:
中的 inset
参数指定绘图区域之外的图例位置
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)
除其他答案外,我希望这篇简短的评论对您当前的情况有所帮助,并展示了 R 使用 base
和其他绘图功能的灵活性。感谢以前的用户及其评论以及其他 SO 答案。
嗨,我必须使用 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);
给出这张图:
我不知道如何使图形区域足够大以舒适地容纳图例,以及如何正确标记我的 y 轴,我不知道横向 1 从何而来? r 新手所以任何帮助都会很棒!
我会使用 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
如果您选择继续使用 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)
其次,图例既可以放在绘图区内,也可以放在绘图区外。按照原始评论中的建议,输入 ?legend
并查看 x, y
参数以定位您的图例。这可能是您最好的方法,因为您的 x 和 y 值范围很小,这样可以轻松放置图例。虽然不太具体,但您也可以使用关键字来指定图例的位置(?legend
under Details),例如 "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)
调整参数,例如 x.intersp
、y.intersp
和 cex
,将允许您更改图例的形状和相对大小。
此外,您可以使用 ggplot2
在绘图区域之外创建图例,如上一个答案所示。以下 SO 答案中推荐了几个选项:Plot a legend outside of the plotting area in base graphics?。最流行的方法利用 par
中的 xpd
参数,然后是 legend
中的 x, y
或 inset
参数。
无需调整绘图区域的边距,您只需 select 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)
可以使用 legend
中的 bty
参数控制有关图例的框。
如果您希望您的图例更像之前的答案,您将需要查看 par
中的 mai
、mar
和 oma
参数,以便图例已正确显示 (see here)。配置完成后,您可以使用 legend
:
inset
参数指定绘图区域之外的图例位置
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)
除其他答案外,我希望这篇简短的评论对您当前的情况有所帮助,并展示了 R 使用 base
和其他绘图功能的灵活性。感谢以前的用户及其评论以及其他 SO 答案。