Plotly 的分类热图中的对角线注释
Diagonal annotations in Plotly's categorical heatmap
考虑使用以下 R 代码片段来呈现带有分类轴的热图:
library(plotly)
x <- c("Blue", "Red")
y <- c("One", "Two")
plot_ly(x = x, y = y, z = c(1:4)) %>%
add_heatmap(
opacity = 0.9
) %>%
add_annotations(
text = c(1:4),
showarrow = FALSE
)
这会呈现以下热图:
注释似乎呈对角分布且不均匀,从左下角的单元格开始。 1 和 3 在左下方的单元格中,2 和 4 在右上方的单元格中。为什么是这样?我的注释文本应该如何构建才能更直观地排序(水平或垂直)?
我只能推测这个问题,但在提供的图像中你可以看到 Plotly 只使用了 4 个 z 值中的两个值。右侧的色标从 1 变为 2,而不是 1 变为 4。发生这种情况很可能是因为您只提供了两个 x 和 y 值。
使用数据框
df <- expand.grid(x, y)
df <- transform(df, text = paste(Var1, Var2, sep='_'))
print(df)
Var1 Var2 text
1 Blue One Blue_One
2 Red One Red_One
3 Blue Two Blue_Two
4 Red Two Red_Two
您现在可以轻松使用add_annotations
add_annotations(x = df$Var1,
y = df$Var2,
text = df$text)
得到如下剧情
完整代码
library(plotly)
x <- c("Blue", "Red")
y <- c("One", "Two")
df <- expand.grid(x, y)
df <- transform(df, text = paste(Var1, Var2, sep='_'))
p <- plot_ly(x = df$Var1,
y = df$Var2,
z = c(1:4)
) %>%
add_heatmap(opacity = 0.9
) %>%
add_annotations(x = df$Var1,
y = df$Var2,
text = df$text)
p
或者,您可以遍历您的值并为每个值添加注释。
library(plotly)
x <- c("Blue", "Red")
y <- c("One", "Two")
p <- plot_ly(x = x,
y = y,
z = c(1:4)
) %>%
add_heatmap(opacity = 0.9)
for (val_x in x)
{
for (val_y in y)
{
p <- add_annotations(p,
x = val_x,
y = val_y,
text = paste(val_x, val_y, sep = '_'))
}
}
p
考虑使用以下 R 代码片段来呈现带有分类轴的热图:
library(plotly)
x <- c("Blue", "Red")
y <- c("One", "Two")
plot_ly(x = x, y = y, z = c(1:4)) %>%
add_heatmap(
opacity = 0.9
) %>%
add_annotations(
text = c(1:4),
showarrow = FALSE
)
这会呈现以下热图:
注释似乎呈对角分布且不均匀,从左下角的单元格开始。 1 和 3 在左下方的单元格中,2 和 4 在右上方的单元格中。为什么是这样?我的注释文本应该如何构建才能更直观地排序(水平或垂直)?
我只能推测这个问题,但在提供的图像中你可以看到 Plotly 只使用了 4 个 z 值中的两个值。右侧的色标从 1 变为 2,而不是 1 变为 4。发生这种情况很可能是因为您只提供了两个 x 和 y 值。
使用数据框
df <- expand.grid(x, y) df <- transform(df, text = paste(Var1, Var2, sep='_')) print(df) Var1 Var2 text 1 Blue One Blue_One 2 Red One Red_One 3 Blue Two Blue_Two 4 Red Two Red_Two
您现在可以轻松使用
add_annotations
add_annotations(x = df$Var1, y = df$Var2, text = df$text)
得到如下剧情
完整代码
library(plotly)
x <- c("Blue", "Red")
y <- c("One", "Two")
df <- expand.grid(x, y)
df <- transform(df, text = paste(Var1, Var2, sep='_'))
p <- plot_ly(x = df$Var1,
y = df$Var2,
z = c(1:4)
) %>%
add_heatmap(opacity = 0.9
) %>%
add_annotations(x = df$Var1,
y = df$Var2,
text = df$text)
p
或者,您可以遍历您的值并为每个值添加注释。
library(plotly)
x <- c("Blue", "Red")
y <- c("One", "Two")
p <- plot_ly(x = x,
y = y,
z = c(1:4)
) %>%
add_heatmap(opacity = 0.9)
for (val_x in x)
{
for (val_y in y)
{
p <- add_annotations(p,
x = val_x,
y = val_y,
text = paste(val_x, val_y, sep = '_'))
}
}
p