将具有相关系数的斜体r添加到ggplot中的散点图
Adding italicised r with correlation coefficient to a scatter plot chart in ggplot
我正在尝试使用下面的代码生成一个简单的散点图,该散点图的相关系数会以斜体显示 r。
data(mtcars)
# Load required libraries
require(ggplot2) # To derive the graphs
require(ggthemes) # To apply ggplot themes to the chart
require(scales) # For pretty breaks
# Function to generate correlation coefficient for the charts
corr_eqn <- function(x,y, digits = 2) {
corr_coef <- round(cor(x, y), digits = digits)
corr_coef <- expression(paste(italic(r)," = ", corr_coef))
return(corr_coef)
}
# Provide a scatter plot for income and health deprivation
ggplot(mtcars, aes(x = drat, y = wt)) +
geom_point(shape = 19, size = 2, aes(colour = as.factor(cyl))) +
geom_smooth(colour = "red", fill = "lightgreen", method = 'lm') +
ggtitle("Example") +
xlab("drat") +
ylab("wt") +
scale_colour_tableau("tableau10") +
geom_text(x = 3, y = 3,
label = corr_eqn(mtcars$drat,
mtcars$wt), parse = TRUE) +
theme(legend.key = element_blank(),
legend.background = element_rect(colour = 'black'),
legend.position = "bottom",
legend.title = element_blank(),
plot.title = element_text(lineheight = .8, face = "bold", vjust = 1),
axis.text.x = element_text(size = 11, vjust = 0.5,
hjust = 1, colour = 'black'),
axis.text.y = element_text(size = 11, colour = 'black'),
axis.title = element_text(size = 10, face = 'bold'),
axis.line = element_line(colour = "black"),
plot.background = element_rect(colour = 'black', size = 1),
panel.background = element_blank())
代码在控制台中以 ?
标记停止。 运行 包含以下行的代码:
# geom_text(x = 3, y = 3,
# label = corr_eqn(mtcars$drat, mtcars$wt), parse = TRUE) +
发表评论,生成如下图表:
我猜我生成 r = 0.7 格式方程的函数不起作用,我该如何解决?
如您所料,您只需要调整函数即可。您可以像 this answer 中那样使用 substitute
,但您也可以在此处只使用 paste
。
corr_eqn <- function(x,y, digits = 2) {
corr_coef <- round(cor(x, y), digits = digits)
paste("italic(r) == ", corr_coef)
}
请注意,如果您将 as.character
添加到您的原始函数返回的内容中,这些内容将会被解析。但是,结果将是 corr_coef
作为字符串而不是您想要的实际相关系数。
我还应该补充一点,如果您不将标签和坐标放入新的 data.frame,geom_text
可能会导致分辨率不佳。
labels = data.frame(x = 3, y = 3, label = corr_eqn(mtcars$drat, mtcars$wt))
然后使用 data
参数和 aes
用于 geom_text
:
geom_text(data = labels, aes(x = x, y = y,
label = label), parse = TRUE)
请参阅 annotate
和 geom = "text"
作为避免新 data.frame 的另一种选择。
我正在尝试使用下面的代码生成一个简单的散点图,该散点图的相关系数会以斜体显示 r。
data(mtcars)
# Load required libraries
require(ggplot2) # To derive the graphs
require(ggthemes) # To apply ggplot themes to the chart
require(scales) # For pretty breaks
# Function to generate correlation coefficient for the charts
corr_eqn <- function(x,y, digits = 2) {
corr_coef <- round(cor(x, y), digits = digits)
corr_coef <- expression(paste(italic(r)," = ", corr_coef))
return(corr_coef)
}
# Provide a scatter plot for income and health deprivation
ggplot(mtcars, aes(x = drat, y = wt)) +
geom_point(shape = 19, size = 2, aes(colour = as.factor(cyl))) +
geom_smooth(colour = "red", fill = "lightgreen", method = 'lm') +
ggtitle("Example") +
xlab("drat") +
ylab("wt") +
scale_colour_tableau("tableau10") +
geom_text(x = 3, y = 3,
label = corr_eqn(mtcars$drat,
mtcars$wt), parse = TRUE) +
theme(legend.key = element_blank(),
legend.background = element_rect(colour = 'black'),
legend.position = "bottom",
legend.title = element_blank(),
plot.title = element_text(lineheight = .8, face = "bold", vjust = 1),
axis.text.x = element_text(size = 11, vjust = 0.5,
hjust = 1, colour = 'black'),
axis.text.y = element_text(size = 11, colour = 'black'),
axis.title = element_text(size = 10, face = 'bold'),
axis.line = element_line(colour = "black"),
plot.background = element_rect(colour = 'black', size = 1),
panel.background = element_blank())
代码在控制台中以 ?
标记停止。 运行 包含以下行的代码:
# geom_text(x = 3, y = 3,
# label = corr_eqn(mtcars$drat, mtcars$wt), parse = TRUE) +
发表评论,生成如下图表:
我猜我生成 r = 0.7 格式方程的函数不起作用,我该如何解决?
如您所料,您只需要调整函数即可。您可以像 this answer 中那样使用 substitute
,但您也可以在此处只使用 paste
。
corr_eqn <- function(x,y, digits = 2) {
corr_coef <- round(cor(x, y), digits = digits)
paste("italic(r) == ", corr_coef)
}
请注意,如果您将 as.character
添加到您的原始函数返回的内容中,这些内容将会被解析。但是,结果将是 corr_coef
作为字符串而不是您想要的实际相关系数。
我还应该补充一点,如果您不将标签和坐标放入新的 data.frame,geom_text
可能会导致分辨率不佳。
labels = data.frame(x = 3, y = 3, label = corr_eqn(mtcars$drat, mtcars$wt))
然后使用 data
参数和 aes
用于 geom_text
:
geom_text(data = labels, aes(x = x, y = y,
label = label), parse = TRUE)
请参阅 annotate
和 geom = "text"
作为避免新 data.frame 的另一种选择。