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

仅用Base R绘制带颜色编码的分组点图技术求助

Solution for Base R Scatter Plot with Model-Specific Colors

Got it, let's work through this step by step. First, we need to fix a small data type issue in your dataset, then build the plot with distinct colors for each model, plus proper X-axis labels.

Step 1: Preprocess the Data

Your current data frame has the model columns (OLS, IV, 2SLS) stored as character values (since you combined text variable names with numeric values via rbind + transpose). We'll convert these to numeric first so we can plot them:

# Convert model columns to numeric (they're currently character/factor)
data$OLS <- as.numeric(as.character(data$OLS))
data$IV <- as.numeric(as.character(data$IV))
data$`2SLS` <- as.numeric(as.character(data$`2SLS`))

# Create x-axis positions (1 to 16, one per variable)
x_pos <- seq_along(data$variables)

Step 2: Build the Plot (Two Approaches)

Approach 1: Manual Point Addition

Start with one model's points, then add the others with different colors. We'll disable the default X-axis to add custom labels later:

# Initialize plot with OLS points
plot(x_pos, data$OLS,
     type = "p", pch = 16, col = "steelblue",
     xlab = "Variables", ylab = "Estimate Value",
     main = "Model Estimates by Variable",
     xaxt = "n")  # Turn off default X-axis

# Add IV points (red)
points(x_pos, data$IV, pch = 16, col = "firebrick")

# Add 2SLS points (green)
points(x_pos, data$`2SLS`, pch = 16, col = "forestgreen")

# Add custom X-axis labels (V_1 to V_16)
axis(1, at = x_pos, labels = data$variables)

# Add legend to explain colors
legend("topright",
       legend = c("OLS", "IV", "2SLS"),
       col = c("steelblue", "firebrick", "forestgreen"),
       pch = 16,
       bty = "n")  # Optional: removes the legend box

Approach 2: Use matplot (More Concise)

matplot lets you plot multiple columns at once, which cuts down on repetitive code:

# Extract model estimates as a matrix
model_values <- as.matrix(data[, c("OLS", "IV", "2SLS")])

# Plot all three models in one go
matplot(x_pos, model_values,
        type = "p", pch = 16, col = c("steelblue", "firebrick", "forestgreen"),
        xlab = "Variables", ylab = "Estimate Value",
        main = "Model Estimates by Variable",
        xaxt = "n")

# Add custom X-axis labels
axis(1, at = x_pos, labels = data$variables)

# Add legend
legend("topright",
       legend = colnames(model_values),
       col = c("steelblue", "firebrick", "forestgreen"),
       pch = 16,
       bty = "n")

Key Notes

  • pch Parameter: Change this to use different point symbols (e.g., pch = 17 for triangles, pch = 15 for squares) if you prefer.
  • Colors: Feel free to swap the color names with hex codes (like #2E86AB for a custom blue) for more control.
  • X-Axis Labels: Using axis(1, at = x_pos, labels = data$variables) ensures every V_1 to V_16 label shows up, even if they're long.

内容的提问来源于stack exchange,提问作者Arthur Carvalho Brito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:26:23