2016-09-15 2 views
0

Я использую R и ggplot2, у меня есть два кадра данных. Они содержат гораздо больше данных, чем я показываю. Они идут с 1970-2016 гг.Окраска определенной строки в линейной диаграмме, в r, после объединения двух фреймов данных

головы (посещаемость)

Tm Attendance Attend/G BatAge PAge BPF PPF #HOF #A-S #a-tA-S Est. Payroll Time Managers year Chall Succ Succ% 
ATL 1078848 13319 29.5 28.7 105 105 4 4  13    2:33 Harris 1970 <NA> <NA> <NA> 
BAL 1057069 13050 28.8 28.5 101 98 3 7  15    2:34 Weaver 1970 <NA> <NA> <NA> 

head(df) 
year avg_attendance 
1970 1197806 
1971 1216392 

Я объединил их, чтобы создать этот графический

enter image description here

с помощью этого кода,

r <- ggplot() 
r + geom_line(data = attendance, aes(x = year, y = Attendance, group = Tm), colour = "Grey") + 
geom_line(data = df, aes(x = Year, y = avg_attendance), colour = "red") 

Но в данных посещаемости Я хочу покрасить одну из строк для Tm (команд). Значение MIL - средняя посещаемость.

я был в состоянии цвет MIL используя этот код,

p <- ggplot(data = attendance, aes(x = year, y = Attendance, group = Tm)) 
p + geom_line(aes(colour = Tm == "MIL")) + scale_color_manual(values = c("#CCCCCC","#000066")) 

enter image description here

Когда я пытался добавить кадр данных DF, однако, я постоянно получаю сообщение об ошибке.

Error in eval(expr, envir, enclos): object 'Tm' not found. 

В принципе, могу ли я поменять переменную MIL в исходной диаграмме? Можно ли также выделить его? Например, во втором графике он перекрывается несколькими строками.

Действительно, хочу, чтобы я пытался сравнить посещаемость MIL со средней посещаемостью.

Все и любая помощь будут очень благодарны.

Извините, вы должны будете использовать эти данные. Для данных df вы можете использовать один сверху, и он должен работать. Строковый график, очевидно, не будет таким же, но, я думаю, он должен работать для кода, который я ищу.

Tm Attendance Attend/G BatAge PAge BPF PPF HOF Time year Chall Succ Succ% 
1 ATL 1078848 13319 29.5 28.7 105 105 4 2:33 1970 <NA> <NA> <NA> 
2 BAL 1057069 13050 28.8 28.5 101 98 3 2:34 1970 <NA> <NA> <NA> 
3 BOS 1595278 19695 26.5 27.9 108 107 1 2:34 1970 <NA> <NA> <NA> 
4 CAL 1077741 13305 26.6 26.0 96 97 0 2:35 1970 <NA> <NA> <NA> 
5 CHC 1642705 20534 30.0 27.7 111 110 5 2:34 1970 <NA> <NA> <NA> 
6 CHW  495355  5897 27.0 27.0 101 102 1 2:29 1970 <NA> <NA> <NA> 
7 CIN 1803568 22266 25.9 25.2 104 103 2 2:31 1970 <NA> <NA> <NA> 
8 CLE  729752  9009 26.2 25.9 104 105 0 2:36 1970 <NA> <NA> <NA> 
9 DET 1501293 18534 28.8 26.6 101 101 1 2:39 1970 <NA> <NA> <NA> 
10 HOU 1253444 15475 26.6 26.3 96 96 1 2:36 1970 <NA> <NA> <NA> 
11 KCR  693047  8773 26.4 26.2 99 100 0 2:36 1970 <NA> <NA> <NA> 
12 LAD 1697142 20952 27.9 26.7 95 94 1 2:36 1970 <NA> <NA> <NA> 
13 MIL  933690 11527 29.2 27.8 100 101 0 2:36 1970 <NA> <NA> <NA> 
14 MIN 1261887 15579 28.6 28.1 103 102 3 2:38 1970 <NA> <NA> <NA> 
15 MON 1424683 17809 27.7 26.7 99 101 0 2:35 1970 <NA> <NA> <NA> 
16 NYM 2697479 32896 26.5 26.1 100 99 2 2:36 1970 <NA> <NA> <NA> 
17 NYY 1136879 14036 27.0 27.5 95 95 0 2:30 1970 <NA> <NA> <NA> 
18 OAK  778355  9609 27.7 27.2 97 95 4 2:31 1970 <NA> <NA> <NA> 
19 PHI  708247  8853 26.7 28.8 97 99 1 2:33 1970 <NA> <NA> <NA> 
20 PIT 1341947 16365 27.7 27.9 97 96 3 2:30 1970 <NA> <NA> <NA> 
21 SDP  643679  7947 26.6 26.4 95 98 0 2:32 1970 <NA> <NA> <NA> 
22 SFG  740720  9145 28.0 28.4 99 99 4 2:48 1970 <NA> <NA> <NA> 
23 STL 1629736 20120 27.7 26.4 102 102 4 2:31 1970 <NA> <NA> <NA> 
24 WSA  824789 10183 28.1 27.6 95 95 0 2:33 1970 <NA> <NA> <NA> 
25 ATL 1006320 12272 27.2 28.5 106 107 5 2:26 1971 <NA> <NA> <NA> 
26 BAL 1023037 13286 29.9 29.5 99 97 3 2:25 1971 <NA> <NA> <NA> 
27 BOS 1678732 20984 27.9 29.1 108 107 3 2:27 1971 <NA> <NA> <NA> 
28 CAL  926373 11437 27.7 26.4 92 93 0 2:31 1971 <NA> <NA> <NA> 
29 CHC 1653007 20407 30.2 28.7 113 112 4 2:26 1971 <NA> <NA> <NA> 
30 CHW  833891 10295 25.6 25.9 103 104 0 2:30 1971 <NA> <NA> <NA> 
31 CIN 1501122 18532 26.8 25.1 95 94 2 2:21 1971 <NA> <NA> <NA> 
32 CLE  591361  7301 26.3 25.1 109 110 0 2:36 1971 <NA> <NA> <NA> 
33 DET 1591073 19643 29.6 26.7 105 104 1 2:42 1971 <NA> <NA> <NA> 
34 HOU 1261589 15575 26.1 26.5 97 97 1 2:27 1971 <NA> <NA> <NA> 
35 KCR  910784 11244 27.2 26.7 98 98 0 2:29 1971 <NA> <NA> <NA> 
36 LAD 2064594 25489 28.7 28.4 94 93 2 2:28 1971 <NA> <NA> <NA> 
37 MIL  731531  8921 27.1 26.0 98 99 0 2:29 1971 <NA> <NA> <NA> 
38 MIN  940858 11910 28.5 27.3 103 102 3 2:36 1971 <NA> <NA> <NA> 
39 MON 1290963 16137 28.3 27.0 99 101 0 2:27 1971 <NA> <NA> <NA> 
40 NYM 2266680 27984 26.6 26.1 98 98 2 2:28 1971 <NA> <NA> <NA> 
41 NYY 1070771 13219 28.3 27.3 94 94 0 2:28 1971 <NA> <NA> <NA> 
42 OAK  914993 11296 26.8 26.5 98 96 4 2:34 1971 <NA> <NA> <NA> 
43 PHI 1511223 18657 26.3 28.6 100 102 1 2:29 1971 <NA> <NA> <NA> 
44 PIT 1501132 18764 27.7 27.7 102 99 3 2:27 1971 <NA> <NA> <NA> 
45 SDP  557513  6883 26.4 26.3 93 95 0 2:25 1971 <NA> <NA> <NA> 
46 SFG 1106043 13655 27.3 28.5 99 99 4 2:38 1971 <NA> <NA> <NA> 
47 STL 1604671 19569 28.5 27.1 104 104 4 2:26 1971 <NA> <NA> <NA> 
48 WSA  655156  8088 27.6 26.4 93 95 0 2:28 1971 <NA> <NA> <NA> 
+1

