分别保存图(ggplots2)

时间:2018-08-02 16:12:50

标签: r dataframe ggplot2 plot

我在使用ggplot和用作输入的数据框方面有些挣扎。我有一个像这样的数据框A

   x         y
1  0 50.825022
2  1 44.154257
3  0 50.116500
4  1 46.027000
5  0 55.905105
6  1 50.753209
7  0 44.804500
8  1 42.894000
9  0 15.030799
10 1 11.881330
11 0 21.456833
12 1 18.942833
13 0  5.664676
14 1  3.350577

,我想将每对行与一条线一起绘制。例如,我想在同一图上将第1行(x = 0和y = 50.825002)和第2行(x = 1和y = 44.154257)的数据点绘制在一起,并用一条线链接两个数据点。对3-4和5-6等是相同的东西。

这个想法是要获得7个不同的地块,我可以分别导出它们。为了说明这一点,前两行的第一张图将是: enter image description here

如果有人可以用ggplot提示我这个技巧,我将非常感激。谢谢。

以下是需要复制和粘贴的数据框:

structure(list(x = c(0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 
                      0L, 1L, 0L, 1L), y = c(50.8250223621947, 44.1542573925467, 50.1165, 
                                             46.027, 55.9051046135438, 50.753208962261, 44.8045, 42.894, 15.0307991170913, 
                                             11.8813302333097, 21.4568333333333, 18.9428333333333, 5.66467592950172, 
                                             3.35057697360927)), .Names = c("x", "y"), class = "data.frame", row.names = c(NA, 
                                                                                                                           -14L))

1 个答案:

答案 0 :(得分:2)

假设df是您发布的数据集。

一种方法是创建一个数据集,该数据集将包含一列图,这些图也将以PDF文件的形式保存在您的工作目录中。

library(tidyverse)

df2 = df %>%
  group_by(g = cumsum(1-x)) %>%               # apply a grouping for every two rows; (0,1) pairs
  nest() %>%                                  # nest data
  mutate(p = map(data, ~ggplot(., aes(x,y))+  # create a plot for each group
                   geom_point()+
                   geom_line()),
         ppdf = map2(p,g, ~ggsave(filename = paste0(.y,".pdf"), plot=.x, device = "pdf")))  # save that plot in your working directory

df2

# # A tibble: 7 x 4
#         g data             p        ppdf  
#     <dbl> <list>           <list>   <list>
#   1     1 <tibble [2 x 2]> <S3: gg> <NULL>
#   2     2 <tibble [2 x 2]> <S3: gg> <NULL>
#   3     3 <tibble [2 x 2]> <S3: gg> <NULL>
#   4     4 <tibble [2 x 2]> <S3: gg> <NULL>
#   5     5 <tibble [2 x 2]> <S3: gg> <NULL>
#   6     6 <tibble [2 x 2]> <S3: gg> <NULL>
#   7     7 <tibble [2 x 2]> <S3: gg> <NULL>

如果执行df2$p[[1]]等操作,您可以看到这些图。但是您也可以在工作目录中将它们作为pdf格式。

另一种解决方案是将它们全部并排绘制:

df %>%
  mutate(g = cumsum(1-x)) %>%
  ggplot(aes(x,y))+
  geom_point()+
  geom_line()+
  facet_wrap(.~g)

enter image description here

当然,您可以更新绘图以使其完全符合您的喜好。