首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不改变格式的情况下,按顺序显示ggplot2中的数据子集?

在不改变格式的情况下,按顺序显示ggplot2中的数据子集?
EN

Stack Overflow用户
提问于 2021-03-12 21:41:41
回答 1查看 33关注 0票数 0

我在ggplot2中生成了这个图表

这是我用来生成它的代码

代码语言:javascript
复制
library(ggplot2)
library(reshape)

l_mat <- matrix(0, ncol = 4, nrow = 4)
l_mat[1,1:2] <- c(1,-1)
l_mat[2,1:3] <- c(-1,2,-1)
l_mat[3,2:4] <- c(-1,2,-1)
l_mat[4,3:4] <- c(-1,1)

ev <- eigen(l_mat)$vectors
ev <- matrix(as.numeric(ev), 4, 4)
ev <- apply(ev, 2, function(x) {x/sum(abs(x))})
ev <- data.frame(ev)
names(ev) <- c("Eigenvector 4","Eigenvector 3","Eigenvector 2","Eigenvector 1")

p.data <- melt(ev)
names(p.data) <- c("Eigenvector", "Value")
p.data$Vertex <- rep(1:4, 4)
ggplot(p.data, aes(Vertex, Value, colour = Eigenvector)) + geom_line(linetype = "dashed") + geom_point()

我想在演示中使用这个数字,但我希望每个特征向量的每一组数据都按顺序出现。我的意思是,我想要一幅只有特征向量1的线和点的图片,然后是特征向量1和2,然后是1,2和3,最后是所有的。但是我希望图形的其他部分的格式保持不变(颜色、情节区域、图例等)保持不变,所以当我将其放入LaTeX时,每一行看起来都会出现。

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-12 23:58:24

要创建一个绘图簿,您可以像这样循环遍历您的特征向量:

代码语言:javascript
复制
library(tidyverse)

for(i in 1:4){
  p <- p.data %>% 
    filter(Eigenvector %in% paste("Eigenvector", 1:i)) %>% 
    ggplot(aes(Vertex, Value, colour = Eigenvector)) +
    geom_line(linetype = "dashed") +
    geom_point() +
    scale_y_continuous(limits = c((min(p.data$Value)), max(p.data$Value))) +
    scale_color_discrete(drop = FALSE)
  
  assign(paste0("plot_Eigenvecor_", i), p)
  plot(p)
}

scale_y_continuous将你的y轴修正到整个数据集的最小值和最大值.而scale_color_discrete(drop = FALSE)强制使用图例中的每个元素级别,即使在不需要时也是如此。

数据

代码语言:javascript
复制
structure(list(Eigenvector = structure(c(1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("Eigenvector 4", 
"Eigenvector 3", "Eigenvector 2", "Eigenvector 1"), class = "factor"), 
    Value = c(0.146446609406727, -0.353553390593274, 0.353553390593273, 
    -0.146446609406726, -0.25, 0.25, 0.25, -0.25, -0.353553390593274, 
    -0.146446609406726, 0.146446609406726, 0.353553390593273, 
    0.25, 0.25, 0.25, 0.25), Vertex = c(1L, 2L, 3L, 4L, 1L, 2L, 
    3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L)), row.names = c(NA, 
-16L), class = "data.frame")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66607575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档