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

求助:ggplot2绘制双数据散点图异常,点呈垂直直线无X轴刻度

问题原因与修复方案

核心问题

散点图出现垂直直线、X轴无数据的直接原因是:ggplot的aes(x=...)里传入了字符串常量,而非数据框的列名。当你写x = "Violent deaths in conflicts and one-sided violence (UCDP 2019)"时,ggplot会把这个字符串当成单一分类值,所有点都映射到这个值上,自然形成垂直直线,X轴也只会显示这个固定字符串。

另外代码还存在语法和列名匹配错误,一起修复如下:

完整修复后的代码

library(tidyverse) # 已包含dplyr和ggplot2,无需重复加载

# 读取冲突死亡数据
conflict_rate <- read_csv("https://raw.githubusercontent.com/owid/owid-datasets/master/datasets/Conflict%20deaths%20by%20country%20%E2%80%93%20UCDP%20(2019)/Conflict%20deaths%20by%20country%20%E2%80%93%20UCDP%20(2019).csv")

# 修正列名匹配后重命名冲突死亡列(原列名多打了一个右括号)
colnames(conflict_rate)[colnames(conflict_rate) == "Violent deaths in conflicts and one-sided violence (UCDP 2019)"] <- "Deaths_in_conflict"

# 注意:需确保你已加载名为"data"的清廉指数数据,且包含Entity、Year列用于内连接
# jointdata <- inner_join(data, conflict_rate, by = c("Entity", "Year"))

# 重命名清廉指数列
colnames(jointdata)[colnames(jointdata) == "Corruption.Perception.Index..Transparency.International..2016.."] <- "TICPI"

# 绘制散点图:x使用重命名后的列名,不要加引号
ggplot(jointdata, aes(x = Deaths_in_conflict, y = TICPI)) +  
  geom_point() +  
  labs(
    title = "Violent deaths vs Corruption perception",    
    x = "Violent deaths in conflicts and one-sided violence (UCDP 2019)",  
    y = "Corruption Perception Index (Transparency International 2016)"
  )

关键修复点

  • 去掉x轴参数的引号:aes(x = Deaths_in_conflict),让ggplot识别数据框的列而非固定字符串
  • 修正列名匹配错误:原冲突死亡列名是(UCDP 2019),你之前多写了一个右括号,导致重命名失败
  • 优化包加载:tidyverse已包含dplyr和ggplot2,无需重复加载
  • 修正语法问题:重命名列的代码后需换行或加分号,避免和后续代码连在一起触发语法错误

额外提醒

确保你的data对象(清廉指数数据)已正确加载,且包含Entity和Year列用于内连接。如果两类数据年份范围差异大,可能导致连接后数据量极少,可通过nrow(jointdata)检查数据行数。

内容的提问来源于stack exchange,提问作者Yinabi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:32:42