我正在 R 中创建条形图,并希望根据特定(二进制)特征的值添加特定图案或剖面线。有谁知道如何以情节方式做到这一点?我见过它在 ggplot 和 python 中完成,但在本例中没有。
编辑:假设数据是plot_data
x_var y_var color_var pattern_var
1 4 name_1 1
2 3 name_2 0
3 6 name_1 0
4 3 name_1 1
5 7 name_2 1
现在我制作情节的代码是:
plot_ly(data = plot_data) %>%
add_bars(
x = ~x_var,
y = ~y_var,
color = ~color_var,
)
这样就有 5 个不同高度的条形,它们具有两种不同的颜色,具体取决于它们是 name_1 还是 name_2。我还想让它们有一个图案,具体取决于pattern_var是1还是0,这样,如果pattern_var是0,则条形完全由颜色填充,如果pattern_var是1,则它有条纹或其他图案。
这是一个将
pattern_var
与模式“/”相匹配的示例:
library(plotly)
plot_data <- data.frame(
x_var = 1:5,
y_var = c(4, 3, 6, 3, 7),
color_var = c("name_1", "name_2", "name_1", "name_1", "name_2"),
pattern_var = c(1, 0, 0, 1, 1)
)
plot_ly(data = plot_data) |>
add_bars(
x = ~x_var,
y = ~y_var,
color = ~color_var,
marker = list(
pattern = list(
shape = ~ifelse(pattern_var == 1, "/", "")
)
)
)
您还可以修改plot_data data.frame以准确定义pattern_var列中所需的模式(“+”、“.”、“/”、“-”等)
https://plotly.com/r/reference/bar/#bar-marker-pattern-shape
编辑:
由于 {plotly} 中的错误,上述代码无法正常工作(形状未分配给正确的轨迹)。
解决方法是按颜色对 data.frame 进行排序以使其正常工作:
plot_data[order(plot_data$color_var),] |>
plot_ly() |>
add_bars(
x = ~x_var,
y = ~y_var,
color = ~color_var,
marker = list(
pattern = list(
shape = ~ifelse(pattern_var == 1, "/", "")
)
)
)
对plotly问题的参考可以在这里找到: