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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:20:58