R语言ggplot绘图轴显示异常求助:轴错位、堆叠长度不符
问题排查与解决
核心问题:x1列被意外转换为字符类型
给第一行赋值时使用了c(8.10136702697, "Uncleared", "Before"),c()函数会将所有元素强制转换为同一类型(此处为字符),导致原本定义为numeric的x1列变成字符型。后续用list()赋值的数值也会被自动转成字符,ggplot处理字符型y轴时会按离散值排序而非数值计算,直接引发轴错位、堆叠长度异常的问题。验证方法
运行str(dataframe1)查看列类型,会发现x1是chr类型而非预期的num类型。修复步骤
- 统一用
list()赋值,避免类型强制转换:dataframe1 = data.frame(x1 = numeric(), x2 = character(), x3 = character(), stringsAsFactors = FALSE) dataframe1[1,] = list(8.10136702697, "Uncleared", "Before") dataframe1[3,] = list(0.24816604371, "Uncleared", "After") dataframe1[2,] = list(4.47101137777, "Cleared", "Before") dataframe1[4,] = list(12.32421000000, "Cleared", "After") - 更简洁的方式是直接构建完整数据再转成数据框:
dataframe1 <- data.frame( x1 = c(8.10136702697, 4.47101137777, 0.24816604371, 12.32421000000), x2 = c("Uncleared", "Cleared", "Uncleared", "Cleared"), x3 = c("Before", "Before", "After", "After"), stringsAsFactors = FALSE ) - 额外注意:
coord_cartesian(ylim = c(0, 10))会截断"Cleared-After"的柱子(数值12.32超过10),若不想截断可改为scale_y_continuous(limits = c(0, 13))。
- 统一用
内容的提问来源于stack exchange,提问作者Stann98
相关产品推荐
相关产品推荐

