plotnine / ggplot - изменение положения легенды - PullRequest
1 голос
/ 18 марта 2020

У меня есть этот фрейм данных:

df = pd.DataFrame({'ymin': {0: 0.0,
  1: 0.0,
  2: 0.0,
  3: 0.0,
  4: 0.511,
  5: 0.571,
  6: 0.5329999999999999,
  7: 0.5389999999999999},
 'ymax': {0: 0.511,
  1: 0.571,
  2: 0.533,
  3: 0.539,
  4: 1.0,
  5: 1.0,
  6: 1.0,
  7: 1.0},
 'xmin': {0: 0.0,
  1: 0.14799999999999996,
  2: 0.22400000000000003,
  3: 0.5239999999999999,
  4: 0.0,
  5: 0.14799999999999996,
  6: 0.22400000000000003,
  7: 0.5239999999999999},
 'xmax': {0: 0.148,
  1: 0.22399999999999998,
  2: 0.524,
  3: 1.001,
  4: 0.148,
  5: 0.22399999999999998,
  6: 0.524,
  7: 1.001},
 'variable': {0: 'A', 1: 'A', 2: 'A', 3: 'A', 4: 'B', 5: 'B', 6: 'B', 7: 'B'}})

Где я строю это:

(ggplot(df, aes(ymin = "ymin", ymax = "ymax",
     xmin = "xmin", xmax = "xmax", fill = "variable"))
 + geom_rect(colour = "grey", alpha=0.7))

enter image description here

Я ищу изменить положение легенд к тому же положению сюжета: сине-красное и красное-нижнее. И A всегда будет красным, а B всегда будет синим

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Возможно, существует более стандартный способ сделать это, но вот быстрый способ решить вашу проблему:

  1. Измените порядок вашей переменной
  2. Назначьте цвета вручную (Вы также можете найти точные цветовые коды и заменить их именами цветов, если это имеет значение в вашем случае)

    df = df.assign(variable = pd.Categorical(df['variable'], ['B', 'A']))
    
    (ggplot(df, aes(ymin = "ymin", ymax = "ymax",
        xmin = "xmin", xmax = "xmax", fill = "variable"))+
        geom_rect(colour = "grey", alpha=0.7)+
        scale_fill_manual(values = ["blue", "red"]))
    

вывод выглядит следующим образом

0 голосов
/ 18 марта 2020

Вы можете установить порядок уровней с помощью df$variable <- factor(df$variable, levels = c("B","A")

...