【问题标题】:plotnine/ggplot - changing legend positionsplotnine/ggplot - 改变图例位置
【发布时间】:2020-03-18 02:40:18
【问题描述】:

我有这个数据框:

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))

我希望将图例的位置更改为与情节的位置相同:蓝色向上和红色底部。 A 总是红色,B 总是蓝色

【问题讨论】:

    标签: python ggplot2 plotnine


    【解决方案1】:

    可能有更标准的方法来解决问题,但这里有一个快速解决问题的方法:

    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"]))
      

    输出如下所示:

    【讨论】:

      【解决方案2】:

      您可以使用df$variable <- factor(df$variable, levels = c("B","A") 设置级别顺序

      【讨论】:

      • Python 不能像在 R 中那样处理级别。但是,如果我更改数据中的顺序,蓝色将会下降到应该上升的位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多