ggplot2 2D Density plot - градиентная заливка слишком плавная

У меня возникли некоторые трудности с пакетом ggplot2 и градиентной заливкой. Для моих данных с небольшим количеством точек данных их градиент и плотность не совпадают. Вот пример: введите описание изображения здесь

Код, который я использую:

pt <- read.xlsx("plots.xlsx", sheetName = "PT1_TB varseq", stringsAsFactors=FALSE)

ggplot(pt, aes(x=pt$BAF, y=pt$LogR) ) + 
  stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE) +
  scale_fill_distiller(palette= "Spectral", direction=-1) +
  scale_y_continuous(name="LogR", limits = c(-0.8, 0.6), breaks = seq(-0.8, 0.6, 0.2)) +
  scale_x_continuous(name="BAF", breaks = seq(0, 0.8, 0.2)) +
  theme(
    legend.position='none',
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  ) +
  geom_point(aes(shape = factor("cyl")), size = 1) + scale_shape(solid = FALSE)

Я хотел бы, чтобы градиент изменялся более резко, например, я хотел бы видеть больше разделения цветов между точками в точках (0;0,2) и (0,25;-0,2). Кроме того, желтый цвет в середине, где нет точек, должен быть синим.

Пока я занимаюсь этим, кто-нибудь знает, как устранить белый разрыв между осями и фактическим сюжетом?

Заранее спасибо:)

1 ответ

Решение

Было бы полезно, если бы вы могли привести воспроизводимый пример. Тем не менее, чтобы обозначить точку в комментарии @RichardTelford home, вот пример, который использует manipulate пакет для интерактивной установки h параметры полосы пропускания, в дополнение к n - количество точек сетки.

library(ggplot2)
library(manipulate)

manipulate(
  ggplot(faithful, aes(x = eruptions, y = waiting)) +
    geom_point() +
    xlim(0.5, 6) +
    ylim(40, 110) +
    stat_density_2d(geom = "raster", aes(fill = ..density..), contour = F, 
                    h = c(x_bandwidth, y_bandwidth),
                    n = grid_points) +
    scale_fill_distiller(palette = "Spectral", direction = -1),
  x_bandwidth = slider(0.1, 20, 1, step = 0.1),
  y_bandwidth = slider(0.1, 20, 1, step = 0.1),
  grid_points = slider(1, 100, 16)
)

Итак, наш простой ванильный (по умолчанию) сюжет выглядит так:

Участок 1

Мы можем в интерактивном режиме изменить параметры, используя всплывающее меню, доступное по значку шестеренки:

Участок 2

Участок 3

Другие вопросы по тегам