Я думал, что вы можете просто найти местоположение максимума и добавить его, используя функцию 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)
}
)
Для справки, вот что происходит, когда вы пытаетесь добавить точку после создания графика:
filled.contour(volcano, color.palette = terrain.colors, asp = 0.5)
points(max.point, col="red", pch=17)
Вот версия 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()