当数据中不存在alpha(透明度)级别时,不等中断和标签长度错误

时间:2017-04-06 08:01:22

标签: r ggplot2

在ggplot2版本2.2.0中,例如:

tmp_df <- data.frame(x = 1:3, y = 1:3, alpha = rep(0.5, 3))

#   x y alpha
# 1 1 1   0.5
# 2 2 2   0.5
# 3 3 3   0.5

ggplot(tmp_df, aes(x, y, alpha = alpha)) +
    geom_bar(stat = 'identity') +
    scale_alpha(breaks = c(0.25, 0.5, 1), labels = c('a', 'b', 'c'))

产生错误:

Error in f(..., self = self) : Breaks and labels are different lengths

手动删除scale_alpha中的额外alpha值可以解决问题,但肯定可以通过ggplot来处理这个问题吗?

1 个答案:

答案 0 :(得分:3)

您必须提供比例限制,因为ggplot始终相同,而library(ggplot2) tmp_df <- data.frame(x = 1:3, y = 1:3, alpha = rep(0.5, 3)) tmp_df #> x y alpha #> 1 1 1 0.5 #> 2 2 2 0.5 #> 3 3 3 0.5 ggplot(tmp_df, aes(x, y, alpha = alpha)) + geom_bar(stat = 'identity') + scale_alpha(breaks = c(0.25, 0.5, 1), labels = c('a', 'b', 'c'), limits = c(0, 1)) 不知道比例的'范围'。

alpha

如果break维度本身具有范围,则不再需要限制,但请注意,在以下示例中,忽略第一个limits,因为它超出了范围。如果你想要加入tmp_df <- data.frame(x = 1:3, y = 1:3, alpha = seq(.5, 1.5, .5)) tmp_df #> x y alpha #> 1 1 1 0.5 #> 2 2 2 1.0 #> 3 3 3 1.5 ggplot(tmp_df, aes(x, y, alpha = alpha)) + geom_bar(stat = 'identity') + scale_alpha(breaks = c(0.25, 0.5, 1), labels = c('a', 'b', 'c')) ,那将是必要的。

class Subscriber < ApplicationRecord
  belongs_to :article

  after_create :send_mail

  def send_mail
    SubscriptionMailer.welcome_message(self).deliver
  end
end