直升机我想问一下如何CLASIC [R转换plot的ggplot,所以它看起来更好,在我的情况,我想绘制MORAN我情节ggplot。
例子:
library(spdep)
data(afcon, package="spData")
moran.plot(afcon$totcon, nb2listw(paper.nb))
Run Code Online (Sandbox Code Playgroud)
这不是立即操作。您可以查看代码moran.plot以找出生成莫兰图所需的所有操作。我把它们堆在这里(如果你运行下面的代码,你最终会得到相同的情节):
library(spdep)
data(afcon, package="spData")
x <- afcon$totcon
listw <- nb2listw(paper.nb)
wx <- lag.listw(listw, x, zero.policy = NULL)
xwx.lm <- lm(wx ~ x)
infl.xwx <- influence.measures(xwx.lm)
is.inf <- which(apply(infl.xwx$is.inf, 1, any))
labels <- as.character(attr(listw, "region.id"))
xlab <- "afcon$totcon"
ylab <- paste("spatially lagged", xlab)
plot(x, wx, xlab=xlab, ylab=ylab)
abline(xwx.lm)
abline(h = mean(wx), lty = 2)
abline(v = mean(x), lty = 2)
points(x[is.inf], wx[is.inf], pch = 9, cex = 1.2)
text(x[is.inf], wx[is.inf], labels = labels[is.inf],
pos = 2, cex = 0.7)
Run Code Online (Sandbox Code Playgroud)
所以我建议将这些操作分成两个步骤:准备数据然后绘制它。第一个函数将是某种形式
library(dplyr)
prepare_data <- function(data, x, listw){
# prepare a dataframe with variables x and wx, from the x and listw arguments
# this dataframe will be the base data for the ggplot() call
plot_data <- data %>%
mutate(
x = !!enquo(x),
wx = lag.listw(listw, x, zero.policy = NULL),
label = as.character(attr(listw, "region.id"))
) %>%
select(x, wx, label)
# Prepare other needed objects that don't fit into a dataframe
xwx.lm <- lm(plot_data$wx ~ plot_data$x)
infl.xwx <- influence.measures(xwx.lm)
# add non variables objects as attributes
attr(plot_data, which = "is.inf") <- which(apply(infl.xwx$is.inf, 1, any))
attr(plot_data, which = 'xwx.lm') <- xwx.lm
return(plot_data)
}
moran_plot_data <- prepare_data(afcon, totcon, nb2listw(paper.nb))
Run Code Online (Sandbox Code Playgroud)
这给你所有的情节所需要的对象:x,wx和label变量,is.inf和xwx.lm对象作为属性。然后你可以用这个对象构建一个 ggplot。您需要使用以下 ggplot2 函数(下面的代码很少,您必须添加标签、样式和内容):
library(ggplot2)
inf_data <- moran_plot_data[attr(moran_plot_data, "is.inf"), ]
ggplot() +
geom_point(data = plot_data, mapping = aes(x, y)) + # equivalent of plot(x, wx, xlab=xlab, ylab=ylab)
geom_abline("wxw.lm coefficients used here") +
geom_hline("mean(wx) used here") +
geom_vline("mean(x) used here") +
geom_point(data = inf_data, mapping = aes(x, y)) +
geom_text(data = inf_data, mapping = aes(x, y, label) +
labs(x = "x variable", y = "Spatially lagged x variable") +
theme("use this function to customise appearence")
Run Code Online (Sandbox Code Playgroud)
请随意广泛查看ggplot2 指南,以帮助您使用这些功能。