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

如何用R绘制散点图?求改进Base R绘图效果的建议

完全懂你的感受——Base R的绘图语法确实有点反直觉,参数多还不好记,默认出来的图也确实不够精致。不过既然有时候还是得和它打交道,咱们来一步步把你这段散点图代码的效果提上去!

首先先把你的原始代码贴出来方便对照:

set.seed(55) 
df <- tibble(x_var = runif(100, min = 0, max = 25),
             y_var = log2(x_var) + rnorm(100) ) 
plot(x = df$x_var, y = df$y_var)

注意这里有个小问题:x_var可能取到0,log2(0)会产生NA值,所以第一步先清理数据,避免绘图时丢失部分点。接下来是具体的改进建议:

1. 基础外观优化:让点和文字更清晰

默认的空心点和小字体不够醒目,咱们调整点的样式、颜色,添加清晰的标题和坐标轴标签:

# 清理NA值
df_clean <- df[!is.na(df$y_var), ]

# 基础美化版
plot(x = df_clean$x_var, y = df_clean$y_var,
     pch = 19,  # 换成实心圆点,比默认空心更突出
     col = "#2E86AB",  # 用柔和的自定义蓝色代替黑色
     main = "Scatter Plot: log2(X) + Random Noise",  # 清晰的标题
     xlab = "X Variable (0 to 25)",  # X轴说明
     ylab = "Y Variable (log2(X) + Gaussian Noise)",  # Y轴说明
     cex = 1.2,  # 放大点的尺寸
     cex.lab = 1.1,  # 放大坐标轴标签
     cex.main = 1.3  # 放大标题字体
)

2. 添加趋势线:增强数据解读性

如果想展示变量间的趋势,添加一条线性拟合线很有帮助:

# 在基础美化图的基础上添加趋势线
abline(lm(y_var ~ x_var, data = df_clean), 
       col = "#F24C00",  # 用橙色和点的颜色区分
       lwd = 2)  # 线条加粗,更显眼

3. 加入网格线:提升读数体验

默认没有网格线,添加浅灰色虚线网格能让观众更容易对应坐标:

# 绘图时直接加入网格设置
plot(x = df_clean$x_var, y = df_clean$y_var,
     pch = 19,
     col = "#2E86AB",
     main = "Scatter Plot: log2(X) + Random Noise",
     xlab = "X Variable (0 to 25)",
     ylab = "Y Variable (log2(X) + Gaussian Noise)",
     cex = 1.2,
     cex.lab = 1.1,
     cex.main = 1.3,
     grid(nx = 5, ny = 5, col = "#E0E0E0", lty = 2)  # 浅灰色虚线网格
)
abline(lm(y_var ~ x_var, data = df_clean), col = "#F24C00", lwd = 2)

4. 自定义坐标轴:让展示更精准

默认坐标轴刻度可能不够贴合数据,咱们手动调整范围和刻度:

plot(x = df_clean$x_var, y = df_clean$y_var,
     pch = 19,
     col = "#2E86AB",
     main = "Scatter Plot: log2(X) + Random Noise",
     xlab = "X Variable (0 to 25)",
     ylab = "Y Variable (log2(X) + Gaussian Noise)",
     cex = 1.2,
     cex.lab = 1.1,
     cex.main = 1.3,
     xlim = c(0, 25),  # 固定X轴范围
     ylim = c(-2, 5),  # 根据数据分布固定Y轴范围
     xaxt = "n", yaxt = "n"  # 先隐藏默认坐标轴
)
# 自定义X轴刻度(每5个单位一个刻度)
axis(1, at = seq(0, 25, 5), cex.axis = 1)
# 自定义Y轴刻度(每1个单位一个刻度)
axis(2, at = seq(-2, 5, 1), cex.axis = 1)
# 添加网格和趋势线
grid(nx = 5, ny = 7, col = "#E0E0E0", lty = 2)
abline(lm(y_var ~ x_var, data = df_clean), col = "#F24C00", lwd = 2)

5. 添加图例:明确元素含义

如果图里有多个元素(比如数据点和趋势线),加个图例能让观众一目了然:

# 在上面的图基础上添加图例
legend("topleft", 
       legend = c("Data Points", "Linear Fit"),
       pch = c(19, NA),  # 图例里点的样式,趋势线用NA
       lty = c(NA, 1),  # 趋势线的样式,数据点用NA
       col = c("#2E86AB", "#F24C00"),
       cex = 1.1)

最后提个小技巧:如果经常需要用Base R绘图,可以把这些常用的美化参数封装成一个小函数,比如my_scatter_plot(),这样每次调用就不用重复写一堆参数了,能省不少事!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:33:12