пожалуйста обеспечивают воспроизводимый пример ... –

ответ

1

ggplot снова ищет переменную group, и не находя его. Вы должны быть в состоянии либо добавить столбец Tm в df (если хотите, установите его в «Сред.») Или установите group в NULL.

Чтобы привести линию вперед, вам необходимо установить уровни факторов (для точек, сортировка обычно работает, но сначала вычисляются строки, отсортированные по уровням факторов, подразумеваемые или явные, а затем построенные).

Поскольку вы не предоставили данные образца, здесь приведены рабочие версии каждого из них с встроенным набором.

# Generate average line 
average <- 
    ChickWeight %>% 
    group_by(Time) %>% 
    summarise(weight = mean(weight)) 

# Specify levels to get the desired one at the end 
# Will be a bit trickier with text, but doable 
chickLevs <- c((1:50)[-20], 20) 


# Plot with adding the variable: 
ggplot(ChickWeight %>% 
     mutate(plotChick = factor(Chick, levels = chickLevs)) 
     , aes(x = Time, y = weight, group = plotChick)) + 
    geom_line(aes(col = Chick == 20)) + 
    geom_line(data = average %>% mutate(plotChick = "Avg") 
      , col = "red3") + 
    scale_color_manual(values = c("#CCCCCC","#000066")) 


# Plot setting group to NULL 
ggplot(ChickWeight %>% 
     mutate(plotChick = factor(Chick, levels = chickLevs)) 
     , aes(x = Time, y = weight, group = plotChick)) + 
    geom_line(aes(col = Chick == 20)) + 
    geom_line(data = average 
      , aes(group = NULL) 
      , col = "red3") + 
    scale_color_manual(values = c("#CCCCCC","#000066")) 
+1

возможно рассматривать не отвечая на вопрос, до тех пор, пока ОП фактически отправил данные (таким образом ОР будет выталкиваться, чтобы узнать, как задать вопрос хорошо отформатированный) или рассмотреть возможность использования образцы данных, которые вы предоставили себе перед отправкой кода, который, по вашему мнению, может иметь несколько ошибок. Сказав это, я думаю, что ваша интуиция правильна в вашем ответе ... –

+1

@CyrusMohammadian - вы абсолютно правы. Я бежал на ланч и думал, что смогу быстро его отпустить. Я должен был подождать, пока у меня не будет времени, чтобы сделать это правильно. Я решил использовать встроенный набор данных. OP, вы действительно должны предоставить воспроизводимые примеры. –

+0

Извините, что я довольно новичок в R и переполнении стека, я думаю, что данные, приведенные выше, должны работать. Спасибо за вашу помощь. – Julien

Смежные вопросы