使用 R 绘图向条形图添加图案或剖面线

问题描述 投票:0回答:2

我正在 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,则它有条纹或其他图案。

r bar-chart r-plotly
2个回答
3
投票

如果我确切地知道你想要什么,那就更好了,但这可以向你展示如何在函数调用中记录模式。

library(plotly)

plot_ly(x = LETTERS[1:3],
        y = 6:4,
        color = letters[8:10],
        marker = list(pattern = list(shape = "x")),
        type = "bar")


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问题的参考可以在这里找到:

https://github.com/plotly/plotly.R/issues/1744

https://github.com/plotly/plotly.R/issues/1155

© www.soinside.com 2019 - 2024. All rights reserved.