【问题标题】:questions about axes and mtext关于轴和多行文本的问题
【发布时间】:2013-05-16 20:22:38
【问题描述】:

我的 R 知识正在倒退。请帮忙!

示例数据:

Site, Aluminum_Dissolved, Federal_Guideline
M1, 0.1, 0.4
M1, 0.2, 0.4
M1, 0.5, 0.4
M2, 0.6, 0.4
M2, 0.4, 0.4
M2, 0.3, 0.4

我有一个简单的函数:

boxplot(ExampleData$Aluminum_Dissolved ~ ExampleData$Site, col="purple", 
        par (cex.axis=2, las=2), mar=c(7,4,4,2)+0.1

X 和 Y 轴标签:

一旦我将轴上的值增加这么多,我的 xlab 和 ylab 就会被轴文本遮挡。

  1. 我尝试过使用:

    `mpg=c(3,1,0)` 
    

    并更改值,但这似乎与保证金增加混淆了

    `mar=c(7,4,4,2)+0.1`
    
  2. 我尝试完全废弃 xlabylab 并使用 mtext,但我无法在与 y 轴平行的轴文本之外给我标签。我试过了:

    `mtext("Dissolved Aluminum", side=2, adj=0, las)` etc....
    

x 轴 45 度文本:

最后,我尝试重建我的 x 和 y 轴但无济于事,我似乎无法使用 SRT 函数将我的 x 轴标签旋转 45 度。我试过了:

boxplot(ExampleData$Aluminum_Dissolved ~ ExampleData$Site, col="purple",
        xaxt='n', yaxt='n', axis(2, cex.axis=2, xlab="Dissolved Aluminum"),
axis(1, cex.axis=2, srt=45)

这不起作用。我错过了什么。有没有一种简单的方法可以做到这一点我错过了......

【问题讨论】:

  • 我有点失落。您是否打算将所有 par 内容放在它自己的行中, boxplot 调用之前?因为把它放在 boxplot 命令中没有多大意义。
  • @joran。我一直在制作函数的方式,我插入 boxplot 调用,然后按照以下方式进行任何修改:[link]statmethods.net/advgraphs/axes.html 这之前工作正常,但当我玩边距和 mtext 时似乎搞砸了
  • 我在该链接中找不到与您使用的语法非常相似的任何内容。
  • 具体来说,paraxis 都是单独的函数,它们应该在单独的行上调用,在任何其他绘图调用之外,例如boxplot
  • @joran 我对此很陌生,我只是将我的代码放在一行中(是的,可能很荒谬,但它确实有效)。你的意思是我应该像这样组织我的代码吗? (但我不能运行这个..) italicbold'boxplot(MaiBelaData$AlD ~ MaiBelaData$Site, col="purple", ylab="Dissolved Aluminum" ) + par(cex.axis=2, cex.lab=1.8)'

标签: r axes


【解决方案1】:

快速教程:

在基本 R 图形中绘图的工作方式通常被认为是“纸上笔”模型。这意味着您调用的每个函数都会“在”您之前创建的内容上绘制。图形参数可以通过调用par 设置预先,或者直接传递给绘图函数(有一些注意事项)。例如,我会这样做:

par(cex.axis=2, las=2,mar=c(7,4,4,2)+0.1)
boxplot(Aluminum_Dissolved ~ Site,data = dat, 
        col="purple",ylab = "Dissolved Aluminum",xlab = "Dissolved Aluminum")

如果您想要自定义坐标轴,您可以这样做:

par(cex.axis=2, las=2,mar=c(7,4,4,2)+0.1)
boxplot(Aluminum_Dissolved ~ Site,data = dat, 
        col="purple",ylab = "Dissolved Aluminum",xlab = "Dissolved Aluminum",axes = FALSE)
axis(...)

pointslines 等内容的后续调用(在单独的行上)将分别在图形中添加点或线。

par 的警告是,某些参数只能通过直接调用 par 来设置,而不是通过将它们作为命名参数传递给绘图函数。在?par 有一个列表(包括mar)。

【讨论】:

  • 好的,非常感谢您花时间解释这一点!我真的不了解事物的基本顺序。非常感谢,它解释了为什么我会遇到各种错误。
【解决方案2】:

@joran 是对的——我想我只是弄乱了函数的顺序。尽管使用此代码的文本大小更大,但我仍使轴标签工作:

    boxplot(ExampleData$Aluminum_Dissolved ~ ExampleData$Site, col="purple", par(cex.axis=2, cex.lab=1.8), ylab="Dissolved Aluminum")

这样做的唯一问题是标签非常接近文本,但还可以。

【讨论】:

  • 我很高兴您找到了解决方案,但再一次,将par() inside 放在boxplot 调用中显然是非标准的,只能在偶然情况下起作用。如果您只是将 cex.axis=2, las=2, mar=c(7,4,4,2)+0.1 作为命名参数传递,您将看到您得到相同的结果。
  • 请参考@joran 的回答。这个有点假。
猜你喜欢
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2011-03-11
  • 2012-08-30
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
相关资源
最近更新 更多