Как удалить процентную разбивку из легенды, созданной ggplot2

Я создал график, отображающий несколько аспектов моих данных. Цветная полоса, созданная scale_colour_gradientn, сбивает с толку, потому что показывает процентную разбивку. Могу ли я избавиться от этих процентных разбивок и добавить свои собственные. Я пробовал использовать параметры values и breaks, но безуспешно. Я думаю, что, возможно, ggplot сбит с толку, потому что большинство значений либо очень малы, либо близки к 1. Я добавил набор данных игрушки, код и вывод изображения ниже.

dput (df)

structure(list(Mean.Count = c(30404.8407153174, 15689.4221807262, 
30404.8407153174, 15689.4221807262), 
              Log2FC = c(-0.00357013689574257, -0.00417251481039714, 0.306809506669248, 0.224653107007472), 
              Adj.P.Value = c(0.988865360408676, 0.981816989495127, 0.00202882891738576, 2.72576774009609e-05), 
               TimeKD = c("A", "A", "B", "B"), 
               Gene = c("HSPA5", "MYH9", "HSPA5", "MYH9")), 
               row.names = c("HSPA5", "MYH9", "HSPA51", "MYH91"), 
               class = "data.frame")

построение кода

ggplot(df, aes(x = Gene, y = Log2FC, group=TimeKD)) + 
  geom_point(aes(color = -Adj.P.Value, size = Mean.Count, shape = TimeKD), alpha = 0.5)+
  coord_flip() +
  scale_colour_gradientn(
    colours = grDevices::colorRampPalette(c("black", "cyan", "violet"))(n = 200),
    values = c(0.0, 1.0), 
    #breaks = c(0.0, 0.0001, 0.001, 0.1, 1.0), <- removes legend for some reason
    space = "Lab",
    na.value = "grey50",
    guide = "colourbar",
    aesthetics = "colour"
  )+
  scale_x_discrete(limits = rev)

вывод (без параметра breaks) enter image description here

Всего 1 ответ


Поскольку ваш Adj.P.value числовой, вам нужно сначала разбить его на категории.

library(dplyr)
library(ggplot2)

df<- df %>% 
  mutate(Adj.P.Value = cut(Adj.P.Value, breaks = c(0, 0.01, 0.05, 100), labels = c("<0.01", "<0.05", ">0.05")))

ggplot(df, aes(x = Gene, y = Log2FC, group=TimeKD)) + 
  geom_point(aes(color = Adj.P.Value, size = Mean.Count, shape = TimeKD), alpha = 0.5)+
  coord_flip() 

enter image description here


Есть идеи?

10000