Как я могу добавить точки на заполненный контурный график? - PullRequest
1 голос
/ 29 марта 2019

Я использовал данные вулкана (матрицу), чтобы построить заполненный контурный график.

filled.contour(volcano, color.palette = terrain.colors, asp = 0.5)

Теперь я хочу добавить точку на график. Точка должна показывать самую высокую точку вулкана. Можно ли добавить точку без использования ggplot2? Если да, то как?

1 Ответ

2 голосов
/ 30 марта 2019

Я думал, что вы можете просто найти местоположение максимума и добавить его, используя функцию points(), но это не работает, потому что координаты оси, отображаемые на графике, не совпадают с внутренними координатами, которые использует график. разместите элементы графика (подробнее см. здесь ).

Вместо этого вы можете использовать plot.axes аргумент filled.contour, чтобы получить максимум в нужном месте, как объяснено здесь . Нам также необходимо использовать функцию axis для рисования меток и осей осей, поскольку аргумент plot.axes переопределяет оси по умолчанию.

# Get coordinates of maximum
max.point = (which(volcano==max(volcano), arr.ind=TRUE) - 1)/(dim(volcano) - 1)

# Use plot.axes argument to plot maximum point
filled.contour(volcano, color.palette = terrain.colors, asp = 0.5,
               plot.axes={
                 points(max.point, col="red", pch=16)
                 axis(side=1)
                 axis(side=2)
                 }
               )

enter image description here

Для справки, вот что происходит, когда вы пытаетесь добавить точку после создания графика:

filled.contour(volcano, color.palette = terrain.colors, asp = 0.5)
points(max.point, col="red", pch=17)

enter image description here

Вот версия ggplot2:

library(tidyverse)

cols = terrain.colors(3)

as.data.frame(t(volcano)) %>% 
  rownames_to_column(var="row") %>% 
  gather(col, value, -row) %>% 
  mutate(col=(as.numeric(gsub("V","",col)) - 1)/(nrow(volcano) - 1),
         row=(as.numeric(row) - 1)/(ncol(volcano) - 1)) %>% 
  ggplot(aes(col, row, z=value)) +
    geom_raster(aes(fill=value)) +
    geom_contour(colour="grey50", size=0.2) +
    geom_point(data=. %>% filter(value==max(value)), 
               colour="red", shape=16, size=2) +
    coord_fixed(ratio = ncol(volcano)/nrow(volcano), expand=FALSE) +
    scale_fill_gradient2(low=cols[1], mid=cols[2], high=cols[3],
                         midpoint=mean(volcano)) +
    theme_minimal()

enter image description here

...