You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly堆叠分组条形图优化:RColorBrewer简化代码及分组实现

Hey there! Let's get your stacked bar chart sorted out with cleaner color handling and that grouped stacking you want—since you're new to Plotly and R, I'll break this down into simple, actionable steps.

Step 1: Load Required Packages

First, make sure you have the necessary libraries installed and loaded. We'll use dplyr for quick data tweaks, RColorBrewer for easy color palettes, and of course plotly for the chart:

install.packages(c("plotly", "RColorBrewer", "dplyr")) # Run once if not installed
library(plotly)
library(RColorBrewer)
library(dplyr)

Step 2: Add Group Labels to Your Data

We need to tag each device type with its assigned group so Plotly knows how to organize the stacks. Assuming your data frame data2 has a column named device_type with all those equipment names, run this to add a Group column:

data2 <- data2 %>%
  mutate(Group = case_when(
    device_type %in% c("glider", "AUV", "ROV", "USV") ~ "Group1",
    device_type %in% c("corer", "towed_eq", "Seismic_eq", "Drill_rig") ~ "Group2",
    device_type %in% c("radar", "Manned_sub", "Other") ~ "Group3",
    TRUE ~ "Unknown" # Catch any unexpected device types
  )) %>%
  arrange(Group, device_type) # Sort to ensure same-group devices stack together

Step 3: Simplify Colors with RColorBrewer

Instead of manually picking colors, we can use pre-built palettes from RColorBrewer. You have two options here:

  • Option 1: Single unified palette (great for consistent look):
    # Grab enough colors for all 11 device types
    device_colors <- brewer.pal(n = length(unique(data2$device_type)), name = "Paired")
    
  • Option 2: Group-specific palettes (visually separate Group1/2/3):
    # Assign distinct color families to each group
    group_palettes <- list(
      Group1 = brewer.pal(4, "Blues"),   # 4 devices in Group1
      Group2 = brewer.pal(4, "Oranges"), # 4 devices in Group2
      Group3 = brewer.pal(3, "Greens")   # 3 devices in Group3
    )
    # Combine into a named vector matching your device types
    device_colors <- c(group_palettes$Group1, group_palettes$Group2, group_palettes$Group3)
    names(device_colors) <- c("glider", "AUV", "ROV", "USV", "corer", "towed_eq", "Seismic_eq", "Drill_rig", "radar", "Manned_sub", "Other")
    

Step 4: Build Your Grouped Stacked Bar Chart

Now let's put it all together with Plotly. Replace category with your actual x-axis column name (like year, location, etc.) and value with your numeric column (counts, measurements, etc.):

# Main grouped stacked chart (same x-axis, stacks organized by group)
plot_ly(data2, 
        x = ~category, 
        y = ~value, 
        color = ~device_type,
        colors = device_colors,
        type = "bar",
        text = ~paste(device_type, ": ", value), # Optional: hover text
        textposition = "auto") %>%
  layout(title = "Device Usage: Grouped Stacked Bar Chart",
         xaxis = list(title = "Your X-axis Category"),
         yaxis = list(title = "Your Y-axis Value"),
         barmode = "stack",
         legend = list(title = list(text = "Device Type")))

Bonus: Split into Group-Specific Subplots

If you'd prefer each group as its own separate stacked bar chart (instead of one combined chart), use add_facet:

plot_ly(data2, 
        x = ~category, 
        y = ~value, 
        color = ~device_type,
        colors = device_colors,
        type = "bar") %>%
  layout(barmode = "stack") %>%
  add_facet(col = ~Group, title = list(text = "Device Groups")) %>%
  layout(title = "Stacked Bar Charts by Device Group",
         xaxis = list(title = "Your X-axis Category"),
         yaxis = list(title = "Your Y-axis Value"))

Just tweak the column names to match your actual data2 structure, and you'll have a clean, organized stacked bar chart with minimal manual color work!

内容的提问来源于stack exchange,提问作者ana ligia ana ligia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:07:41