ggplot2图表未按y列升序排列问题求助(附R语言代码)
问题诊断与修复方案
你的图表y轴顺序异常,核心原因是y列数据被识别为字符/因子类型,而非数值类型——ggplot会按字符的字典序排列(比如"10"会排在"2"前面),而非数值大小排序。
修复步骤
1. 修正数据读取(最关键)
你的数据用sep=';'读取,但如果是欧洲地区的CSV(小数用逗号分隔),read.table会把数值列识别为字符。读取时指定小数分隔符:
tabela <- read.table("C:/Users/pedro/OneDrive/Ambiente de Trabalho/hicp.csv", sep = ';', header = T, dec=',')
2. 强制转换y列为数值(如果读取时没处理)
如果已经读入数据,手动把字符/因子转成数值:
# 替换逗号为点,再转数值 tabela_bread_c <- as.numeric(gsub(',', '.', tabela_bread_c)) tabela_poultry <- as.numeric(gsub(',', '.', tabela_poultry))
3. 验证数据类型并绘图
构建数据框后,确认y列是数值类型,再绘图:
df <- data.frame(x=anos, y=tabela_bread_c) # 检查类型,确保y是numeric str(df) ggplot(df, aes(x = x, y = y)) + geom_point() + labs(title="Evolução de preços") + ylab("Preço dos Produtos") + xlab("Ano e Mês")
完整修正代码
dev.new() library(ggplot2) # 读取CSV时处理分号分隔和逗号小数 tabela <- read.table("C:/Users/pedro/OneDrive/Ambiente de Trabalho/hicp.csv", sep = ';', header = T, dec=',') # 提取目标数据 tabela_bread_c = tabela[c(5, 34, 63, 92, 121, 150, 179, 208, 237, 266, 295, 324, 353), 3] anos = tabela[c(5, 34, 63, 92, 121, 150, 179, 208, 237, 266, 295, 324, 353), 1] # 构建数据框 df <- data.frame(x=anos, y=tabela_bread_c) # 绘图 ggplot(df, aes(x = x, y = y)) + geom_point() + labs(title="Evolução de preços") + ylab("Preço dos Produtos") + xlab("Ano e Mês")
内容的提问来源于stack exchange,提问作者user20357700
相关产品推荐
相关产品推荐

