Как изменить цвет для определенных точек на графике, который был сохранен с объектом в R? - PullRequest
0 голосов
/ 12 октября 2019

все!

Я работаю над файлом RMarkdown. Я строю что-то в предыдущих чанках и сохраняю график в объекте, скажем 'img' , потому что я хочу что-то сделать с этим графиком в последующих чанках. Как я могу изменить цвет определенных точек в 'img' , не меняя ничего другого? Или я могу хотя бы добавить несколько новых точек этого цвета для наложения определенных точек?

Некоторые коды, которые я нашел в Интернете, выглядят следующим образом, но у меня это не работает. Говорит, что "plot.new еще не был вызван" . И, как новичок в R, боюсь, я не понимаю, почему plot.new () имеет значение в этом случае.

   img
   points(x,y, col="black", psh=15, cex=2)
   img <- recordPlot()

PlusЯ не уверен, что это правильный способ изменить сюжет в разных кусках. Если есть лучший способ, пожалуйста, дайте мне знать! Большое спасибо!

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Если вы собираетесь редактировать несколько графиков, вы можете рассмотреть возможность использования ggplot2 в качестве библиотеки графиков, а не базы. Есть много, много интернет-ресурсов, которые помогут вам начать там. Вот лишь краткий пример:

library(ggplot2)

img <- ggplot(mtcars) +
  geom_point(aes(x = hp, y = mpg))

img

original ggplot2 picture

Теперь предположим, что вы хотите покрасить некоторые из точек. Этот вектор сделает все точки lightblue, а затем вернет первые 5 обратно на black.

point_colors <- rep("lightblue", nrow(mtcars))
point_colors[1:5] <- "black"

Мы можем нанести это прямо обратно на верхнюю часть графика:

img <- img +
  geom_point(aes(x = hp, y = mpg), color = point_colors)

img

colored picture

С помощью ggplot2 мы можем увидеть, как строится график, запустив img$layers, что дает:

> img$layers
[[1]]
mapping: x = ~hp, y = ~mpg 
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

[[2]]
mapping: x = ~hp, y = ~mpg 
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

МыМожно удалить слой, установив для него значение null:

img$layers[[1]] <- NULL

> img$layers
[[1]]
mapping: x = ~hp, y = ~mpg 
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity

Итак, теперь мы удалили исходный слой и просто оставили слой с измененными цветами. С ggplot2 довольно легко изменить вещи позже (особенно просто чистые дополнения).

img +
  ggtitle("only one layer!") +
  theme_light()

modified ggplot image

1 голос
/ 12 октября 2019

Вы не можете позвонить points(), если вы не настроили окно графика, что будет делать plot.new(). Обычно вы не вызываете plot.new() напрямую, некоторые другие функции (например, plot()) вызывают его, прежде чем делать другие вещи.

Так что этот способ рисования должен работать, чтобы добавить некоторые точки:

x <- rnorm(100)
y <- rnorm(100)
plot(x, y, col = "red")   # implicit call to plot.new()
img <- recordPlot()

dev.off()                 # clears the display; not needed in RMarkdown
img                       # redraws the first plot
points(rnorm(100), rnorm(100), col = "green") # adds green points

Изменение цвета точек может не работать идеально, поскольку сглаживание означает, что старый цвет может просачиваться. Но эта последовательность должна сделать это, чтобы изменить исходные точки на зеленый:

img
points(x, y, col = "green")
...