Ggplot2 не указывать отсутствующее значение в geom_tile

В слое geom_tile() в пакете визуализации данных ggplot2 для R, когда ячейка не содержит данных, она не нарисована. Например. http://docs.ggplot2.org/current/geom_tile.html и выполните поиск "отсутствующего значения".

Я хотел бы изменить это поведение, чтобы показать минимальное значение по всем фрагментам. Возможно ли это, и если да, то как?

Дополнительный контекст: когда я использую

stat_density2d(aes(x=x,y=y, fill=..density..), geom="tile", contour=FALSE)

Я бы хотел, чтобы области с плотностью выглядели очень похожими на области с очень небольшой плотностью. Как сейчас, скажем, цветовой спектр от синего до красного, а фон белый, тогда там, где нет данных в плитке, он белый, а когда есть одна точка данных в плитке, синяя.

Добавление псевдодатчика к данным кажется возможным, но как я заранее знаю, как распределять псевдочисления? и в случае, когда есть огранка?

Ответ 1

Эта проблема также может быть исправлена ​​опцией в scale_fill_continuous

scale_fill_continuous(na.value = 'salmon')

Ответ 2

Если ваши данные являются данными в виде сетки, как насчет добавления другого geom_tile() для NA на subset()?

# Generate data
pp <- function (n, r = 4) {
  x    <- seq(-r*pi, r*pi, len = n)
  df   <- expand.grid(x = x, y = x)
  df$r <- sqrt(df$x^2 + df$y^2)
  df$z <- cos(df$r^2)*exp(-df$r/6)
  df
}
pp20 <- pp(20)[sample(20*20, size = 200),]

df_grid  <- expand.grid(x = unique(pp20$x), y = unique(pp20$x))
df_merge <- merge(pp20, df_grid, by = c("x", "y"), all = TRUE)

# Missing values
ggplot(df_merge, aes(x = x, y = y)) +
  geom_tile(data = subset(df_merge, !is.na(z)), aes(fill = z)) +
  geom_tile(data = subset(df_merge,  is.na(z)), aes(colour = NA),
    linetype = 0, fill = "pink", alpha = 0.5)

an example

Ответ 3

Этот ответ может быть немного "милым", но может ли одно решение просто изменить цвет фона вашего сюжета на минимальный цвет в вашем масштабе? Например:

+ opts(plot.background = theme_rect(colour = "blue")

Если ваш сюжет имеет более сложную структуру, и это заканчивается тем, что делает синий фон в областях, где вы не хотите, чтобы это произошло, вы могли бы построить слой geom_rect, который простирается до всего диапазона ваших данных.

Ответ 4

Для потомства, вот правильное решение, совместимое с ggplot2 версия 1.9.3

+ theme(panel.background=element_rect(fill="blue", colour="blue")
  • В ответе joran plot.background - весь сюжет, включающий название и легенду и т.д. panel.background - это область, где отображаются данные.

  • В последней версии ggplot2 opts был заменен на theme, а theme_rect был заменен на element_rect.

  • При указании element_rect, color является границей прямоугольника, а fill является внутренностью прямоугольника.

Я изначально использовал

+ geom_rect(aes(xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf), fill="blue")

но при добавлении geom_raster, а не geom_tile по фону и генерации вывода pdf, просмотрщики в формате pdf очень тяжело отображали график, используя существенно больше циклов процессора и памяти.