plot(net, edge.color=c("dark red", "slategrey")[(E(net)$type=="hyperlink")+1], vertex.color="gray40", layout=layout.circle)为什么我这段代码画出图来没有颜色也没有连线
时间: 2023-06-12 11:07:27 浏览: 83
这可能是因为您的代码中没有定义图的边和节点。您可以尝试以下步骤:
1. 定义节点和边:您需要首先定义图中的节点和边。您可以使用 `add.vertices()` 和 `add.edges()` 函数来实现。
例如,如果您要添加一个名为 "A" 的节点,可以使用以下代码:
```
add.vertices(net, 1, name="A")
```
如果您要添加一个从 "A" 到 "B" 的边,可以使用以下代码:
```
add.edges(net, c("A", "B"))
```
2. 定义节点和边的属性:一旦您定义了节点和边,您需要为它们定义属性,例如颜色和形状。您可以使用 `set.vertex.attribute()` 和 `set.edge.attribute()` 函数来实现。
例如,如果您要将节点 "A" 的颜色设置为红色,可以使用以下代码:
```
set.vertex.attribute(net, "color", "red", index="A")
```
如果您要将边的颜色设置为蓝色,可以使用以下代码:
```
set.edge.attribute(net, "color", "blue", index=E(net))
```
3. 使用 plot() 函数绘制图:最后,您可以使用 plot() 函数将图形绘制出来,如您所示。
请确保您已经正确地定义了节点和边,并为它们定义了适当的属性,然后再使用 plot() 函数。
相关问题
plot(net, edge.color=c("dark red", "slategrey")[(E(net)$type=="hyperlink")+1], vertex.color="gray40", layout=layout.circle)为什么我这段代码画出图来没有连线
可能是因为你的网络对象没有正确定义边属性。你可以尝试使用以下代码来定义边属性,然后再画图:
```
# 创建一个空的网络对象
net <- graph()
# 添加节点
net <- add_vertices(net, c("A", "B", "C"))
# 添加边以及边属性
net <- add_edges(net, c("A", "B", "B", "C"), edge.attr=list(type=c("hyperlink", "normal")))
# 设置布局
layout.circle <- layout.circle(net)
# 画图
plot(net, edge.color=c("dark red", "slategrey")[(E(net)$type=="hyperlink")+1], vertex.color="gray40", layout=layout.circle)
```
这样应该能够画出带有连线的图形。
请对以下R代码进行优化,画图使用ggplot2:set.seed(123) data <- matrix(rnorm(50*30), nrow = 50, ncol = 30) library(glmnet) x <- data[,1:29] y <- data[,30] fit1 <- cv.glmnet(x, y, alpha = 1, nfolds = 10) fit2 <- cv.glmnet(x, y+rnorm(50), alpha = 1, nfolds = 10) fit3 <- cv.glmnet(x, y+rnorm(50,mean=2), alpha = 1, nfolds = 10) cv1 <- min(fit1$cvm) cv2 <- min(fit2$cvm) cv3 <- min(fit3$cvm) par(mfrow=c(3,2)) plot(fit1$lambda, fit1$cvm, type="l", xlab="lambda", ylab="CV error", main="Model 1") abline(v=fit1$lambda.min, col="red") plot(fit1$lambda, fit1$glmnet.fit$dev.ratio, type="l", xlab="lambda", ylab="Prediction error", main="Model 1") abline(v=fit1$lambda.min, col="red") plot(fit2$lambda, fit2$cvm, type="l", xlab="lambda", ylab="CV error", main="Model 2") abline(v=fit2$lambda.min, col="red") plot(fit2$lambda, fit2$glmnet.fit$dev.ratio, type="l", xlab="lambda", ylab="Prediction error", main="Model 2") abline(v=fit2$lambda.min, col="red") plot(fit3$lambda, fit3$cvm, type="l", xlab="lambda", ylab="CV error", main="Model 3") abline(v=fit3$lambda.min, col="red") plot(fit3$lambda, fit3$glmnet.fit$dev.ratio, type="l", xlab="lambda", ylab="Prediction error", main="Model 3") abline(v=fit3$lambda.min, col="red") cat("CV of Model 1: ", cv1, "\n") cat("CV of Model 2: ", cv2, "\n") cat("CV of Model 3: ", cv3, "\n")
可以使用 ggplot2 包来画图,同时可以使用 apply() 函数来避免重复的代码。以下是优化后的代码:
```R
set.seed(123)
data <- matrix(rnorm(50*30), nrow = 50, ncol = 30)
library(glmnet)
x <- data[,1:29]
y <- data[,30]
fit1 <- cv.glmnet(x, y, alpha = 1, nfolds = 10)
fit2 <- cv.glmnet(x, y+rnorm(50), alpha = 1, nfolds = 10)
fit3 <- cv.glmnet(x, y+rnorm(50,mean=2), alpha = 1, nfolds = 10)
cv1 <- min(fit1$cvm)
cv2 <- min(fit2$cvm)
cv3 <- min(fit3$cvm)
library(ggplot2)
# define a function to plot CV and Prediction errors
plot_errors <- function(fit, model){
p1 <- ggplot() +
geom_line(aes(x = fit$lambda, y = fit$cvm), color = "blue") +
geom_vline(xintercept = fit$lambda.min, color = "red") +
xlab("lambda") +
ylab("CV error") +
ggtitle(paste0("Model ", model))
p2 <- ggplot() +
geom_line(aes(x = fit$lambda, y = fit$glmnet.fit$dev.ratio), color = "blue") +
geom_vline(xintercept = fit$lambda.min, color = "red") +
xlab("lambda") +
ylab("Prediction error") +
ggtitle(paste0("Model ", model))
plot_grid(p1, p2, ncol = 2)
}
# plot the errors for each model
plot_list <- lapply(list(fit1, fit2, fit3), function(fit) plot_errors(fit, which(list(fit1, fit2, fit3) == fit)))
# print the CV errors
cat("CV of Model 1: ", cv1, "\n")
cat("CV of Model 2: ", cv2, "\n")
cat("CV of Model 3: ", cv3, "\n")
# arrange and print the plots
plot_grid(plotlist = plot_list, ncol = 2)
```
这段代码首先定义了一个 `plot_errors()` 函数,用于绘制 CV error 和 Prediction error 的图形。然后,使用 `lapply()` 函数和一个列表,循环调用该函数来绘制每个模型的图形。最后,使用 `plot_grid()` 函数将所有的图形整合在一起。
阅读全文