ggplot 创建相关图

Posted

技术标签:

【中文标题】ggplot 创建相关图【英文标题】:ggplot to create correlation graph 【发布时间】:2012-09-07 22:20:03 【问题描述】:

我正在尝试使用ggplot2 创建变量之间的线性相关图:

dput(sum)
structure(list(Date = structure(c(15218, 15248, 15279, 15309, 
15340, 15371, 15400, 15431, 15461, 15492, 15522, 15553), class = "Date"), 
    Teams = c(87, 142, 173, 85, 76, 76, 93, 49, 169, 139, 60, 
    120), Scores = c("67101651", "62214988", "63183320", "66750198", 
    "61483322", "67546775", "75290893", "60713372", "77879142", 
    "70290302", "83201853", "83837301")), .Names = c("Date", 
"Teams", "Scores"), row.names = c(NA, 12L), class = "data.frame")

这是我的命令:

ggplot(sum, aes(x = Scores, y = Teams, group=1)) + 
    geom_smooth(method = "lm", se=TRUE, size=2, formula = lm(Teams ~ Scores))

我收到此错误:

Error in eval(expr, envir, enclos) : object 'Teams' not found

有什么想法吗?

【问题讨论】:

对于该线程的任何未来读者 - 像最常用的基本 R 函数之一那样调用数据帧不是一个好主意。在这个场合,我可以提醒一下df也是一个基本的R函数(虽然比sum使用得少) 这能回答你的问题吗? Adding a regression line on a ggplot 【参考方案1】:

如果您想为线性模型等指定公式,请使用y ~ poly(x, 1)。只要你想要一个简单的线性回归就不需要更改formula 参数(这是method = "lm" 的默认值):

ggplot(sum, aes(x = Scores, y = Teams, group = 1)) +
  geom_smooth(method = "lm", formula = y ~ poly(x, 1), se = TRUE, size = 2)

如果您不希望此变量为分类变量,我还建议使用 Scores 作为数值 (as.numeric(Scores))。这会改变回归线。

Score 作为分类变量:

Score 作为数值变量:

【讨论】:

有没有一种简单的方法可以将 r 平方值打印为图例? 一种简单的方法是将其打印在标题中。只需将opts(title = bquote(R^2 ~ ":" ~ .(summary(lm(Teams ~ as.numeric(Scores), sum))$r.squared))) 添加到绘图中即可。【参考方案2】:

这是使用 ggpubr 包中的 stat_cor 的另一个选项。此代码将绘制您的点并显示相关性和 p 值。如果您有非正常数据,您可以将“pearson”更改为“spearman”。

ggplot(sum, aes(x = Scores, y = Teams, group = 1)) +
  geom_point(aes()) +
  geom_smooth(method = "lm", se = TRUE, size = 2) +
  stat_cor(method = "pearson", cor.coef.name = "r", vjust = 1, size = 4)

【讨论】:

以上是关于ggplot 创建相关图的主要内容,如果未能解决你的问题,请参考以下文章

R:如何使用 ggplot2 创建一个半色半数的热图?

R语言实战应用精讲50篇(二十六)-数据可视化ggplot2-检验变量相关性图

堆叠条形图将变量转换为ggplot2 R中不相关变量的基于存在缺失的百分比

ggplot2 scale相关设置

R中的刻面或分组相关和相关图

Ggplot条形图不显示任何列[关闭]