如何用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
相关产品推荐
相关产品推荐

