首页 > 解决方案 > 如何根据R中的rowid在一个图中绘制两列

问题描述

我想仅用于绘制我的数据框中的一些列,但我不知道如何并且我不能排除未参与绘图的行。

这就是数据的样子:

txt <- "
PM10  PM25 Month row color
1     73  15.5     1   1 black
2     57  12.3     1   2 black
3     22   5.8     1   3 black
4     16   5.2     1   4 black
5     32   9.3     1   5 black
6     42   8.5     1   6 black
7    120  21.5     1   7 black
8     70  18.1     1   8 black
9     14   6.2     1   9 black
10    12   5.0     1  10 black
11    16   4.5     1  11 black
12    15   5.2     1  12 black
13    40   6.4     1  13 black
14    61  10.0     1  14 black
15    74   9.5     1  15 black
16   145  12.8     1  16 black
17    58   6.7     1  17 black
18    36   4.6     1  18 black
19    35   2.8     1  19 black
20    43   4.5     1  20 black
21    73   7.5     1  21 black
22    40   3.7     1  22 black
23    33   5.1     1  23 black
24    32   4.2     1  24 black
25    47  12.5     1  25 black
26    79  22.3     1  26 black
27    72  16.0     1  27 black
28    44  15.0     1  28 black
29    38   9.3     1  29 black
30    35   7.0     1  30 black
31    24   6.3     1  31 black
32    82  67.0     2  32 black
33   166 157.0     2  33 black
34    68  56.0     2  34 black
35    87  72.0     2  35 black
36    58  47.0     2  36 black
37    30  24.0     2  37 black
38    52  42.0     2  38 black
39    18  12.0     2  39 black
40    37  31.0     2  40 black
41    51  43.0     2  41 black
42    65  53.0     2  42 black
43    71  59.0     2  43 black
44   144 121.0     2  44 black
45   131 112.0     2  45 black
46   117 109.0     2  46 black
47    31  23.0     2  47 black
48    59  41.0     2  48 black
49   123 104.0     2  49 black
50    96  81.0     2  50 black
51   145 113.0     2  51 black
52    99  76.0     2  52 black
53    86  68.0     2  53 black
54    91  72.0     2  54 black
55    39  31.0     2  55 black
56    40  32.0     2  56 black
57    61  55.0     2  57 black
58    82  61.0     2  58 black
59   111  95.0     2  59 black
60    57  45.0     3  60 black
61    29  16.0     3  61 black
62    33  22.0     3  62 black
"
df <- read.table(textConnection(txt), header = TRUE)

一些代码准备我的数据框来练习:

df <- data.frame(data)
df$Month <- as.numeric(format(data$date,format="%m"))
df <- df %>% select("PM10","PM25","Month") ##%>% mutate(row=row_number())
df$color <- 'black'

问题是我可以轻松地将它们绘制在两个不同的图中

plot (df$PM10)
par(new=TRUE)
plot (df$PM25)

但我需要把它合二为一……

当我以这种方式绘制它时:

plot(df)

它需要每一列来绘制,我只想显示PM10PM25,作为每个 rowid 以“对”显示的值。

因此,我只想绘制带有PM10点和PM25点的情节,并且每个点都将附加到 rowid。我怎样才能做到这一点?

标签: r

解决方案


如果您使用包dplyr来准备数据,请尝试使用包ggplot2来绘制图形。

我添加了一些行Month == 12,因为问题的数据中没有。见最后。

df2 <- df %>% 
  mutate(color = ifelse(Month == 12, "red", as.character(color)),
         color = factor(color, labels = c("Other", "12")),
         x = row_number())

ggplot(df2, aes(x = x, colour = color)) +
  geom_point(aes(y = PM10)) +
  geom_point(aes(y = PM25)) +
  scale_color_manual(name = "Month", values = unique(df2$color))

在此处输入图像描述

的新数据Month == 12

sp <- split(df, df$Month)[[1]]
sp[['Month']] <- 12
sp[['PM10']] <- jitter(sp[['PM10']])
sp[['PM25']] <- jitter(sp[['PM25']])
df <- rbind(df, sp)

推荐阅读