当我在geom_bar中为“ x”和“ fill”美学使用相同的变量时,为什么它不起作用?

时间:2019-12-08 08:32:10

标签: r ggplot2

这让我感到困惑:当我将与xfill相同的变量用于geom_bar(我知道这是多余的编码)时,fill映射不使用。

library(ggplot2)
df <- data.frame(Points=c(1, 3, rep(5,20), rep(20,80), rep(40,35), rep(70,22), rep(100,18)))
ggplot(df, aes(fill = Points, x = Points)) +
  geom_bar(width=.1) +
  scale_x_log10(breaks=c(1,3,5,10,20,40,70,100))

enter image description here

发生了什么?!?我怀疑它必须对geom_bar的内部工作进行某些处理,因为它正在计算y轴的..count..变量。但这不应该影响变量Points,不是吗?

另一件事:当我将as.character()包裹在Points上以达到fill的美感时,它有效。但是然后我没有一个很好的连续色标,而是一个离散色标(这对于字符变量很有意义)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

因此,如果要对条形的填充方式进行连续缩放,诀窍是设置y = 1,这样条形将在各个x位置彼此堆叠,然后调用填充。

ggplot(df, aes(x = Points)) + geom_col(aes(y=1,fill=Points))

enter image description here

答案 1 :(得分:1)

我认为您正确计算..count..。那么,为什么不直接生成计数并使用geom_col()呢?

df %>%
  count(Points) %>%
  ggplot(aes(fill = Points, x = Points, y = n)) +
  geom_col() +
  scale_x_log10(breaks=c(1,3,5,10,20,40,70,100)) +
  scale_fill_gradient(low = 'gray', high = 'red')

输出: enter image description here