使用plotly和ggplot - alpha参数引发错误。

4

我正在设计一个使用plotly图形的shiny应用程序,但尝试为条形图中的alpha(透明度)设置响应式值时遇到了问题。

基本上,plotly不喜欢alpha参数,但我无法弄清楚为什么。它似乎认为我提供的值少于10个,但实际上并不是这样... 我创建了一个可重现的例子,显示alpha参数在ggplot中可行,但在plotly中不行:

library(data.table)
library(ggplot2)
library(plotly)
library(scales)

# Create reproducible example -------------------------------------------------

df <- data.table(fiscal=2013:2022,value=runif(10,min=100,max=200))

# Create vector of alpha values for the ggplot --------------------------------
alpha_values <- data.table(x=2013:2022,y=rep(0.5,10))
alpha_values[x %in% 2013:2015]$y <- 1
alpha_values[x==2022,y:=1]
# (2015 to 2021 will the 50% transparent)

g1 <- ggplot(df,aes(fiscal,value))+
  geom_bar(stat="identity",fill='#3D78A5',alpha=alpha_values$y)+
  scale_x_continuous(breaks=unique(df$fiscal))+
  scale_y_continuous(labels=comma)+
  labs(title="",x="Fiscal Year",
       y= "Random, number")

# Works fine using ggplot call ------------------------------------------------
g1

# Alpha argument does not work in ggplotly ------------------------------------
ggplotly(g1)

# (Error: alpha must be of length 1 or the same length as x)

在ggplot/plotly中,可以结合使用alpha参数吗?

2个回答

3
这可能是由于plotly.js如何处理alpha的一组离散值。一个解决方法是将alpha值作为因子,因为每个条形图实际上都被绘制为单独的跟踪。我还将alpha放入了aes中。
g1 <- ggplot(df,aes(fiscal,value))+
  geom_bar(stat="identity",fill='#3D78A5',aes(alpha=factor(alpha_values$y)))+
  scale_x_continuous(breaks=unique(df$fiscal))+
  scale_y_continuous(labels=comma)+
  labs(title="",x="Fiscal Year",
       y= "Random, number")

您还可以查看:使用alpha和手动颜色与ggplotly


3
根据安迪的回答,将alpha值设置为一个因子可以让plotly渲染ggplot对象,但是透明度与我的初始值不同,并且新因子添加了图例。要更正此问题,您可以添加以下行:
scale_alpha_manual(values=c(0.5,1))+
  theme(legend.position = "none")+

(使用您想要分配给新创建的alpha因子的任何alpha值)。

解决方案如下:

g1 <- ggplot(df,aes(fiscal,value))+
  geom_bar(stat="identity",fill='#3D78A5',aes(alpha=factor(alpha_values$y)))+
  scale_x_continuous(breaks=unique(df$fiscal))+
  scale_y_continuous(labels=comma)+
  scale_alpha_manual(values=c(0.5,1))+
  theme(legend.position = "none")+
  labs(title="",x="Fiscal Year",
       y= "Random, number")

ggplotly(g1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接