r - 获取特定于 R 中每个 y 轴变量的相关趋势线和 R 值
问题描述
我想绘制变量 B、C、D(y 轴)与 A(x 轴)的相关性,以获得与此类似的图:
如何获得绘制在对数刻度 y 轴上的每个变量的特定相关趋势线和 R 值?到目前为止,我已经获得了以下信息:
A = c(3984,5307,3907, 3848, 4024, 6930, 6217, 6206, 5976, 4043)
B = c(18117, 16512, 17891, 17783, 12643, 12864, 10997, 12946, 12325, 12594)
C = c(9403, 9375, 7142, 6659, 8660, 9072, 7965, 8444, 6467, 6245)
D = c(443, 564, 541, 525, 503, 682, 563, 584, 639, 413)
data = data.frame(A, B, C, D)
data2<- melt(data, id.vars = 'A', variable.name = 'letter')
ggplot(data2, aes(A,value)) + geom_point(aes(colour = letter)) + scale_y_continuous(trans='sqrt') + stat_smooth(method=lm) + stat_cor(aes(color = letter), label.x = 3)
ggplot(data2, aes(A,value)) + geom_point(aes(colour = letter)) + stat_cor(method = "pearson", label.x = 4000, label.y = 1.9) + stat_smooth(method=lm) + facet_wrap(letter~ .)
解决方案
我以前没用过stat_cor
。所以我不得不做一些试验和错误。也许有一种更好的方法可以按照您的需要获得情节。
您的代码中的第一个问题。因为你在colour
里面设置了审美,geom_point
所以它没有被传递给其他函数(stat_cor
和geom_smooth
)。要解决此问题,您可以在函数colour
内部进行设置,ggplot
并将其传递给管道中的其他函数。
此外,我必须创建另一个 data.frame 来获取每个组中标签 (label.x
和) 的位置。label.y
在这种情况下它有效,但我认为它不会在所有情况下都有效(例如,如果线越过)。无论如何,您需要或多或少地手动设置位置,使用类似于我所做的方法。
# for each letter, get x and y values for x == max(x)
df.pos.labels <- data2 %>% group_by(letter) %>% slice_max(A) %>%
mutate(value=sqrt(value))
ggplot(data2, aes(x=A, y=value, colour=letter)) + geom_point() +
scale_y_continuous(trans='sqrt') +
ggpubr::stat_cor(method = "pearson", hjust=0.5, vjust=0, label.x = df.pos.labels$A,
label.y=df.pos.labels$value) +
stat_smooth(method='lm', formula = 'y ~ x') +
coord_cartesian(clip = 'off')
这将创建将颜色映射到组的线条和方程式。如果您希望您的方程式都是相同的颜色(例如黑色),您可以在内部geom_point
和stat_smooth
单独映射颜色美学,并group
在主ggplot
调用中使用参数。
ggplot(data2, aes(x=A, y=value, group=letter)) + geom_point(aes(colour = letter)) +
scale_y_continuous(trans='sqrt') +
ggpubr::stat_cor(method = "pearson", hjust=0.5, vjust=0, label.x = df.pos.labels$A,
label.y=df.pos.labels$value) +
stat_smooth(aes(colour = letter), method='lm', formula = 'y ~ x') +
coord_cartesian(clip = 'off')
请注意,coord_cartesian(clip = 'off')
方程不会在绘图区域的末端被剪裁。因此,您可能需要移动图例。您还可以更改 x 轴的限制,以便方程适合绘图区域。
推荐阅读
- julia - Julia 1.0 中的 GLText 包
- powerbi - 同比差异计算错误“EARLIER/EARLIEST”指的是不存在的较早行上下文
- jenkins - 通过 Google Actions/Dialogflow 访问 API
- c# - 特定成员基类型的调用方法
- vue.js - 仅在 vue.js 一次 v-for over object 中渲染块?
- google-cloud-platform - Dialogflow 禁用 Google 助理
- c - 将 pragma 扩展为评论(对于 doxygen)
- eiffel - Eiffel:编译错误`分配源与目标不兼容`
- javascript - 调整旭日形水平的饱和度 - Highcharts
- apache-spark - SparkSQL 任务数