如何使用 "x unified" 模式更改 R plotly hover 标签的顺序
how to change order of R plotly hover labels with "x unified" mode
我正在寻找在最新版本的 plotly R 包 (4.9.3) 中使用 hovermode = "x unified" 时是否有办法更改悬停标签的顺序。或者,是否可以恢复到旧版本的 plotly 显示 hoverlabels 的方式,同时仍然使用当前版本的 plotly 包?从数据可视化的角度来看,我认为旧方法更清晰。
我在下面包含了一个最低限度的可重现示例。当我 运行 使用 plotly v4.9.2.1 时,我得到如图 A 所示的结果,当我 运行 使用 plotly v4.9.3 时,我得到如图 B 所示的结果。图 A 和图 B 的比重是:
- 图 A 标签相对于指定时间每行上的数据按降序排列。这也是对时间段的反应,因此如果一条线在不同的时间段移动到另一条线上方,标签的相对位置也会移动以反映数据的顺序。您可以在图 B 中看到深绿色 (y1) 线具有最低值 (66),但它显示在悬停标签框的顶部。在图 B 中,y1 标签位于底部。
- 图 A 标签附加到各个行,因此更容易看到应用于相关行的悬停文本
图A:
图 B:
代码:
library(plotly)
library(tidyr)
df <- data.frame(Date = seq(as.Date("2018-01-01"),
as.Date("2021-01-01"),
by = "months"),
stringsAsFactors = F)
df$y1 <- seq(0, 100, length.out = nrow(df))
df$y2 <- seq(0, 600, length.out = nrow(df))
df$y3 <- seq(0, 300, length.out = nrow(df))
df$y4 <- seq(0, 200, length.out = nrow(df))
df <- df %>%
pivot_longer(cols = -Date,
names_to = "yname",
values_to = ) %>%
arrange(yname, Date)
mycols <- c("#006633", "#70AD47", "#1F4E78", "#2F75B5", "#C65911", "#EF8C4F",
"#C00000", "#FF8B8B", "#7030A0", "#9966FF")
mycols <- mycols[1:length(unique(df$yname))]
p <- plot_ly()
p <- p %>%
add_trace(data = df,
x = ~Date,
y = ~value,
text = ~yname,
hovertemplate = paste('<b>%{text}</b>',
'<br>%{x}',
'<br>%{y}',
'<extra></extra>'),
color = ~yname, colors = mycols,
name = ~yname, yaxis = "y",
type = "scatter", mode = "lines",
showlegend = T)
p <- p %>%
layout(hovermode = "x unified",
legend = list(x = 1.12, y = .5, xanchor = "left"),
yaxis = list(fixedrange = T),
xaxis = list(title = "",
fixedrange = T,
hoverformat = "%b %d, %Y"),
showlegend = T)
p
两个答案:
- 统一悬停标签中轨迹的顺序始终相同,无论轨迹的相对 Y 值如何。顺序和图例一样,所以会按照颜色的顺序排列。
- 您可以使用
hovermode = "x"
而不是 hovermode = "x unified"
恢复到之前的行为
我正在寻找在最新版本的 plotly R 包 (4.9.3) 中使用 hovermode = "x unified" 时是否有办法更改悬停标签的顺序。或者,是否可以恢复到旧版本的 plotly 显示 hoverlabels 的方式,同时仍然使用当前版本的 plotly 包?从数据可视化的角度来看,我认为旧方法更清晰。
我在下面包含了一个最低限度的可重现示例。当我 运行 使用 plotly v4.9.2.1 时,我得到如图 A 所示的结果,当我 运行 使用 plotly v4.9.3 时,我得到如图 B 所示的结果。图 A 和图 B 的比重是:
- 图 A 标签相对于指定时间每行上的数据按降序排列。这也是对时间段的反应,因此如果一条线在不同的时间段移动到另一条线上方,标签的相对位置也会移动以反映数据的顺序。您可以在图 B 中看到深绿色 (y1) 线具有最低值 (66),但它显示在悬停标签框的顶部。在图 B 中,y1 标签位于底部。
- 图 A 标签附加到各个行,因此更容易看到应用于相关行的悬停文本
图A:
图 B:
代码:
library(plotly)
library(tidyr)
df <- data.frame(Date = seq(as.Date("2018-01-01"),
as.Date("2021-01-01"),
by = "months"),
stringsAsFactors = F)
df$y1 <- seq(0, 100, length.out = nrow(df))
df$y2 <- seq(0, 600, length.out = nrow(df))
df$y3 <- seq(0, 300, length.out = nrow(df))
df$y4 <- seq(0, 200, length.out = nrow(df))
df <- df %>%
pivot_longer(cols = -Date,
names_to = "yname",
values_to = ) %>%
arrange(yname, Date)
mycols <- c("#006633", "#70AD47", "#1F4E78", "#2F75B5", "#C65911", "#EF8C4F",
"#C00000", "#FF8B8B", "#7030A0", "#9966FF")
mycols <- mycols[1:length(unique(df$yname))]
p <- plot_ly()
p <- p %>%
add_trace(data = df,
x = ~Date,
y = ~value,
text = ~yname,
hovertemplate = paste('<b>%{text}</b>',
'<br>%{x}',
'<br>%{y}',
'<extra></extra>'),
color = ~yname, colors = mycols,
name = ~yname, yaxis = "y",
type = "scatter", mode = "lines",
showlegend = T)
p <- p %>%
layout(hovermode = "x unified",
legend = list(x = 1.12, y = .5, xanchor = "left"),
yaxis = list(fixedrange = T),
xaxis = list(title = "",
fixedrange = T,
hoverformat = "%b %d, %Y"),
showlegend = T)
p
两个答案:
- 统一悬停标签中轨迹的顺序始终相同,无论轨迹的相对 Y 值如何。顺序和图例一样,所以会按照颜色的顺序排列。
- 您可以使用
hovermode = "x"
而不是hovermode = "x unified"
恢复到之前的行为