gpt4 book ai didi

r - 如何在 R 和 ggplot2 中的背景图像上拟合绘图

转载 作者:行者123 更新时间:2023-12-04 14:23:58 25 4
gpt4 key购买 nike

我正在尝试拟合显示在背景图像上的图。由于清晰度的损失,我无法过度拉伸(stretch)图像。因此,我必须将情节放在比情节薄得多的背景图像上。我不知道怎么做。请看附图:

Example plot

这是示例 R 代码:

library(ggplot2)
library(readxl)
library(jpeg)
library(grid)

# find the ".jpg" image files and parse them to get the depth ranges for each image
setwd('~/R/Image_Example')
image_file <- "C1_9195-9197.jpg"
# read in the image file
img <- readJPEG(image_file)
g <- rasterGrob(img, interpolate = FALSE)

# read in the CT data
df_ct <- read_excel("CT_Doris25_short.xlsx", col_names = FALSE)

g_ct <- ggplot(data=df_ct) +
annotation_custom(g, xmin=min(df_ct$X1), xmax=max(df_ct$X1), ymin=-Inf, ymax=Inf) +
geom_path(aes_string(x=df_ct$X1, y=df_ct$X0), color='cyan') +
scale_y_reverse() +
theme(plot.margin = unit(c(0,0,0,0), "lines"))

g_ct

如你看到的,
  • 我正在尝试调整 annotation_custom 中的 xmin 和 xmax。有没有办法让以“青色”显示的绘图完全适合背景图像的“宽度”?我不介意图表是否更薄并且未显示 X 轴。事实上,当我使用 gridExtra 包将绘图与许多其他绘图组装在一起时,我就是这样做的。
  • 我想在所示图像的顶部显示起始深度 9195,在图像底部显示结束深度 9197。然后我不需要Y轴。我知道如何抑制 X 轴和 Y 轴标签的显示。所以这不是问题。我打开它们以进行澄清。可以以编程方式完成吗?
  • 如您所见,沿 Y 轴的刻度以 0.5 的步长变化,即 9195、9195.5、9196... 等等。我想让它们以 0.1 而不是 0.5 的步长上升(或下降)。另外,我不想显示 Y 轴标签,只是打勾。图像顶部 (9195) 和底部 (9197) 的深度就足够了。

  • 所以它应该类似于下图所示:

    It should look like this...

    请忽略左边的彩色情节,这是我无法摆脱的单独情节,否则我无法显示“刻度”。这是使用 MatLab 完成的。我正在尝试用 R 图替换 MatLab 图。 Matlab 使用的是更重但也更清晰的 TIFF 图像。我将使用 JPEG,这是可以接受的。

    谢谢你的时间。

    最佳答案

    除了@dww 的答案。
    如果您需要将图像完全覆盖(或更确切地说是“下”)数据点,那么而不是
    annotation_custom(g, -Inf, Inf, -Inf, Inf) 采用
    annotation_custom(g, minX, maxX, minY, maxY) minX..maxY 是图像角在数据上的左下角到右上角。

    然后,您还可以使用 xlim(), ylim() 自由缩放数据在不丢失图像数据位置关系的情况下。

    示例(根据 this SO 问题下载图像)

    download.file("https://upload.wikimedia.org/wikipedia/commons/b/b9/Sinusoidal_projection_SW.jpg",
    destfile="tmp.jpg", mode="wb")
    world_image <- jpeg::readJPEG("tmp.jpg")
    ggplot(FileWellsUsed, aes(y=Decimal.Latitude)) +
    annotation_custom(rasterGrob(world_image,
    width = unit(1,"npc"),
    height = unit(1,"npc")),
    -180, 180, -90, 90)+
    ggtitle("Sinusoidal projection") +
    xlim(c(-180,180)) +ylim(c(-60,75))+
    coord_fixed() +
    ...yourdata.....

    另见 this问题,它使用 rasterGrid 而不是 rasterGrob。

    关于r - 如何在 R 和 ggplot2 中的背景图像上拟合绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42333085/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com