Code:

library(plotly)
library(tidyverse)

df <- data.frame(protein = c("Chicken", "Beef", "Pork", "Fish",
                             "Chicken", "Beef", "Pork", "Fish"),
                 y1 = c(3, 24, 36, 49, 7, 15, 34, 49),
                 y2 = c(9, 28, 40, 47, 8, 20, 30, 40 ), 
                 gender = c("Male", "Male", "Male", "Male",
                            "Female", "Female", "Female", "Female"))

df %>%
  plot_ly() %>% 
  add_bars (y = ~y1, x = ~protein,
            name = 'y1.male') %>% add_bars(y = ~y2,
               x=~protein, color = I("green"),name = "y2.male")%>%
  add_bars(y = ~y1, x = ~protein, color = I("black"),
           name = 'y1.female') %>% add_bars(y = ~y2,
                x=~protein, color = I("red"), name = "y2.female")

我想要的结果是创造类似的东西:

enter image description here

然而,当您运行代码时,您会看到它在每个条中堆叠了"男性"和"女性"值.我希望y=y1时"y1.male"代表"male"数据,y=y2时"y2.male"代表"male"数据,y=y1时"y1.female"代表"female"数据,y=y2时"y2.female"代表"female"数据.在r-plotly中,我如何不必使用"变换"过滤器就可以完成这项工作?

推荐答案

我们可以将数据重新排列为长格式,然后进行绘图:

df %>% 
  pivot_longer(cols = c(y1, y2)) %>% 
  unite(gender_var, c(gender, name)) %>% 
 plot_ly() %>% 
  add_bars (x = ~protein, y = ~value,
            name = ~gender_var)

R相关问答推荐

仅返回R中所有其他列的列ID和年份缺失(NA)数据的列表

在图内移动y轴上的标签

以R表示的gglikert地块调整总数

使用scale_x_continuous复制ggplot 2中的离散x轴

根据固定值范围在tible中添加新行

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

如何使用shinyChatR包配置聊天机器人

如何自定义Shapviz图?

如何从R中的字符串元素中减go 一个数字?

derrr mutate case_when grepl不能在R中正确返回值

如何在modelsummary中重命名统计数据?

删除列表中存储的数据帧内和数据帧之间的重复行

如何根据R中其他列的值有条件地从列中提取数据?

一小时满足条件的日期的 Select

根据元素和前一个值之间的差值过滤矩阵的元素

使用列/行匹配将两个不同维度的矩阵相加

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

如何通过判断数据框的一列来压缩另一列?

过滤名称以特定字符串开头的文件

在鼠标悬停时使用Plotly更改geom_point大小