我用plotly绘制了一个瀑布图。我正在尝试更改图例,以便它显示我设置的增加/减少颜色(红色/绿色)。有人知道我将如何进行此操作吗?我正在尝试为整个图形只显示一个图例,而不是为每个子图显示一个图例。目前,显示的是带有红色和绿色框的轨迹(如我在图片中所示)。
数据如下:
structure(list(Date = structure(c(1569888000, 1572566400, 1575158400,
1577836800, 1580515200, 1583020800, 1585699200, 1588291200, 1590969600,
1569888000, 1572566400, 1575158400, 1577836800, 1580515200, 1583020800,
1585699200, 1588291200, 1590969600, 1569888000, 1572566400, 1575158400,
1577836800, 1580515200, 1583020800, 1585699200, 1588291200, 1590969600
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Percent_change = c(-45,
-50, -25, -30, -40, -35, -1, -5, -25, 30, 45, 50, -30, -40, -35,
-1, -5, -25, 50, -45, -30, -15, -20, -35, -1, -5, -25), Toys = c("Toy 1",
"Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1",
"Toy 1", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2",
"Toy 2", "Toy 2", "Toy 2", "Toy 3", "Toy 3", "Toy 3", "Toy 3",
"Toy 3", "Toy 3", "Toy 3", "Toy 3", "Toy 3")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -27L))
下面是代码:
percent <- function(x, digits = 2, format = "f", ...) {
paste0(formatC(x, format = format, digits = digits, ...), "%")
}
my_plot <- . %>%
plot_ly(x = ~Date, y = ~Percent_change, type = "waterfall",
hoverinfo = "text",
hovertext = ~paste("Date :", Date,
"<br> % Change:", percent(Percent_change)),
increasing = list(marker = list(color = "red")),
decreasing = list(marker = list(color = "green")),
totals = list(marker = list(color = "blue")),
textposition = "outside", legendgroup = "trace 1") %>%
add_annotations(
text = ~unique(Toys),
x = 0.5,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "middle",
yanchor = "top",
showarrow = FALSE,
font = list(size = 15),
yshift = 10
) %>%
layout(yaxis = list(title = "% Change",
ticksuffix = "%"),
xaxis = list(title = c("Date")),
showlegend =T)
example_data %>%
dplyr::filter(!is.na(Date)) %>%
group_by(Toys) %>%
distinct() %>%
do(p = my_plot(.)) %>%
subplot(nrows = 3, shareX = FALSE, titleY= TRUE, titleX= FALSE)
我希望图例的具体外观如下所示,标题为"趋势":
3条答案
按热度按时间kupeojn61#
我们可以创建表示两个图例项的两条初始迹线。
之后,我们需要将所有增加和减少的记录道分配到初始记录道引入的图例组中,并隐藏它们的图例项:
PS:如果你更喜欢使用增加和减少部分的单独轨迹来显示你的瀑布,那么在
add_trace
调用中使用split = ~ legendgroup
。此外,你需要在layout
调用中将itemclick
等设置回TRUE
。llmtgqce2#
您可以在R中编辑图例名称,并使用javascript编辑图例颜色
步骤:
1.重新定义
my_plot()
函数,使其将第一个轨迹命名为"decreasing"
,将第二个轨迹命名为"increasing"
。1.附加一些javascript来手动更改图例颜色。
1.调用函数,隐藏第三个图例,并附加javascript
1.重新定义函数
这与您的函数相同,只是它将前两组Map为"递增"或"递减"。
2.附加一些javascript
我们可以在R中定义一个javascript字符串,并将其提供给由
plotly
创建的htmlwidget
,这使得"递减"符号为红色,"递增"符号为绿色。3.调用函数,隐藏第三个图例,并追加javascript
我用
split()
和purrr::imap()
替换了过时的do()
,这样我们还可以为函数提供组名:我们使用
htmlwidgets::prependContent()
将此代码附加到plotly
对象,并使用htmlwidgets::onStaticRenderComplete()
确保它在加载对象后立即运行。zysjyyx43#
您可以使用
style
删除多个traces
。这将为图表创建一个图例,如下所示:创建于2023年2月8日,使用reprex v2.0.2