如何在R中减少轴刻度和轴标签之间的间距

5

I have the below plot generated in R:

Code:

ecdf.bdel<-ecdf(bDE[,6])  #### cumulative distribution of a vector of numeric values

curve(1-ecdf.bdel(x),col="red",xlim=r,xlab="r2",ylab="Fraction of SVs tagged") ###plotting inverse ecdf curve

在此输入图片描述

该图的数据展示没什么问题。不过,坐标轴刻度和标签之间,以及标签和轴标题之间存在着很大的空白。

请问有什么方法可以缩小这些空白呢?


使用 plot(inv,type="l",col="red",xlim=r,xlab="r2",ylab="Fraction of SVs tagged") 能解决问题吗?您可以定义 inv<-1-ecdf.bdel(x) 您想要绘制的点。 - Waqas
使用plot函数会出现错误:Error in .approxfun(x, y, v, method, yleft, yright, f) : object 'x' not found - chas
抱歉有些混淆。我指的是补充累积分布函数图。 - chas
我再次检查了一下,在我的机器上通过删除“xlim=r”并按照我的方式读取文件,它可以正常工作。 - Waqas
ecdf.bdel<-ecdf(bDE[,6]) #### 对一个数值向量进行累积分布 第六列是V1值的频率吗? - Sowmya S. Manian
显示剩余4条评论
2个回答

16

像这样插入mgp参数,看看是否有效。还要查看mar参数以获取所有边缘的边距。您可以在par()函数中同时使用两者来解决问题。

   par(mgp=c(3,1,0),mar(5,4,4,2)+0.1)
   curve(1-ecdf.bdel(x),col="red",xlab="r2",ylab="Fraction of SVs tagged") 

mgp 中的第一个值是您的轴标签靠近或远离轴的位置,较小的值表示更靠近轴,较大的值表示远离轴,在x轴和y轴上均适用。

mgp 中的第二个值是您的刻度标签靠近或远离刻度线的位置,较小的值表示更靠近刻度线,较大的值表示远离刻度线,在x轴和y轴上均适用。

mgp 中的第三个值是您的刻度线靠近或远离轴线本身的位置,较小的值表示更靠近轴线,较大的值表示远离轴线,在x轴和y轴上均适用。

mar 是一个数字向量,形式为 c(bottom, left, top, right),它给出了图形四个边缘需要指定的边距行数。默认值为 c(5, 4, 4, 2) + 0.1

curve() 函数中删除 xlim。您的图形条件。

  par(mgp=c(10,4,0),mar=c(11,11,5,5)+0.1)
  curve(1-ecdf.bdel(x),col="red",xlab="r2",ylab="Fraction of SVs tagged") 

在这里输入图片描述

 par(mgp=c(3,1,0),mar=c(5,4,4,2)+0.1)
 curve(1-ecdf.bdel(x),col="red",xlab="r2",ylab="Fraction of SVs tagged") 

在此输入图片描述

示例:使用 plot 而不是 curve。它们很相似。

第一种情况:

    par(mgp=c(7,3,0),mar=c(8,8,5,5)+0.1)
    plot(1:10,xlab="X Axis", ylab="Y Axis", main="My Plot")

输入图片描述

第二种情况

    par(mgp=c(3,1,0),mar=c(5,4,4,2)+0.1)
    plot(1:10,xlab="X Axis", ylab="Y Axis", main="My Plot")

输入图片说明


无论 mpg 和 mar 的值是什么,出于某种原因,我最终得到了相似的情节!!! - chas
请问您能否分享绘制此图所需的全部代码?我们已经有了数据,请添加 sessionInfo() 以便我们知道您正在使用哪台机器。 - Sowmya S. Manian
以下三个步骤应该有效。 >ecdf.bdel<-ecdf(df[,1]) >par(mgp=c(3,1,0),mar=c(5,4,4,2)+0.1) >curve(1-ecdf.bdel(x),col="red",xlab="r2",ylab="Fraction of SVs tagged") - Sowmya S. Manian
1
它可以工作。但是如何将其保存为300dpi分辨率的PNG文件? - chas
png("Plot.png", width = 4, height = 4, units = 'in', res = 300) ecdf.bdel<-ecdf(df[,1]) par(mgp=c(3,1,0),mar=c(5,4,4,2)+0.1) curve(1-ecdf.bdel(x),col="red",xlab="r2",ylab="Fraction of SVs tagged") dev.off()
- Sowmya S. Manian
在你的代码中添加第一个和最后一个命令,即 png()dev.off()。在这两个命令之间,放置你的代码,就像上面的评论中所示。然后检查你当前的工作目录,那里会有你的 png 文件。 - Sowmya S. Manian

0

在此输入图像描述这是你想要的吗?我没有其他选项来展示这个图表,如果这是你想要的,我会添加代码。

这就是我所做的:

data<-read.table("Ld.txt",F)
ecdf.bdel<-ecdf(data$V1)  #### cumulative distribution of a vector of numeric values

curve(1-ecdf.bdel(x),col="red",xlab="r2",ylab="Fraction of SVs tagged") ###plotting inverse ecdf curve

enter image description here


我没有看到代码与我的有任何区别。但是我在轴和标签之间遇到了奇怪的空格问题。 - chas
我去掉了xlim。只需在文件上尝试,它应该能工作。另外,您读取文件的方式可能存在问题。我使用了V1,在“read.table”中使用F。 - Waqas
没问题!很高兴我能有所帮助。 - Waqas
我发帖太早了,以为问题解决了。但无论哪种解决方案,都存在空间问题。问题仍然存在。 - chas
你移除了 xlim 吗? - Waqas
让我们在聊天中继续这个讨论。 - Waqas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接