R基础绘图教程:如何将文本字符类型数据设置为X轴标签
报错原因&解决方法
核心报错诱因
你当前的Countries列实际是列表类型,并非普通字符向量。你用lapply做类型转换时,lapply默认返回列表结构,导致plot()函数无法识别分类轴的坐标值,才触发need finite 'xlim' values报错。
你可以运行class(Finally$Countries)验证,输出会是list而非character。
修复步骤
第一步:修正Countries列的数据类型
在预处理代码最后加一行,把列表列转成普通字符向量即可:
Finally$Countries <- unlist(Finally$Countries)
如果需要固定分类轴的显示顺序,也可以转成因子(默认按数据现有顺序排列):
Finally$Countries <- factor(unlist(Finally$Countries), levels = unique(unlist(Finally$Countries)))
第二步:修正绘图代码
R基础绘图原生支持分类X轴,考虑到国家名称较长容易重叠,调整后的完整绘图代码如下:
# 调大下边距,避免国家名被截断 par(mar = c(12, 4, 4, 4) + 0.3) # 绘制第一个指标,先关闭默认X轴输出方便自定义 plot(x = Finally$Countries, y = Finally$RobberyPerCent, pch = 16, col = 2, xaxt = "n", xlab = "国家", ylab = "RobberyPerCent") # 自定义X轴刻度,文字旋转90度避免重叠 axis(side = 1, at = 1:nrow(Finally), labels = Finally$Countries, las = 2, cex.axis = 0.7) # 叠加第二个指标 par(new = TRUE) plot(x = Finally$Countries, y = Finally$UnlawfulPerCent, pch = 17, col = 3, axes = FALSE, xlab = "", ylab = "") # 添加右侧第二Y轴 axis(side = 4, at = pretty(range(Finally$UnlawfulPerCent))) mtext("UnlawfulPerCent", side = 4, line = 3) # 添加图例区分两个指标 legend("topright", legend = c("RobberyPerCent", "UnlawfulPerCent"), pch = c(16,17), col = c(2,3))
内容的提问来源于stack exchange,提问作者iKcon
相关产品推荐
相关产品推荐

