【问题标题】:R - the simplest way to move legend when plotting rasterR - 绘制栅格时移动图例的最简单方法
【发布时间】:2015-12-07 11:57:52
【问题描述】:

我需要绘制光栅文件。

在我的输出图像中,图例上的数字有时不可见 - 特别是当我将图形窗口拆分为两列或多列时(例如:par(mfrow=c(1,2)))。

我考虑将图例移至底部(光栅图像下方)以解决此问题。 但是,我发现的大多数示例都建议使用全新的颜色和项目定义创建全新的图例。

我想使用默认图例。我只需要把它移到底部。我尝试按如下方式执行此操作:

library('raster')
data(volcano)
r <- raster(volcano)
# Trying to draw default legend below raster plot
plot(r, legend=F)
# Now trying to draw legend. Default is okay for me, I want to move it below only:
plot(r, legend.only=TRUE, legend.args=list("bottom", text='My values [m^3]'))

不幸的是,我的代码不起作用(似乎没有使用“底部”参数)。

【问题讨论】:

  • 你有没有遇到过修改图例文字颜色的方法?
  • 不,我不需要更改图例文本的颜色。

标签: r plot r-raster


【解决方案1】:

tl;博士

尝试将horizontal = TRUE 传递给plot() 函数调用。

library('raster')

data(volcano)
r <- raster(volcano)

plot(r, legend.only=TRUE, horizontal = TRUE, legend.args = list(text='My values [m^3]'))

调整

您现在可以将side=line= 参数传递给legend.args 列表,以指定您想要图例标签的位置(默认为side = 3line = 0)。例如,您可以使用 side = 1 将“我的值 [m^3]”文本放在图例下方,并使用 line = 2 将其与图例隔开一点(而不是在图例上方!)。

plot(r, legend.only=TRUE, horizontal = TRUE, 
        legend.args = list(text='My values [m^3]', side = 1, line = 2))

高级调整

如果您想在绘图的右侧或底部以外的地方绘制图例,您必须首先使用 axes = FALSE 绘制栅格,然后再次绘制它,但将其作为参数传递 legend.only = TRUE 和 @ 987654336@ 指定在绘图区域的哪个位置绘制彩色框。

背景

诀窍在于legend.args 列表被传递给mtext() 函数,因此在基础R 中定义图例位置的标准方法是使用legend() 函数并使用x= 参数(例如, "bottom", "bottomright") 不可用。

您可能认为axis.args 列表会有所帮助,因为它也(可能与直觉相反)控制图例的绘制方式。 axis.args 列表被传递给 axis() 函数以绘制图例的一些特征,axis() 函数有一个 side= 参数来设置轴(在我们的例子中是图例)将在绘图的哪一侧被画下来!但是不,side= 参数是在绘制栅格图期间通过其他方式设置的。

你可能会问这些是什么意思?这是horizontal= 参数!

horizontal= 参数可以传递给 plot() 调用来说明您是否希望光栅图例位于绘图的右侧(默认情况下,horizontal = FALSEside= 参数设置为 4 axis() 绘制图例的函数调用)或绘图底部(当 horizontal = TRUE 在绘制图例的 `axis() 函数调用中将 side= 参数设置为 1 时)

【讨论】:

    【解决方案2】:

    Here是一种使用rasterVis的方式:

    library(rasterVis)
    levelplot(r, margin=FALSE, colorkey=list(space="bottom"), par.settings = RdBuTheme())
    

    【讨论】:

    • rasterVis之外有没有办法修改图例的文字颜色?我正在使用smallplot 将我的图例放在我的情节中
    【解决方案3】:

    或者试试spplot,同样使用包lattice

    spplot(r, scales = list(draw = TRUE), colorkey = list(space = "bottom"))
    

    【讨论】:

    • 这行得通,但我也在我的栅格中添加了一些 shapefile,例如:plot(punktyPom,add=T, lwd=c(1), lty=c(1))spplot 似乎无法正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2021-09-17
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多