ggplot scale_fill_ *强制在指南的顶部和底部放置标签

时间:2019-03-06 23:48:26

标签: r ggplot2

我正在对scale_fill进行对数变换,并且刻度的顶部未标记。对于线性刻度,这不是问题,因为它是等距的,但是对于对数刻度,必须显示max的值。

鉴于该值未知,是否有某种方法可以强制这种行为?

enter image description here

编辑:代表

suppressPackageStartupMessages(require(tidyverse))

diamonds %>% 
  mutate(price = price^2)
  ggplot(aes(x = carat, y = depth, fill = price)) + 
  geom_point() + 
  scale_fill_continuous(trans = "log")

reprex package(v0.2.1)于2019-03-06创建

期望的行为:价格标尺的顶端(浅蓝色)具有价格最大值的标签。

1 个答案:

答案 0 :(得分:3)

breaks中的scale_*_continuous参数接受以下一项(添加了强调):

  
      
  • NULL不间断
  •   
  • waiver()获取转换对象计算出的默认中断
  •   
  • 位置的数字向量
  •   
  • 将限制作为输入并返回中断作为输出的功能
  •   

您可以尝试以下方法:

p <- diamonds %>% 
  ggplot(aes(x = carat, y = depth, fill = price)) + 
  geom_point(shape = 21)

p + 
  scale_fill_continuous(
    trans = "log",
    breaks = function(x) seq(x[1], x[2], length.out = 5))

plot 1

或者如果您希望在对数转换后将值均匀地隔开,可以这样做:

p + 
  scale_fill_continuous(
    trans = "log",
    breaks = function(x) exp(seq(log(x[1]), log(x[2]), length.out = 5)))

plot 2

以上仅用于说明。根据使用情况,您可能需要针对不同的中断次数,更好的数字格式(例如,四舍五入到特定的小数位数)等来修改功能。