Я хотел бы использовать явные значения для альфа-уровня.

head(D)

    x  y group  alpha
  1 1 18     A   0.40   <~~~~
  2 2 18     A   0.44
  3 3 18     A   0.47
  4 1 18     A   0.51
  5 2 21     B   0.55
  6 3 21     B   0.58
  ...

Однако ggplot масштабирует альфа-уровни. Я могу переопределить это с помощью scale_alpha_continuous(range = range(D$alpha)), но это становится неприятностью при программном создании графика.

Есть ли прямой способ указать ggplot НЕ масштабировать альфа? (вместо того, чтобы указать, до какого диапазона масштабировать)

enter image description here

Воспроизводимый пример

library(ggplot)
library(gridExtra)
(D <- data.frame(x=rep(1:3, 4), y=rep((6:8)*3, each=4), group=rep(c("A","B", "C"), each=4),  alpha=round(seq(.4, .8, length.out=12), 2)))

P <- ggplot(data=D, aes(x=x, y=y, alpha=alpha)) + geom_bar(stat="identity", fill="blue") + theme(legend.position="bottom") + facet_grid(group ~. )

### Adding  scale_alpha_continuous
P.manually_scaled <- P + scale_alpha_continuous(range=range(D$alpha))

grid.arrange( P + ggtitle("INCORRECT")
             , P.manually_scaled + ggtitle("CORRECT")
             , ncol=2)
6
Ricardo Saporta 14 Мар 2014 в 19:09

1 ответ

Лучший ответ

Если у вас есть фактические значения альфа, цвета и т. Д., Тогда вам следует использовать шкалы ..identity(). Это скажет ggplot() назначать альфа-значения, как они есть в вашем фрейме данных, а не масштабировать их.

ggplot(data=D, aes(x=x, y=y, alpha=alpha)) + 
         geom_bar(stat="identity", fill="blue") + 
         facet_grid(group ~. ) +
         scale_alpha_identity()
8
Didzis Elferts 14 Мар 2014 в 19:13
Это именно то, что мне было нужно. Спасибо
 – 
Ricardo Saporta
14 Мар 2014 в 19:47