正如标题所说,我想做一些线图。我们以mtcars
为例。
我想从这个数据集中总共绘制10行。我选择了那些:
> dput(vec)
c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive",
"Hornet Sportabout", "Valiant", "Duster 360", "Merc 240D", "Merc 230",
"Merc 280")
首先,我决定对整个数据集进行分组:
tbl_mtcars <- mtcars[row.names(mtcars) %in% vec, ]
并且我想绘制那些行,但假设在每个图上只有3行。 Merc 230和Merc 280的线应始终在图上,其余部分应逐一添加。
如果可以使用ggplot
完成,那就太棒了:
下面的函数只是我经常用于绘图的代码示例。
ggplot(tbl_mtcars, aes(gear, carb, group=factor(Name))) +
theme(legend.title=element_blank()) +
geom_line(aes(color=factor(Name))) +
ggtitle("Title")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
答案 0 :(得分:4)
首先,mtcars
可能不是说明您需求的最佳数据集。相反,我创建了一个10行和5列的数据框(代表观察)。
问题是,ggplot
需要一种特定形式的数据(而不是&#39;而不是&#39;宽&#39;),所以在我们绘制图表之前,我们需要首先修改数据。在这里,我使用melt
包中的reshape2
。
现在我们可以生成图表,同时记住你提到的两个修复行(ID)。这里,最后两个ID是固定的。请注意,我只在这里展示香草型的情节,没有太多的化妆品。
(编辑/更新:根据@Paul Hiemstra的建议,将for
循环替换为lapply
并删除eval-parse
组合,但仍保留grid.arrange
方法)
# Generate data: 10 IDs each with 5 observations
df <- data.frame(matrix(rnorm(50), 10, 5))
df$id <- as.numeric(rownames(df))
# Melt the data
require(reshape2)
df2 <- melt(df, id.vars = "id")
# Generate plots
require(ggplot2)
plot.list <- lapply(1:(max(df2$id)-2), function(i) {
df2.i <- df2[df2$id %in% c(i, 9, 10), ]
ggplot(df2.i) +
geom_line(aes(x = as.numeric(variable), y = value, colour = factor(id)))
})
# Combine plots
require(gridExtra)
do.call(grid.arrange, plot.list)
答案 1 :(得分:3)
在进行一些数据操作后,您可以使用与@zyurnaidi相同的数据集,但使用的是facetting而不是grid.arrange
。诀窍是使用两个geom_line
和facet_wrap
。第一个geom_line
绘制您想要看到的线,第二个是变化线。
library(dplyr)
library(tidyr)
df2 = as.data.frame(t(df)) %>%
gather(variable_id, value, -V9, -V10) %>%
gather(always_show_id, value_always, V9, V10) %>%
group_by(variable_id, always_show_id) %>% mutate(x_id = seq_len(length(variable_id)))
head(df2)
variable_id value always_show_id value_always x_id
1 V1 -0.89596500 V9 -0.1758441 1
2 V1 0.42307486 V9 -0.2183904 2
3 V1 -1.13538973 V9 0.3609882 3
4 V1 -0.05927355 V9 -0.3902112 4
5 V1 -0.69209362 V9 0.1045214 5
6 V2 -0.56098448 V9 -0.1758441 1
df2 %>% ggplot() +
geom_line(aes(x = x_id, y = value_always, group = always_show_id)) +
geom_line(aes(x = x_id, y = value), color = 'red') +
facet_wrap(~ variable_id)