Skip to content

Instantly share code, notes, and snippets.

@amirebrahimi
Last active November 12, 2015 06:39
Show Gist options
  • Save amirebrahimi/d14af92f2a4a490f5a96 to your computer and use it in GitHub Desktop.
Save amirebrahimi/d14af92f2a4a490f5a96 to your computer and use it in GitHub Desktop.
Hey, batter batter...swing!

Summary

This data visualization shows the relationship of home runs to batting average for a small sample of baseball players from the annals of MLB. What's shown here is that all players are not equal in terms of performance, and moreso that a player that has a batting average of 0.300 is not simply 1.5x better than a player with a batting average of 0.200.

Design

I chose a scatterplot because it is an effective way to show a bivariate relationship for a sizable amount of data. Home runs and batting averages are visually encoded as positional data along the Y and X axis. I thought a "martini glass" approach made sense in order to walk the viewer through the data and leave him/her to explore the data
further after the walkthrough.

Changes to Version 1 based on feedback:

  1. Better color choices (using ColorBrewer 2.0)
  2. Re-word handedness from L, R, and B to Left, Right, and Switch
  3. Zoom in on a specific region of the graph (0.200 to 0.300)
  4. Re-phrase wording in tour steps
  5. Change x-axis markings to have 3 significant figures
  6. Reduce emphasis on title of visualization

Changes to Version 2 based on feedback:

  1. Fix issue where all three 'handedness' values could be turned off
  2. Consolidate 5 steps to reduce the total tour steps from 15 down to 10
  3. Leave linear regression line visible
  4. Add a custom tooltip for the linear regression line and averages

Changes to Version 3 based on feedback:

  1. Add suggestion to click Next on first tour step
  2. Swap blue color for a different color in the legend
  3. Increase font size of the axes labels

Changes to Version 4 after initial project submission:

  1. Remove handedness, color, and averages
  2. Remove tour step delays
  3. Reword final tour step
  4. Emphasize call out data points
  5. Comment code

Feedback

Version 1

Questions asked:

  • What do you notice in the visualization?
  • What relationships do you notice?
  • What do you think is the main takeaway from this visualization?

From wanda_402709928:

I like your graph and the interaction boxes that made user interested. It makes users looking forward what kind of graph they will see. I also like your hover over boxes are related to the legend color.

I think it seems left batters had high batting average and more home runs. The batter who has batting average between 0.25 and 0.30 is likely to have higher home runs number. Most of batters have less than 100 home runs and most of the batting averages are between 0.2 and 0.3.

Here are few suggestions:

  1. I can guess R and L in the legend stand for right hand and left hand, but it is hard to guess what B means both hands. Also B and R colors are too close to each other (especially with opacity), it is even harder to tell the difference.
  2. It seems you do not have data for batting average that is below 0.05, why not starts at 0.05?
  3. If it is possible, maybe zoom in the area of 0.2 < x < 0.3 and 0 < y<50. It seems about 60% of data belongs to that area, it is hard to tell quickly without hover over the data point.

I hope these help. Great job!

From michael_807478:

I thought the questions at the beginning were interesting. I would have preferred them to be optional rather than, in effect, mandatory, though I see the point of setting up the question the graphic is going to answer. It is also a bit confusing in that the answer given in the text box, that a batter that hits 300 is 1.5x better than one who hits 200, is contradicted by the visualization and the accompanying text to the effect that the 300 player, "is not simply 1.5x better" than the 200 player. Maybe you could tailor the text a bit more to your argument? Say, something to the effect, "300 is 1.5x 200, but is that the whole story?"

The first graph is beautiful. The color scheme and the light grid and bolder axes are very attractive and bring out the right information.

The numbers on the x axis, since they are batting averages could be displayed as 200, 300, etc., instead of 0.20, 0.30, perhaps?

Perhaps there could be fewer numbers on the y-axis?

Colors: I had trouble picking out the yellows.

Like Wanda, the legend of L, R and B was not clear to me until I read the accompanying text. Consider "left handed", "right handed" and "switch hitter"?

It is not clear from the visualization that there is a difference in the relationship between batting averages and home runs for left-handed and right-handed batters.

The text box that pops up when you hover over a point is very nicely done and a nice feature.

Height and Weight come up in those text boxes. I wonder if those variables don't have more of a systematic relationship with batting averages and home runs. Maybe they could be working, either replacing color or being encoded in the size of the points? Or not. Just wondering aloud, really.

The words: "MLB Home Runs vs. Batting Averages" are in bold seriffed font while everything else is lighter and sans serif. I think more focus could be placed on other text in the graphic and less on the title by adjusting this perhaps?

This is a great job. You should be proud of it.

Version 2

Questions asked:

  • What questions do you have about the data?
  • What do you think is the main takeaway from this visualization?
  • Is there something you don’t understand in the graphic?

From wanda_402709928:

Great job, Amir! It looks great and I like your animation/conversation with users.

Q1 - Is there any correlation among batter's handedness, home runs, and batting average? Q2 - More right hand batters than left hand batters. More left hand batters have higher batting average above 0.3 Q3 - Everything seems clear for me.

Comment - When I un-click all 3 batter handedness, the axes seems to shift and overlap with legend. (Sorry, I used to be a QA)

It looks great! I enjoyed your visualization!

From yang_313442:

Hi Amir,

The way you guide readers through multiple steps is interesting. Below are a few suggestion, or my feelings:

  • I feel that there are too many steps before it reaches the end. Maybe you can combine some steps, for example, the first few steps can be combined into one so that the reader can see the data immediately after the first question
  • The fitting line disappear at the end of the guided tour. I feel it is the better to leave it there as it is related to the message that you try to deliver to the audience.
  • The tool tip for the average points shown at the end confused me. I guess you took the average of both "batting average" and "home runs" within each handedness groups, right?

Nice work!

Version 3

From casbollong (live demo):

  • Clicked 'Skip' instead of 'Next'
  • It's too hard to read the axis text
  • Blue color is hard to see

Main takeaway is that batters who have better batting averages are a whole lot better in hitting home runs

Version 4

From Udacity project reviewer:

  • The code isn't really well commented
  • Part of narrative is confusing
  • Choice of Jack Heidemann / Pete Rose confusing
  • Handedness / averages are unexplained
  • Delays seem like loading times
  • Design section doesn't explain handedness

Resources

http://www.baseball-reference.com/players/ http://dimplejs.org/ http://bootstraptour.com/api/ http://colorbrewer2.org/ http://jsfiddle.net/ch2187dd/7/ http://dimplejs.org/advanced_examples_viewer.html?id=advanced_interactive_legends http://stackoverflow.com/questions/20688253 http://daringfireball.net/projects/markdown/syntax#list

name handedness height weight avg HR
Tom Brown R 73 170 0.0 0
Denny Lemaster R 73 182 0.130 4
Joe Nolan L 71 175 0.263 27
Denny Doyle L 69 175 0.250 16
Jose Cardenal R 70 150 0.275 138
Mike Ryan R 74 205 0.193 28
Fritz Peterson B 72 185 0.159 2
Dick Bertell R 72 200 0.250 10
Rod Kanehl R 73 180 0.241 6
Ozzie Osborn R 74 195 0.0 0
John LaRose L 73 185 0.0 0
Jeff Byrd R 75 195 0.0 0
Juan Bonilla R 69 170 0.256 7
Frank Tepedino L 71 185 0.241 6
Jerry Kutzler L 73 175 0.0 0
Rick Wise R 73 180 0.195 15
Darrell Evans L 74 200 0.248 414
Buck Martinez R 70 190 0.225 58
John Wockenfuss R 72 190 0.262 86
Tommy McCraw L 72 183 0.246 75
Jeff Barkley B 75 185 0.0 0
Eric Wilkins R 73 190 0.0 0
Britt Burns L 77 215 0.0 0
Lee Lacy R 73 175 0.286 91
Pete Rose B 71 192 0.303 160
Danny Walton R 72 195 0.223 28
Bobby Cox R 71 180 0.225 9
Brad Wellman R 72 170 0.231 6
Jeff Newman R 74 215 0.224 63
Pedro Gonzalez R 72 176 0.244 8
Nardi Contreras B 74 193 0.0 0
Tommie Reynolds R 74 190 0.226 12
Gene Clines R 69 170 0.277 5
Jim Hickman R 75 192 0.252 159
Jack Billingham R 76 195 0.111 0
Jerry Buchek R 71 185 0.220 22
Ivan DeJesus R 71 175 0.254 21
Gary Nolan R 74 197 0.138 1
Gil Patterson R 73 185 0.0 0
Fred Whitfield L 73 190 0.253 108
Larry Dierker R 76 215 0.136 4
Dave Skaggs R 74 200 0.241 3
Dick Ruthven R 75 190 0.183 1
Jerry Garvin L 75 195 0.0 0
Steve Eddy R 74 185 0.0 0
Dave Kingman R 78 210 0.236 442
Eric Soderholm R 71 187 0.264 102
Kevin Mmahat L 77 220 0.0 0
Ed Brinkman R 72 170 0.224 60
Wayne Garrett L 71 175 0.239 61
Tony Muser L 74 180 0.259 7
Jim Siwy R 76 200 0.0 0
Bud Anderson R 75 210 0.0 0
Ted Ford R 70 180 0.219 17
Kevin Stanfield L 72 190 0.0 0
Jim Lyttle L 72 180 0.248 9
John Butcher R 76 185 0.0 0
Jerry Ujdur R 73 195 0.0 0
Scot Thompson L 75 195 0.262 5
Gene Locklear L 70 165 0.274 9
Bo Diaz R 71 185 0.255 87
Bump Wills B 69 172 0.266 36
Brian Denman R 76 205 0.0 0
Pat Putnam L 72 205 0.255 63
Kurt Bevacqua R 72 180 0.236 27
Bob Fallon L 75 200 0.0 0
Syd O'Brien R 73 185 0.230 24
Chris Chambliss L 73 195 0.279 185
Tom Satriano L 73 185 0.225 21
Jeffrey Leonard R 74 200 0.266 144
Dal Maxvill R 71 157 0.217 6
Steve Curry R 78 217 0.0 0
Cesar Tovar R 69 155 0.278 46
Mickey Lolich B 73 170 0.110 0
Ray Chadwick B 74 180 0.0 0
Jack Heidemann R 72 175 0.211 9
Rich Rollins R 70 185 0.269 77
Walt Bond L 79 228 0.256 41
Merv Rettenmund R 70 190 0.271 66
Bryan Clutterbuck R 76 223 0.0 0
Byron Browne R 74 190 0.236 30
Hector Torres R 72 175 0.216 18
Walt Williams R 66 165 0.270 33
Jerry Koosman R 74 205 0.119 2
Steve Lombardozzi R 72 175 0.233 20
Joe Azcue R 72 190 0.252 50
Elliott Maddox R 71 180 0.261 18
Omar Moreno L 74 180 0.252 37
Julian Javier R 73 175 0.257 78
Tony Ferreira L 73 160 0.0 0
Elio Chacon R 69 160 0.232 4
Rusty Torres B 70 175 0.212 35
John Stearns R 72 185 0.260 46
Larry Brown R 70 160 0.233 47
Tommy Dean R 72 165 0.180 4
Bryan Oelkers L 75 192 0.0 0
Kevin Bearse L 74 195 0.0 0
Marty Martinez B 72 170 0.243 0
Bruce Boisclair L 74 185 0.263 10
Ken Singleton B 76 210 0.282 246
Frank White R 71 165 0.255 160
Jim Fairey L 70 190 0.235 7
Jose Roman R 72 175 0.0 0
Tom Brookens R 70 165 0.246 71
Gary Thomasson L 73 180 0.249 61
Mike Trujillo R 73 180 0.0 0
Albert Williams R 76 190 0.0 0
Oswaldo Peraza R 76 172 0.0 0
Otto Velez R 72 170 0.251 78
Tony Scott B 72 164 0.249 17
Ray Oyler R 71 165 0.175 15
Barry Cort R 77 210 0.0 0
Floyd Robinson L 69 175 0.283 67
Steve Jeltz B 71 180 0.210 5
Lou Brock L 71 170 0.293 149
Bill Wilkinson R 70 160 0.0 0
Joe Lovitto B 72 185 0.216 4
Mike Loynd R 76 210 0.0 0
Wayne Comer R 70 175 0.229 16
Dave Collins B 71 175 0.272 32
Ed Spiezio R 71 180 0.238 39
Rico Petrocelli R 72 175 0.251 210
Johnny Lewis L 73 189 0.227 22
Dick Simpson R 76 176 0.207 15
Ken Boswell L 72 170 0.248 31
Ken McMullen R 75 190 0.248 156
Randy Scarbery B 73 185 0.0 0
Steve Swisher R 74 205 0.216 20
Ben Callahan R 79 230 0.0 0
Dick Howser R 68 155 0.248 16
Manny Castillo B 69 160 0.242 3
Mike Ramsey B 73 170 0.240 2
Willie Crawford L 73 197 0.268 86
Bobby Cuellar R 71 188 0.0 0
Willie Norwood R 72 185 0.242 18
Mike Jones L 78 215 0.0 0
Jeff Stone L 72 175 0.277 11
Ramon Manon R 72 150 0.0 0
Joe Lahoud L 73 198 0.223 65
Tim Flannery L 71 175 0.255 9
Dave McKay B 73 195 0.229 21
John Trautwein R 75 205 0.0 0
Andy Replogle R 77 205 0.0 0
Zach Crouch L 75 180 0.0 0
Benny Ayala R 73 185 0.251 38
Ron Romanick R 76 195 0.0 0
Greg Gross L 70 160 0.287 7
Bruce Tanner L 75 220 0.0 0
Sal Butera R 72 190 0.227 8
Jack Brohamer L 70 165 0.245 30
Von Joshua L 70 170 0.273 30
Eddie Milner L 71 173 0.253 42
Johnny Jeter R 73 180 0.244 18
Angel Salazar R 72 180 0.212 2
Tony Oliva L 73 175 0.304 220
Cito Gaston R 75 190 0.256 91
Cookie Rojas R 70 160 0.263 54
Rich Morales R 71 170 0.195 6
Dave Ford R 76 190 0.0 0
Dan Ford R 73 185 0.270 121
Barry Raziano B 70 175 0.0 0
Darryl Motley R 69 196 0.243 44
Ozzie Virgil R 73 180 0.243 98
Johnny Oates L 71 188 0.250 14
Pat Underwood L 72 175 0.0 0
Mike Phillips L 72 170 0.240 11
Ron Santo R 72 190 0.277 342
Jay Johnstone L 73 175 0.267 102
Jim Ray Hart R 71 185 0.278 170
Marc Hill R 75 205 0.223 34
Joel McKeon L 72 185 0.0 0
Danny Fife R 75 175 0.0 0
Chico Salmon R 70 160 0.249 31
Joe Niekro R 73 185 0.156 1
Andy Etchebarren R 73 190 0.235 49
Ken Berry R 72 175 0.255 58
Dave Concepcion R 74 155 0.267 101
Junior Moore R 71 185 0.264 7
Mike Richardt R 72 170 0.226 4
Chris Brown R 72 185 0.269 38
Al Bumbry L 68 170 0.281 54
Al Downing R 71 175 0.127 2
Bob Didier B 72 190 0.229 0
Jake Gibbs L 72 180 0.233 25
Garry Hancock L 72 175 0.247 12
Ed Kranepool L 75 205 0.261 118
Rick Rhoden R 75 195 0.238 9
Denny McLain R 73 185 0.133 1
Chuck Hiller L 71 170 0.243 20
Jorge Orta L 70 170 0.278 130
Dave Cash R 71 170 0.283 21
Bucky Dent R 69 170 0.247 40
Andy Beene R 75 205 0.0 0
Bruce Robbins L 73 190 0.0 0
Tony Gonzalez L 69 170 0.286 103
Leon Hooten R 71 180 0.0 0
Larry Haney R 74 195 0.215 12
Billy Conigliaro R 72 180 0.256 40
Gary Roenicke R 75 205 0.247 121
Don Lock R 74 195 0.238 122
Billy Cowan R 72 170 0.236 40
Billy Smith B 74 185 0.230 17
Allan Ramirez R 70 180 0.0 0
Tony Perez R 74 175 0.279 379
Chuck Schilling R 70 160 0.239 23
Hal McRae R 71 180 0.290 191
Dave Roberts R 75 215 0.239 49
Brian Allard R 73 175 0.0 0
Jim Lefebvre B 72 180 0.251 74
Fernando Arroyo R 74 180 0.0 0
Gary Beare R 76 205 0.0 0
Charlie Spikes R 75 215 0.246 65
Brian Dubois L 70 165 0.0 0
Steve Whitaker L 72 180 0.230 24
Manny Jimenez L 73 185 0.272 26
Chris Batton R 76 195 0.0 0
Duffy Dyer R 72 187 0.221 30
Ken Henderson B 74 180 0.257 122
Vance Lovelace L 77 205 0.0 0
Greg Thayer R 71 182 0.0 0
Vern Fuller R 73 170 0.232 14
Paul Hartzell R 77 200 0.0 0
Wayne Gross L 74 210 0.233 121
Mike Champion R 72 185 0.229 2
Ralph Botting L 72 195 0.0 0
Paul Casanova R 76 180 0.225 50
Steve Rogers R 74 175 0.138 0
Keith Creel R 74 180 0.0 0
Terry Crowley L 72 180 0.250 42
Horace Clarke B 69 170 0.256 27
Lou Clinton R 73 185 0.247 65
Larry Cox R 70 178 0.221 12
Nate Colbert R 74 190 0.243 173
Phil Roof R 74 190 0.215 43
Chuck Hinton R 73 180 0.264 113
Tim Cullen R 73 185 0.220 9
Tim Harkness L 74 182 0.235 14
Rick Bosetti R 71 185 0.250 17
Ron Pruitt R 72 185 0.269 12
George Foster R 73 180 0.274 348
Jerry White B 70 164 0.253 21
Angel Mangual R 70 178 0.245 22
Ken Gerhart R 72 190 0.221 24
Mike Hershberger R 70 175 0.252 26
Jim French L 68 180 0.196 5
Dave Roberts L 75 195 0.194 7
Jim Mason L 74 185 0.203 12
Mike Smith R 75 180 0.0 0
Willie Smith L 72 182 0.248 46
T.R. Bryden R 76 190 0.0 0
Jose Arcia R 75 170 0.215 1
Leon Durham L 73 185 0.277 147
Tom Makowski R 71 185 0.0 0
Paul Householder B 72 180 0.236 29
Aurelio Rodriguez R 70 180 0.237 124
Jimmy Stewart B 72 165 0.237 8
Dick Phillips L 72 180 0.229 12
Andres Thomas R 73 170 0.234 42
Ed Crosby L 74 175 0.220 0
Mike de la Hoz R 71 175 0.251 25
Frank Taveras R 72 155 0.255 2
Joe Nossek R 72 178 0.228 3
Larry Stahl L 72 175 0.232 36
Jose Cruz L 72 170 0.284 165
Don Mason L 71 160 0.205 3
Bill Robinson R 74 189 0.258 166
Jim Umbarger L 78 200 0.0 0
Sal Bando R 72 195 0.254 242
George Mitterwald R 74 195 0.236 76
Mike Darr R 76 190 0.0 0
Craig Robinson R 70 165 0.219 0
Bob Tillman R 76 205 0.232 79
Curt Wardle L 77 220 0.0 0
Pat Corrales R 72 180 0.216 4
Mike Tyson R 69 170 0.241 27
Rafael Landestoy B 70 165 0.237 4
Duane Josephson R 72 190 0.258 23
Duane Walker L 72 185 0.229 24
Glenn Hubbard R 69 150 0.244 70
Roger Freed R 72 190 0.245 22
George Hendrick R 75 195 0.278 267
Rod Carew L 72 170 0.328 92
Bob Davis R 72 180 0.197 6
Toby Harrah R 72 175 0.264 195
Rick Manning L 73 180 0.257 56
Israel Sanchez L 69 170 0.0 0
Steve Burke B 74 200 0.0 0
Gary Matthews R 74 185 0.281 234
Cesar Geronimo L 72 165 0.258 51
Billy Bryan L 76 200 0.216 41
Terry Taylor R 73 180 0.0 0
Terry Whitfield L 73 197 0.281 33
Mario Mendoza R 71 170 0.215 4
Fred Lynn L 73 185 0.283 306
Larry Hisle R 74 193 0.273 166
Graig Nettles L 72 180 0.248 390
Randy Nosek R 76 215 0.0 0
Dave Engle R 75 210 0.262 31
Narciso Elvira L 70 160 0.0 0
Mike Easler L 72 190 0.293 118
Mark Smith R 74 215 0.0 0
Paul Mitchell R 73 195 0.0 0
Rick Sweet B 73 200 0.234 6
Thurman Munson R 71 190 0.292 113
Rick Monday L 75 193 0.264 241
Mike Sadek R 69 165 0.226 5
Mark Belanger R 73 170 0.228 20
Ron Hunt R 72 186 0.273 39
Joe Keough L 72 185 0.246 9
Butch Edge R 75 203 0.0 0
Vic Correll R 70 185 0.229 29
Jackie Hernandez R 71 165 0.208 12
Tony Solaita L 72 210 0.255 50
U L Washington B 71 175 0.251 27
Gary Mielke R 75 185 0.0 0
Rick Henninger R 78 225 0.0 0
Joe Foy R 72 215 0.248 58
Ed Goodson L 75 180 0.260 30
Mark Brown B 74 190 0.0 0
Mickey Klutts R 71 170 0.241 14
Leroy Stanton R 73 195 0.244 77
Rafael Vasquez R 72 160 0.0 0
Len Whitehouse L 71 175 0.0 0
Danny Ainge R 76 175 0.220 2
Adolfo Phillips R 73 175 0.247 59
Marv Breeding R 72 175 0.250 7
Steve Adkins R 78 210 0.0 0
Dick McAuliffe L 71 176 0.247 197
Joe Horlen R 72 170 0.134 0
Glenn Burke R 72 195 0.237 2
Tony Mack R 70 177 0.0 0
Terry Humphrey R 75 185 0.211 6
Bill Moran R 76 210 0.0 0
Enzo Hernandez R 68 155 0.224 2
Cesar Gutierrez R 69 155 0.235 0
Coco Laboy R 70 165 0.233 28
Ted Kubiak B 72 175 0.231 13
Jim Morrison R 71 175 0.260 112
Tom Gilles R 73 185 0.0 0
Bobby Knoop R 73 170 0.236 56
Bobby Brown B 74 190 0.245 26
Tom Hutton L 71 180 0.248 22
Ron Hodges L 73 185 0.240 19
Rich Chiles L 71 170 0.254 6
Tom Paciorek R 76 215 0.282 86
Gary Woods R 74 185 0.243 13
Bob Montgomery R 73 195 0.258 23
Jeff Burroughs R 73 200 0.261 240
Rusty Staub L 74 190 0.279 292
Jim Norris L 70 175 0.264 7
Oscar Gamble L 71 160 0.265 200
Bob Kammeyer R 76 210 0.0 0
George Vukovich L 72 198 0.268 27
Joe Pactwa L 71 185 0.0 0
Craig Reynolds L 73 175 0.256 42
Paul Blair R 72 168 0.250 134
Al Cowens R 73 197 0.270 108
Al Oliver L 72 195 0.303 219
Dave Hilton R 71 191 0.213 6
Luis Alvarado R 69 162 0.214 5
Larry Parrish R 75 190 0.263 256
Woodie Fryman R 75 197 0.138 2
Bob Randall R 74 175 0.257 1
Jim Pankovits R 70 170 0.250 9
Sherman Corbett L 76 205 0.0 0
Carmen Fanzone R 72 200 0.224 20
Gary Allenson R 71 185 0.221 19
Milt May L 72 190 0.263 77
Mike Vail R 73 180 0.279 34
Nick Esasky R 75 200 0.250 122
Jim Nettles L 72 186 0.220 16
Lafayette Currence B 71 175 0.0 0
Chris Cannizzaro R 72 190 0.235 18
Larry Biittner L 74 205 0.273 29
John Pawlowski R 74 175 0.0 0
Mel Stottlemyre R 73 178 0.160 7
Jack Hardy R 74 175 0.0 0
Ron Musselman R 74 185 0.0 0
Roy Smalley B 73 185 0.257 163
Tony Chevez R 71 177 0.0 0
Andy Messersmith R 73 200 0.170 5
Richie Zisk R 73 200 0.287 207
Dave Chalk R 70 175 0.252 15
Don Baylor R 73 190 0.260 338
John Vukovich R 73 187 0.161 6
Danny Thompson R 72 183 0.248 15
Joe Simpson L 75 175 0.242 9
Bill Fahey L 72 200 0.241 7
Doug Camilli R 71 195 0.199 18
Bernie Allen L 72 175 0.239 73
Bruce Bochy R 75 205 0.239 26
Gary Ignasiak R 71 185 0.0 0
Claudell Washington L 72 190 0.278 164
John Donaldson L 71 160 0.238 4
Mike Smithson L 80 215 0.0 0
John Mayberry L 75 215 0.253 255
Ken Reitz R 72 180 0.260 68
Amos Otis R 71 165 0.277 193
Gene Alley R 70 160 0.254 55
Ted Sizemore R 70 165 0.262 23
Dan Briggs L 72 180 0.195 12
Joe Skalski R 75 190 0.0 0
Doug Flynn R 71 165 0.238 7
Bert Bradley B 73 190 0.0 0
Ken Holtzman R 74 175 0.163 2
Pete Ward L 73 185 0.254 98
Kevin Bell R 72 195 0.222 13
Tom Nieto R 73 193 0.205 5
Duke Sims L 74 197 0.239 100
Larvell Blanks R 68 167 0.253 20
Francisco Barrios R 71 155 0.0 0
Mike Davis L 74 175 0.259 91
Jerry Reuss L 77 200 0.167 1
Steve Yeager R 72 190 0.228 102
Danny Goodwin L 73 195 0.236 13
Bud Harrelson B 71 160 0.236 7
Bob Knepper L 75 195 0.137 6
Mickey Rivers L 70 165 0.295 61
Jim Northrup L 75 190 0.267 153
John Hale L 74 195 0.201 14
Reggie Ritter L 74 195 0.0 0
Pedro Garcia R 70 175 0.220 37
Carl Yastrzemski L 71 175 0.285 452
Bob Babcock R 77 210 0.0 0
Craig Eaton R 71 175 0.0 0
Derrel Thomas B 72 160 0.249 43
Art Howe R 74 190 0.260 43
Ike Brown R 72 190 0.256 20
Howie Goss R 76 204 0.216 11
Glenn Borgmann R 76 210 0.229 16
Lamar Johnson R 74 215 0.287 64
Julio Gonzalez R 71 162 0.235 4
Bobby Klaus R 70 170 0.208 6
Manny Sanguillen R 72 193 0.296 65
Gates Brown L 71 220 0.257 84
Johnny Ray B 71 170 0.290 53
Jesus Alou R 74 190 0.280 32
Ken Landreaux L 70 165 0.268 91
Enos Cabell R 76 170 0.277 60
Roy Branch R 72 175 0.0 0
Billy North B 71 185 0.261 20
Juan Beniquez R 71 150 0.274 79
Frank Fernandez R 72 185 0.199 39
Bombo Rivera R 70 187 0.265 10
Steve Brye R 72 190 0.258 30
Ron Jackson R 72 200 0.259 56
Roger Metzger B 72 165 0.231 5
Rufino Linares R 72 170 0.270 11
Ray Webster L 72 185 0.244 17
Bob Kearney R 72 190 0.233 27
Fergie Jenkins R 77 205 0.165 13
Dick Dietz R 73 195 0.261 66
Ted Cox R 75 195 0.245 10
Bobby Mitchell L 70 170 0.243 3
Bobby Mitchell R 75 185 0.235 21
Barry Evans R 73 180 0.251 2
Mickey Brantley R 70 180 0.259 32
Al Gallagher R 72 180 0.263 11
Rob Woodward R 75 185 0.0 0
Hector Cruz R 71 170 0.225 39
Fred Norman B 68 155 0.125 0
Woody Woodward R 74 180 0.236 1
Ted Martinez R 72 165 0.240 7
Jim Anderson R 72 170 0.218 13
Lenn Sakata R 69 160 0.230 25
Dave Duncan R 74 190 0.214 109
Randy Jones R 72 178 0.132 0
Dick Billings R 73 195 0.227 16
Bob Veselic R 72 175 0.0 0
Bruce Bochte L 75 195 0.282 100
Bernie Carbo L 71 173 0.264 96
Vic Davalillo L 67 150 0.279 36
Burt Hooton R 73 210 0.123 4
Chuck Hockenbery B 73 195 0.0 0
Bob Ferris R 78 225 0.0 0
Fernando Gonzalez R 70 165 0.235 17
Jim Sundberg R 72 190 0.248 95
Andy Kosco R 75 205 0.236 73
Steve Huntz B 73 204 0.206 16
Gary Wheelock R 75 205 0.0 0
Lenny Faedo R 72 170 0.251 5
John Lowenstein L 72 175 0.253 116
Don Kessinger B 73 170 0.252 14
Joe Hague L 72 195 0.239 40
Bake McBride L 74 190 0.299 63
Dick Davis R 75 190 0.265 27
Richie Scheinblum B 73 180 0.263 13
Ed Herrmann L 73 195 0.240 80
Mike Rochford L 76 205 0.0 0
Jeff Schneider B 75 195 0.0 0
Bob Molinaro L 72 190 0.264 14
Mike Hegan L 73 188 0.242 53
Mike Diaz R 74 195 0.247 31
Tim Foli R 72 179 0.251 25
Alan Knicely R 72 190 0.213 12
Tim Laudner R 75 212 0.225 77
Jose Morales R 71 187 0.287 26
Luis Encarnacion R 70 178 0.0 0
Rick Kreuger R 74 185 0.0 0
Juan Marichal R 72 185 0.165 4
Vida Blue B 72 189 0.104 4
Angel Moreno L 69 165 0.0 0
Roger Weaver R 75 190 0.0 0
Stan Papi R 72 170 0.218 7
Rob Wilfong L 73 180 0.248 39
Chris Knapp R 77 195 0.0 0
Steve Henderson R 74 190 0.280 68
Rob Picciolo R 74 185 0.234 17
Don Welchel R 76 205 0.0 0
Randy Wiles L 73 185 0.0 0
Roberto Pena R 68 170 0.245 13
Bob Dernier R 72 160 0.255 23
Bill Melton R 74 200 0.253 160
Albert Hall B 71 155 0.251 5
Barbaro Garbey R 70 170 0.267 11
John Milner L 72 185 0.249 131
Rich Reese L 75 185 0.253 52
Chris Bando B 72 195 0.227 27
Bill Buckner L 72 185 0.289 174
Jack Hiatt R 74 190 0.251 22
Nelson Mathews R 76 195 0.223 22
Larry Lintz B 69 150 0.227 0
Ron Theobald R 68 165 0.248 2
Dewey Robinson R 72 180 0.0 0
Rafael Santana R 73 165 0.246 13
Jerry Hairston B 70 170 0.258 30
Tony Arnold R 71 170 0.0 0
Jeff Schattinger L 77 200 0.0 0
Ike Brookens R 77 170 0.0 0
Tommie Aaron R 75 190 0.229 13
Steve Dillard R 73 180 0.243 13
Win Remmerswaal R 74 160 0.0 0
Jeff Peterek R 74 195 0.0 0
George Scott R 74 200 0.268 271
Jeff Shaver R 75 195 0.0 0
Ken Walters R 73 180 0.231 11
Gorman Thomas R 74 210 0.225 268
Paul Dade R 73 185 0.270 10
Darrell Porter L 72 193 0.247 188
Tim Johnson L 73 170 0.223 0
Fred Stanley R 70 165 0.216 10
Larry Bowa B 70 155 0.260 15
Tim Corcoran L 71 175 0.270 12
Jim Spencer L 74 195 0.250 146
Pete LaCock L 74 200 0.257 27
Carl Morton R 72 200 0.156 7
Gary Gray R 72 187 0.240 24
Matty Alou L 69 160 0.307 31
Pete Filson B 74 195 0.0 0
Jim Dwyer L 70 165 0.260 77
Dalton Jones L 73 180 0.235 41
Rennie Stennett R 71 160 0.274 41
Jim Gideon R 75 190 0.0 0
Jerry May R 74 190 0.234 15
Rich McKinney R 71 185 0.225 20
Clint Hurdle L 75 195 0.259 32
Mike Andrews R 75 195 0.258 66
Bobby Clark R 72 190 0.239 19
Jeff Twitty L 74 185 0.0 0
Cliff Johnson R 76 215 0.258 196
Steve Cummings B 74 200 0.0 0
Donn Clendenon R 76 209 0.274 159
Charlie James R 73 195 0.255 29
Bob Horner R 73 195 0.277 218
Tom Veryzer R 73 175 0.241 14
Jose Cecena R 71 180 0.0 0
George Smith R 70 170 0.205 9
Jim Essian R 74 195 0.244 33
Onix Concepcion R 66 160 0.239 3
Boots Day L 69 160 0.256 8
Brian Giles R 73 165 0.228 10
Garry Maddox R 75 175 0.285 117
Alex Trevino R 70 165 0.249 23
Jim Price R 72 192 0.214 18
Felix Millan R 71 172 0.279 22
Steve Garvey R 70 192 0.294 272
Don Mincher L 75 205 0.249 200
Greg Erardi R 73 190 0.0 0
Jim Farr R 73 195 0.0 0
Tony Cloninger R 72 210 0.192 11
Jim Gosger L 71 185 0.226 30
Chuck Harrison R 70 185 0.238 17
Mike Ivie R 75 205 0.269 81
Frank Dimichele R 75 205 0.0 0
Bob Veale B 78 212 0.114 0
Marvell Wynne L 71 175 0.247 40
Dusty Baker R 74 183 0.278 242
Tucker Ashford R 73 195 0.218 6
Ned Yost R 73 190 0.212 16
Bob Stinson B 71 180 0.250 33
Mike Warren R 73 175 0.0 0
Gaylord Perry R 76 205 0.131 6
Dave Marshall L 73 182 0.246 16
Mickey Hatcher R 74 200 0.280 38
Roger Repoz L 75 190 0.224 82
Bill Fulton R 75 195 0.0 0
John Orsino R 75 215 0.249 40
Larry Anderson R 75 190 0.0 0
Johnny Briggs L 73 190 0.253 139
Craig Mitchell R 75 180 0.0 0
Dave Hostetler R 76 215 0.229 37
Bob Jones L 74 195 0.221 20
Keith Hernandez L 72 180 0.296 162
Alfredo Martinez R 75 185 0.0 0
Dean Chance R 75 200 0.066 0
Willie Upshaw L 72 185 0.262 123
Dick Green R 70 180 0.240 80
Dane Iorg L 72 180 0.276 14
Richie Hebner L 73 195 0.276 203
Fran Healy R 77 220 0.250 20
Doc Edwards R 74 215 0.238 15
Sandy Alomar B 69 140 0.245 13
Joe Strain R 70 169 0.250 1
Gene Richards L 72 175 0.290 26
Buddy Bell R 73 180 0.279 201
Al Woods L 75 190 0.271 35
Rudy Law L 73 165 0.271 18
Joel Davis L 77 205 0.0 0
Jody Davis R 76 192 0.245 127
Mike Edwards R 70 154 0.250 2
Bill Mooneyham R 72 175 0.0 0
John Hobbs R 75 190 0.0 0
Deron Johnson R 74 200 0.244 245
John Denny R 75 185 0.170 0
Don Wert R 70 162 0.242 77
Mike Fiore L 72 175 0.227 13
Miguel Dilone B 72 160 0.265 6
Greg Luzinski R 73 220 0.276 307
Bobby Tolan L 71 170 0.265 86
Karl Best R 76 190 0.0 0
Steve Barr L 76 200 0.0 0
Ron Woods R 70 168 0.233 26
Tony Horton R 75 210 0.268 76
Randy Hundley R 71 170 0.236 82
Jose Tartabull L 71 165 0.261 2
Ben Oglivie L 74 160 0.273 235
Luis Sanchez R 74 170 0.0 0
Bob Johnson R 70 175 0.272 44
Don Buford B 67 160 0.264 93
Duane Kuiper L 72 175 0.271 1
Brant Alyea R 75 215 0.247 38
Jerry Narron L 75 205 0.211 21
Lou Johnson R 71 170 0.258 48
Ken Retzer L 72 185 0.264 14
Mike Brown R 74 195 0.265 23
Mike Brown R 74 195 0.0 0
Greg Walker L 75 205 0.260 113
Terry Harper R 76 195 0.253 36
Jerry Royster R 72 165 0.249 40
Steve Davis L 73 195 0.0 0
Jeff Rineer L 76 205 0.0 0
Barry Bonnell R 75 190 0.272 56
Tom Seaver R 73 195 0.154 12
Jerry Martin R 73 195 0.251 85
Bill Stein R 70 170 0.267 44
Joel Youngblood R 72 180 0.265 80
Reggie Jackson L 72 195 0.262 563
Sonny Jackson L 69 150 0.251 7
Mark Mercer L 77 220 0.0 0
Rodney Scott B 72 160 0.236 3
Rich Coggins L 68 170 0.265 12
Phil Gagliano R 73 180 0.238 14
Jerry McNertney R 72 180 0.237 27
Mitchell Page L 74 205 0.266 72
Kiko Garcia R 71 180 0.239 12
Larry Milbourne B 72 161 0.254 11
Bill Sudakis B 73 190 0.234 59
John Caneira R 75 180 0.0 0
Domingo Ramos R 70 154 0.240 8
Ron Oester B 74 185 0.265 42
Glenn Adams L 73 180 0.280 34
Clint Zavaras R 73 175 0.0 0
Joe Morgan L 67 160 0.271 268
R.J. Reynolds B 72 190 0.267 35
Mike Parrott R 76 210 0.0 0
Lee Thomas L 74 195 0.255 106
Ray Fosse R 74 215 0.256 61
Paul Popovich B 72 175 0.233 14
John Stephenson L 71 180 0.216 12
Doug Clemens L 72 180 0.229 12
Luis Aponte R 72 185 0.0 0
Orlando Mercado R 72 180 0.199 7
Charley Smith R 73 170 0.239 69
Paul Boris R 74 200 0.0 0
Buddy Biancalana B 71 160 0.205 6
De Wayne Buice R 72 170 0.0 0
Bob Uecker R 73 190 0.200 14
Felix Torres R 71 165 0.254 27
Steve Braun L 70 180 0.271 52
Ray Knight R 73 185 0.271 84
Ty Cline L 72 170 0.238 6
Thad Bosley L 75 175 0.272 20
Bobby Grich R 74 180 0.266 224
Jimmie Hall L 72 175 0.254 121
John Boccabella R 73 195 0.219 26
Brock Davis L 70 160 0.260 1
Mark Esser R 73 190 0.0 0
Curt Blefary L 74 195 0.237 112
Daryl Smith R 76 185 0.0 0
Dave Smith R 73 190 0.0 0
Mack Jones L 73 180 0.252 133
Buddy Bradford R 71 170 0.226 52
Hosken Powell L 73 175 0.259 17
Dave Stapleton L 73 185 0.0 0
Dave Stapleton R 73 178 0.271 41
Gary Ward R 74 195 0.276 130
Jim Lonborg R 77 200 0.136 3
Joe Lis R 72 175 0.233 32
Dan Meyer L 71 180 0.253 86
Jim Holt L 72 180 0.265 19
Tom Klawitter R 74 190 0.0 0
Larry Herndon R 75 190 0.274 107
Gary Christenson L 77 200 0.0 0
Jim Wright R 77 205 0.0 0
Jim Wright R 73 165 0.0 0
Wallace Johnson B 72 173 0.255 5
Mike Kinnunen L 73 185 0.0 0
Eddie Leon R 72 170 0.236 24
Dave Rajsich L 77 175 0.0 0
Jim Wohlford R 71 175 0.260 21
J.R. Richard R 80 222 0.168 10
Bill Voss L 74 160 0.227 19
Keith Moreland R 72 190 0.279 121
Ramon Pena R 70 155 0.0 0
Alex Johnson R 72 205 0.288 78
Wayne Krenchicki L 73 180 0.266 15
Chico Escarrega R 71 185 0.0 0
Dave Rosello R 71 160 0.236 10
Cardell Camper R 75 208 0.0 0
Paul Schaal R 71 165 0.244 57
Tito Landrum R 71 175 0.249 13
Dave Edwards R 72 170 0.237 14
Mario Guerrero R 70 155 0.257 7
Tom Tresh B 73 180 0.245 153
Mike Overy R 74 190 0.0 0
Ron Roenicke B 72 180 0.238 17
Doug Griffin R 72 160 0.245 7
Steve Blass R 72 165 0.172 1
Johnnie LeMaster R 74 165 0.222 22
Craig Chamberlain R 73 190 0.0 0
Nate Oliver R 70 160 0.226 2
Ray Sadecki L 71 180 0.191 5
Ken Rudolph R 73 180 0.213 6
Wayne Nordhagen R 74 205 0.282 39
Biff Pocoroba B 70 175 0.257 21
Len Matuszek L 74 190 0.234 30
Frank Eufemia R 71 185 0.0 0
Joe Lefebvre L 70 170 0.258 31
Jim Maloney L 74 190 0.201 7
Andre Robertson R 70 155 0.251 5
Jerry Zimmerman R 74 185 0.204 3
Jack Lazorko R 71 200 0.0 0
Mike Paxton R 71 190 0.0 0
Chet Lemon R 72 190 0.273 215
Rickey Keeton R 74 190 0.0 0
Phil Mankowski L 72 180 0.264 8
Cleon Jones R 72 185 0.281 93
Joaquin Andujar B 72 170 0.127 5
Mike Lum L 72 180 0.247 90
Johnny Grubb L 75 175 0.278 99
Curt Motton R 68 164 0.213 25
Johnny Bench R 73 197 0.267 389
Dale Berra R 72 180 0.236 49
Terry Felton R 73 180 0.0 0
Bob Meacham B 73 175 0.236 8
Mark Clear R 76 200 0.0 0
Carl Warwick R 70 170 0.248 31
Sam Bowens R 73 188 0.223 45
George Wright B 71 180 0.245 42
Luis Aguayo R 69 173 0.236 37
Hal Lanier R 74 180 0.228 8
Mike Pazik L 74 195 0.0 0
Len Randle B 70 169 0.257 27
Greg Pryor R 72 180 0.250 14
Jim Traber L 72 194 0.227 27
Dave Nelson R 70 160 0.244 20
Lynn Jones R 69 175 0.252 7
Bryan Little B 70 160 0.245 3
Ken Suarez R 69 175 0.227 5
Rick Peters B 69 170 0.277 2
Ron Stone L 74 185 0.241 6
Rich Barnes R 76 186 0.0 0
Tommie Agee R 71 195 0.255 130
Bob Bailey R 73 180 0.257 189
Cap Peterson R 74 195 0.230 19
Ted Uhlaender L 74 190 0.263 36
Ted Simmons B 71 193 0.285 248
Bobby Murcer L 71 160 0.277 252
Dick Tracewski R 71 160 0.213 8
Dave Frost R 78 235 0.0 0
Mark Souza L 72 180 0.0 0
Bill Nahorodny R 74 200 0.241 25
Bill Madlock R 71 180 0.305 163
Bob Boone R 74 195 0.254 105
Rick Jones L 77 190 0.0 0
Steve Kemp L 72 195 0.278 130
Rick Burleson R 70 165 0.273 50
Jim Dorsey R 79 190 0.0 0
Mark Ciardi R 72 180 0.0 0
Dennis Burtt R 72 180 0.0 0
Carl Taylor R 74 200 0.266 10
Terry Harmon R 74 180 0.233 4
Mike Hargrove L 72 195 0.290 80
Rich Yett R 74 187 0.0 0
Steve Hovley L 70 188 0.258 8
Don Leppert R 74 220 0.229 15
Matt Williams R 73 200 0.0 0
Jim Burton R 75 195 0.0 0
Rick Anderson R 74 210 0.0 0
Charlie Mitchell R 75 170 0.0 0
Bill Paschall R 72 175 0.0 0
John Bohnet B 72 175 0.0 0
Byron McLaughlin R 73 175 0.0 0
Lee May R 75 195 0.267 354
Luis Quintana L 74 175 0.0 0
Sam McDowell L 77 190 0.154 2
Rick Renick R 72 188 0.221 20
Jeff Torborg R 72 195 0.214 8
Dave Campbell R 73 180 0.213 20
Pat Kelly L 73 185 0.264 76
Al Weis B 72 160 0.219 7
Jerry Turner L 69 180 0.257 45
Rick Auerbach R 72 165 0.220 9
Keith Macwhorter R 76 190 0.0 0
Don Wilson R 74 195 0.146 1
Jaime Cocanower R 76 200 0.0 0
Jeff Sellers R 73 175 0.0 0
Sandy Valdespino L 68 170 0.230 7
Steve Senteney R 74 205 0.0 0
Howard Bailey R 72 195 0.0 0
Jeff Bettendorf R 75 180 0.0 0
Ken Phelps L 73 209 0.239 123
Cesar Cedeno R 74 175 0.285 199
Bob Davidson R 72 185 0.0 0
Phil Linz R 73 180 0.235 11
Manny Mota R 70 160 0.304 31
Brian Snyder L 75 185 0.0 0
Steve Renko R 77 230 0.215 6
Rick Sofield L 73 195 0.243 9
Carlos Velazquez R 71 180 0.0 0
Roger Miller R 75 200 0.0 0
Doug DeCinces R 74 190 0.259 237
John Castino R 71 175 0.278 41
Dave May L 70 186 0.251 96
Ron Washington R 71 155 0.261 20
Billy Grabarkewitz R 70 165 0.236 28
Willie Aikens L 75 220 0.271 110
Earl Williams R 75 215 0.247 138
Willie Mueller R 76 220 0.0 0
John Flinn R 72 175 0.0 0
Don Hahn R 73 180 0.236 7
Todd Cruz R 72 175 0.220 34
Tom Egan R 76 218 0.200 22
Bob Heise R 72 175 0.247 1
Tommy Harper R 69 165 0.257 146
Joe Wallis B 71 180 0.244 16
Max Alvis R 71 185 0.247 111
Rico Carty R 75 200 0.299 204
Mike Cubbage L 72 180 0.258 34
Les Straker R 73 193 0.0 0
Merritt Ranew L 71 170 0.247 8
Lyman Bostock L 73 180 0.311 23
Damaso Garcia R 73 165 0.283 36
Don Kainer R 75 205 0.0 0
Don Gordon R 73 175 0.0 0
Roy Howell L 73 190 0.261 80
Boog Powell L 76 230 0.266 339
Sandy Wihtol R 73 195 0.0 0
Sonny Siebert R 75 190 0.173 12
Jeff Richardson R 75 185 0.0 0
Bobby Darwin R 74 190 0.251 83
Dennis DeBarr L 74 190 0.0 0
Dan Driessen L 71 187 0.267 153
Bruce Miller R 73 185 0.246 1
Bob Bailor R 71 170 0.264 9
Tommy Helms R 70 165 0.269 34
Tony Armas R 71 182 0.252 251
Willie Horton R 71 209 0.273 325
Lou Piniella R 72 182 0.291 102
Butch Hobson R 73 193 0.248 98
John Wathan R 74 205 0.262 21
Hal King L 73 200 0.214 24
Mike Krukow R 77 205 0.193 5
Andres Mora R 72 180 0.223 27
Barry Foote R 75 205 0.230 57
Ed Ott L 70 190 0.259 33
Alan Wiggins B 74 160 0.259 5
Ron Clark R 70 175 0.189 5
Jay Pettibone R 76 182 0.0 0
Glen Cook R 71 180 0.0 0
Julio Gotay R 72 180 0.260 6
Gary Alexander R 74 195 0.230 55
Andre Thornton R 75 200 0.254 253
Bob Oliver R 75 205 0.256 94
Bill Castro R 71 170 0.0 0
Ed Hodge L 74 192 0.0 0
Tom Buskey R 75 200 0.0 0
Bruce Taylor R 72 178 0.0 0
Stan Thomas R 74 185 0.0 0
Bob Robertson R 73 195 0.242 115
Larry Monroe R 76 200 0.0 0
Roger Slagle R 75 190 0.0 0
Ollie Brown R 74 178 0.265 102
Jim Campbell L 71 175 0.0 0
Frank Quilici R 73 170 0.214 5
Curt Kaufman R 74 175 0.0 0
Joe Pepitone L 74 185 0.258 219
Steve Barber L 72 195 0.115 5
De Wayne Vaughn R 71 180 0.0 0
Norm Miller L 70 185 0.238 24
Bob Galasso L 73 205 0.0 0
Rich Wortham R 72 185 0.0 0
Bob Chance L 74 196 0.261 24
Julio Cruz B 69 165 0.237 23
Bill Sample R 69 175 0.272 46
Juan Nieves L 75 175 0.0 0
Mike Bacsik R 74 180 0.0 0
Craig Kusick R 75 210 0.235 46
Rudy Meoli L 69 165 0.212 2
Ruppert Jones L 70 170 0.250 147
Glenn Hoffman R 73 175 0.242 23
Russ Gibson R 73 195 0.228 8
Phil Huffman R 74 180 0.0 0
Terry Francona L 73 190 0.274 16
John Bateman R 75 210 0.230 81
Luis Pujols R 74 175 0.193 6
Joe Gaines R 73 190 0.241 21
Doug Rader R 74 208 0.251 155
Mickey Stanley R 73 185 0.248 117
Steve Brown R 77 200 0.0 0
Rick Lysander R 74 190 0.0 0
Phil Bradley R 72 185 0.286 78
Winston Llenas R 70 165 0.230 3
Charlie Moore R 71 180 0.261 36
Ralph Garr L 71 185 0.306 75
Tommy John R 75 180 0.157 5
Bruce Benedict R 73 175 0.242 18
John Ellis R 74 225 0.262 69
Wes Parker B 73 180 0.267 64
Mel Stottlemyre R 72 190 0.0 0
David Green R 75 170 0.268 31
Reid Nichols R 71 165 0.266 22
Rick Reichardt R 75 210 0.261 116
Luis Tiant R 72 180 0.164 5
Alex Sanchez R 74 185 0.0 0
Broderick Perkins L 70 180 0.271 8
Leon Roberts R 75 200 0.267 78
Ray Burris R 77 200 0.151 1
Len Gabrielson L 76 210 0.253 37
Johnny Edwards L 76 220 0.242 81
Paul Wilmet R 71 170 0.0 0
Tom Grieve R 74 190 0.249 65
Bruce Ellingsen L 72 180 0.0 0
Bob Forsch R 76 200 0.213 12
Gorman Heimueller L 76 195 0.0 0
Danny Cater R 72 170 0.276 66
Bill Schroeder R 74 200 0.240 61
Clay Dalrymple L 72 190 0.233 55
Carlos May L 71 200 0.274 90
Reggie Smith B 72 180 0.287 314
Ron Reed R 78 215 0.158 0
Fred Howard R 75 190 0.0 0
Davey Johnson R 73 170 0.261 136
Ellis Valentine R 76 205 0.278 123
Roy White B 70 160 0.271 160
Mike Brumley L 70 195 0.229 5
Al Luplow L 70 175 0.235 33
John Hoover R 74 190 0.0 0
Dick Allen R 71 187 0.292 351
Doug Ault R 75 200 0.236 17
Mark Wagner R 72 165 0.243 3
Mike Walters R 77 203 0.0 0
Willie Stargell L 74 188 0.282 475
Steve Carlton L 76 210 0.201 13
Jake Wood R 73 163 0.250 35
Del Unser L 73 180 0.258 87
Bob Brower R 71 185 0.242 17
Ray Culp R 72 200 0.123 1
Ivan Murrell R 74 195 0.236 33
Lee Mazzilli B 73 180 0.259 93
Garth Iorg R 71 170 0.258 20
Alan Ashby B 74 185 0.245 90
Bob Brenly R 74 210 0.247 91
Ron Blomberg L 73 195 0.293 52
Jim Rooker R 72 195 0.201 7
Tim Blackwell B 71 170 0.228 6
Colby Ward R 74 185 0.0 0
Jerry Morales R 70 155 0.259 95
Davey Lopes R 69 170 0.263 155
Catfish Hunter R 72 190 0.226 6
Mario Soto R 72 174 0.132 1
Jimmy Wynn R 70 160 0.250 291
Hank Allen R 72 190 0.241 6
Jim Fregosi R 73 190 0.265 151
Pepe Frias R 70 159 0.240 1
Mike Schmidt R 74 195 0.267 548
Willie Montanez L 72 170 0.275 139
Rey Quinones R 71 160 0.243 29
Mike Squires L 71 185 0.260 6
Champ Summers L 74 205 0.255 54
Chuck Porter R 75 187 0.0 0
Bert Campaneris R 70 160 0.259 79
Bobby Valentine R 70 189 0.260 12
Rob Andrews R 72 185 0.251 3
Tom Haller L 76 195 0.257 134
Tom Dozier R 74 190 0.0 0
Ed Stroud L 71 180 0.237 14
Ron Swoboda R 74 195 0.242 73
Harry Spilman L 73 180 0.237 18
Bob Barton R 72 175 0.226 9
Daryl Sconiers L 74 185 0.265 15
Joe Torre R 74 212 0.297 252
Al Ferrara R 73 200 0.259 51
Rick Steirer R 76 200 0.0 0
Sixto Lezcano R 70 165 0.271 148
Al Lachowicz R 75 198 0.0 0
Dave Nicholson R 74 215 0.212 61
Freddie Patek R 65 148 0.242 41
Ken Hubbs R 74 175 0.247 14
Pepe Mangual R 70 157 0.242 16
Leron Lee L 72 196 0.250 31
Tom McCarthy R 72 180 0.0 0
Steve Ontiveros B 72 185 0.274 24
Willie Davis L 74 180 0.279 182
Tom Lawless R 71 170 0.207 2
Jerry Moses R 75 210 0.251 25
Bobby Bonds R 73 190 0.268 332
Dave McNally R 71 185 0.133 9
Darrell Brown B 72 184 0.274 1
Roy Foster R 72 185 0.253 45
Denis Menke R 72 185 0.250 101
Hal Breeden R 74 200 0.243 21
Manny Trillo R 73 150 0.263 61
Jackie Gutierrez R 71 175 0.237 4
Jerry Kenney L 73 170 0.237 7
Fred Kendall R 73 185 0.234 31
Mike Anderson R 74 200 0.246 28
Jim Lewis R 75 190 0.0 0
Joe Charboneau R 74 205 0.266 29
Jimmie Schaffer R 69 170 0.223 11
Junior Kennedy R 71 175 0.248 4
Wilbur Howard B 74 170 0.250 6
Rod Gilbreath R 74 180 0.248 14
Mark Brouhard R 73 210 0.259 25
Dan Morogiello L 73 200 0.0 0
Mike Young B 74 195 0.247 72
Chris Speier R 73 175 0.246 112
Gene Michael B 74 183 0.229 15
Vic Harris B 71 165 0.217 13
Mike Fischlin R 73 165 0.220 3
Don Money R 73 170 0.261 176
Joe Rudi R 74 200 0.264 179
Jim Rice R 74 200 0.298 382
Shawn Holman R 74 185 0.0 0
Alan Wirth R 76 190 0.0 0
Gil Garrido R 69 150 0.237 1
Marty Perez R 71 160 0.246 22
Tom Matchick L 73 173 0.215 4
Jack Perconte L 70 160 0.270 2
Ed Kirkpatrick L 71 195 0.238 85
Jerry Grote R 70 185 0.252 39
Ellie Hendricks L 73 175 0.220 62
Jim Beauchamp R 74 190 0.231 14
Terry Wilshusen R 74 210 0.0 0
Tito Fuentes B 71 175 0.268 45
Ron Brand R 67 167 0.239 3
Leo Cardenas R 71 150 0.257 118
Art Shamsky L 73 168 0.253 68
Steve Ellsworth R 80 220 0.0 0
Ron Cey R 70 185 0.261 316
Skip Jutze R 71 190 0.215 3
Butch Wynegar B 73 190 0.255 65
Ron LeFlore R 72 200 0.288 59
Bill Russell R 72 175 0.263 46
Gene Tenace R 72 190 0.241 201
Bubba Morton R 70 175 0.267 14
Ellie Rodriguez R 71 185 0.245 16
Darrel Chaney B 74 188 0.217 14
Dick Nen L 74 200 0.224 21
Bryan Kelly R 74 195 0.0 0
Bill Freehan R 75 203 0.262 200
Steve Nicosia R 70 185 0.248 11
Ted Savage R 73 185 0.233 34
Pete Mackanin R 74 190 0.226 30
Rich Dauer R 72 180 0.257 43
Mick Kelleher R 69 176 0.213 0
Rowland Office L 72 170 0.259 32
Rick Leach L 73 180 0.268 18
Dwayne Murphy L 73 185 0.246 166
Larry Harlow L 74 185 0.248 12
Mike Epstein L 75 230 0.244 130
Jerry Mumphrey B 74 185 0.289 70
Don Sutton R 73 185 0.144 0
Glenn Beckert R 73 190 0.283 22
Ron Davis R 72 175 0.233 10
Mike Shannon R 75 195 0.255 68
Jason Thompson L 76 200 0.261 208
Wayne Tolleson B 69 160 0.241 9
John Leister R 74 200 0.0 0
Don Cooper R 73 185 0.0 0
Mike Jorgensen L 72 195 0.243 95
Ed Romero R 71 160 0.247 8
Rick Joseph R 73 192 0.243 13
Cecil Cooper L 74 165 0.298 241
Bill Almon R 75 180 0.254 36
Joe Ferguson R 74 200 0.240 122
Jeff Jones R 75 210 0.0 0
Jerry Terrell R 71 165 0.253 4
John Poloni L 77 210 0.0 0
Dave Revering L 76 210 0.265 62
Curt Ford L 70 150 0.245 7
Jerry Dybzinski R 74 180 0.234 3
Mike Willis L 74 205 0.0 0
Bob Burda L 71 174 0.224 13
Jesse Gonder L 70 180 0.251 26
Gary Sutherland R 72 185 0.243 24
Bob Coluccio R 71 183 0.220 26
Dave Rader L 71 165 0.257 30
Ron Gardenhire R 72 175 0.232 4
Bill Sharp L 70 178 0.255 9
Alan Bannister R 71 170 0.270 19
Bob Watson R 72 201 0.295 184
Ken Harrelson R 74 190 0.239 131
Bobby Wine R 73 187 0.215 30
Stefan Wever R 80 245 0.0 0
John Kennedy R 72 185 0.225 32
Chico Ruiz B 72 169 0.240 2
Dave Johnson R 73 183 0.0 0
Gail Hopkins L 70 198 0.266 25
Doug Frobel L 76 196 0.201 20
Luis Melendez R 72 165 0.248 9
Jerry Augustine L 72 183 0.0 0
Bill Plummer R 73 190 0.188 14
Buck Rodgers B 74 190 0.232 31
Phil Niekro R 73 180 0.169 7
Jeff Holly L 77 210 0.0 0
Tom Poquette L 70 175 0.268 10
Eric Hetzel R 75 175 0.0 0
Brian Asselstine L 73 175 0.254 12
Rick Miller L 72 175 0.269 28
Ed Charles R 70 170 0.263 86
Luis Gomez R 69 150 0.210 0
Dave Lemanczyk R 76 235 0.0 0
Al Jones R 76 210 0.0 0
Floyd Rayford R 70 190 0.244 38
Sam Hinds R 78 215 0.0 0
Tony Conigliaro R 75 185 0.264 166
Clay Christiansen R 77 205 0.0 0
Jim Barr R 75 205 0.162 1
Jerry Remy L 69 165 0.275 7
Larry Rothschild L 74 180 0.0 0
Frank Duffy R 73 180 0.232 26
Gary Lance B 75 195 0.0 0
Tom O'Malley L 72 180 0.256 13
Phil Garner R 70 175 0.260 109
Larry Pashnick R 75 205 0.0 0
Todd Fischer R 70 170 0.0 0
/* ========================================================================
* bootstrap-tour - v0.10.1
* http://bootstraptour.com
* ========================================================================
* Copyright 2012-2013 Ulrich Sossou
*
* ========================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================================
*/
/*!
* Bootstrap v3.1.0 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;opacity:0;filter:alpha(opacity=0)}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.tour-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;background-color:#000;opacity:.8;filter:alpha(opacity=80)}.tour-step-backdrop{position:relative;z-index:1101;background:inherit}.tour-step-backdrop>td{position:relative;z-index:1101}.tour-step-background{position:absolute!important;z-index:1100;background:inherit;border-radius:6px}.popover[class*=tour-]{z-index:1100}.popover[class*=tour-] .popover-navigation{padding:9px 14px}.popover[class*=tour-] .popover-navigation [data-role=end]{float:right}.popover[class*=tour-] .popover-navigation [data-role=prev],.popover[class*=tour-] .popover-navigation [data-role=next],.popover[class*=tour-] .popover-navigation [data-role=end]{cursor:pointer}.popover[class*=tour-] .popover-navigation [data-role=prev].disabled,.popover[class*=tour-] .popover-navigation [data-role=next].disabled,.popover[class*=tour-] .popover-navigation [data-role=end].disabled{cursor:default}.popover[class*=tour-].orphan{position:fixed;margin-top:0}.popover[class*=tour-].orphan .arrow{display:none}
/* ========================================================================
* bootstrap-tour - v0.10.1
* http://bootstraptour.com
* ========================================================================
* Copyright 2012-2013 Ulrich Sossou
*
* ========================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================================
*/
+function(t){"use strict";function e(e){return this.each(function(){var n=t(this),i=n.data("bs.tooltip"),r="object"==typeof e&&e;(i||"destroy"!=e)&&(i||n.data("bs.tooltip",i=new o(this,r)),"string"==typeof e&&i[e]())})}var o=function(t,e){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",t,e)};o.VERSION="3.2.0",o.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},o.prototype.init=function(e,o,n){this.enabled=!0,this.type=e,this.$element=t(o),this.options=this.getOptions(n),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport);for(var i=this.options.trigger.split(" "),r=i.length;r--;){var s=i[r];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",p="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(p+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},o.prototype.getDelegateOptions=function(){var e={},o=this.getDefaults();return this._options&&t.each(this._options,function(t,n){o[t]!=n&&(e[t]=n)}),e},o.prototype.enter=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="in",o.options.delay&&o.options.delay.show?(o.timeout=setTimeout(function(){"in"==o.hoverState&&o.show()},o.options.delay.show),void 0):o.show()},o.prototype.leave=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="out",o.options.delay&&o.options.delay.hide?(o.timeout=setTimeout(function(){"out"==o.hoverState&&o.hide()},o.options.delay.hide),void 0):o.hide()},o.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(document.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,i=this.tip(),r=this.getUID(this.type);this.setContent(),i.attr("id",r),this.$element.attr("aria-describedby",r),this.options.animation&&i.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,p=a.test(s);p&&(s=s.replace(a,"")||"top"),i.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?i.appendTo(this.options.container):i.insertAfter(this.$element);var h=this.getPosition(),l=i[0].offsetWidth,u=i[0].offsetHeight;if(p){var c=s,d=this.$element.parent(),f=this.getPosition(d);s="bottom"==s&&h.top+h.height+u-f.scroll>f.height?"top":"top"==s&&h.top-f.scroll-u<0?"bottom":"right"==s&&h.right+l>f.width?"left":"left"==s&&h.left-l<f.left?"right":s,i.removeClass(c).addClass(s)}var m=this.getCalculatedOffset(s,h,l,u);this.applyPlacement(m,s);var v=function(){n.$element.trigger("shown.bs."+n.type),n.hoverState=null};t.support.transition&&this.$tip.hasClass("fade")?i.one("bsTransitionEnd",v).emulateTransitionEnd(150):v()}},o.prototype.applyPlacement=function(e,o){var n=this.tip(),i=n[0].offsetWidth,r=n[0].offsetHeight,s=parseInt(n.css("margin-top"),10),a=parseInt(n.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),e.top=e.top+s,e.left=e.left+a,t.offset.setOffset(n[0],t.extend({using:function(t){n.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),n.addClass("in");var p=n[0].offsetWidth,h=n[0].offsetHeight;"top"==o&&h!=r&&(e.top=e.top+r-h);var l=this.getViewportAdjustedDelta(o,e,p,h);l.left?e.left+=l.left:e.top+=l.top;var u=l.left?2*l.left-i+p:2*l.top-r+h,c=l.left?"left":"top",d=l.left?"offsetWidth":"offsetHeight";n.offset(e),this.replaceArrow(u,n[0][d],c)},o.prototype.replaceArrow=function(t,e,o){this.arrow().css(o,t?50*(1-t/e)+"%":"")},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},o.prototype.hide=function(){function e(){"in"!=o.hoverState&&n.detach(),o.$element.trigger("hidden.bs."+o.type)}var o=this,n=this.tip(),i=t.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(i),i.isDefaultPrevented()?void 0:(n.removeClass("in"),t.support.transition&&this.$tip.hasClass("fade")?n.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),this.hoverState=null,this)},o.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},o.prototype.hasContent=function(){return this.getTitle()},o.prototype.getPosition=function(e){e=e||this.$element;var o=e[0],n="BODY"==o.tagName;return t.extend({},"function"==typeof o.getBoundingClientRect?o.getBoundingClientRect():null,{scroll:n?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop(),width:n?t(window).width():e.outerWidth(),height:n?t(window).height():e.outerHeight()},n?{top:0,left:0}:e.offset())},o.prototype.getCalculatedOffset=function(t,e,o,n){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-o/2}:"top"==t?{top:e.top-n,left:e.left+e.width/2-o/2}:"left"==t?{top:e.top+e.height/2-n/2,left:e.left-o}:{top:e.top+e.height/2-n/2,left:e.left+e.width}},o.prototype.getViewportAdjustedDelta=function(t,e,o,n){var i={top:0,left:0};if(!this.$viewport)return i;var r=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-r-s.scroll,p=e.top+r-s.scroll+n;a<s.top?i.top=s.top-a:p>s.top+s.height&&(i.top=s.top+s.height-p)}else{var h=e.left-r,l=e.left+r+o;h<s.left?i.left=s.left-h:l>s.width&&(i.left=s.left+s.width-l)}return i},o.prototype.getTitle=function(){var t,e=this.$element,o=this.options;return t=e.attr("data-original-title")||("function"==typeof o.title?o.title.call(e[0]):o.title)},o.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},o.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},o.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},o.prototype.enable=function(){this.enabled=!0},o.prototype.disable=function(){this.enabled=!1},o.prototype.toggleEnabled=function(){this.enabled=!this.enabled},o.prototype.toggle=function(e){var o=this;e&&(o=t(e.currentTarget).data("bs."+this.type),o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o))),o.tip().hasClass("in")?o.leave(o):o.enter(o)},o.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=o,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=n,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var n=t(this),i=n.data("bs.popover"),r="object"==typeof e&&e;(i||"destroy"!=e)&&(i||n.data("bs.popover",i=new o(this,r)),"string"==typeof e&&i[e]())})}var o=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");o.VERSION="3.2.0",o.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),o.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),o.prototype.constructor=o,o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),o=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").empty()[this.options.html?"string"==typeof o?"html":"append":"text"](o),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},o.prototype.hasContent=function(){return this.getTitle()||this.getContent()},o.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},o.prototype.tip=function(){return this.$tip||(this.$tip=t(this.options.template)),this.$tip};var n=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=o,t.fn.popover.noConflict=function(){return t.fn.popover=n,this}}(jQuery),function(t,e){var o,n;return n=e.document,o=function(){function o(o){var n;try{n=e.localStorage}catch(i){n=!1}this._options=t.extend({name:"tour",steps:[],container:"body",autoscroll:!0,keyboard:!0,storage:n,debug:!1,backdrop:!1,backdropPadding:0,redirect:!0,orphan:!1,duration:!1,delay:!1,basePath:"",template:'<div class="popover" role="tooltip"> <div class="arrow"></div> <h3 class="popover-title"></h3> <div class="popover-content"></div> <div class="popover-navigation"> <div class="btn-group"> <button class="btn btn-sm btn-default" data-role="prev">&laquo; Prev</button> <button class="btn btn-sm btn-default" data-role="next">Next &raquo;</button> <button class="btn btn-sm btn-default" data-role="pause-resume" data-pause-text="Pause" data-resume-text="Resume">Pause</button> </div> <button class="btn btn-sm btn-default" data-role="end">End tour</button> </div> </div>',afterSetState:function(){},afterGetState:function(){},afterRemoveState:function(){},onStart:function(){},onEnd:function(){},onShow:function(){},onShown:function(){},onHide:function(){},onHidden:function(){},onNext:function(){},onPrev:function(){},onPause:function(){},onResume:function(){}},o),this._force=!1,this._inited=!1,this.backdrop={overlay:null,$element:null,$background:null,backgroundShown:!1,overlayElementShown:!1}}return o.prototype.addSteps=function(t){var e,o,n;for(o=0,n=t.length;n>o;o++)e=t[o],this.addStep(e);return this},o.prototype.addStep=function(t){return this._options.steps.push(t),this},o.prototype.getStep=function(e){return null!=this._options.steps[e]?t.extend({id:"step-"+e,path:"",placement:"right",title:"",content:"<p></p>",next:e===this._options.steps.length-1?-1:e+1,prev:e-1,animation:!0,container:this._options.container,autoscroll:this._options.autoscroll,backdrop:this._options.backdrop,backdropPadding:this._options.backdropPadding,redirect:this._options.redirect,orphan:this._options.orphan,duration:this._options.duration,delay:this._options.delay,template:this._options.template,onShow:this._options.onShow,onShown:this._options.onShown,onHide:this._options.onHide,onHidden:this._options.onHidden,onNext:this._options.onNext,onPrev:this._options.onPrev,onPause:this._options.onPause,onResume:this._options.onResume},this._options.steps[e]):void 0},o.prototype.init=function(t){return this._force=t,this.ended()?(this._debug("Tour ended, init prevented."),this):(this.setCurrentStep(),this._initMouseNavigation(),this._initKeyboardNavigation(),this._onResize(function(t){return function(){return t.showStep(t._current)}}(this)),null!==this._current&&this.showStep(this._current),this._inited=!0,this)},o.prototype.start=function(t){var e;return null==t&&(t=!1),this._inited||this.init(t),null===this._current&&(e=this._makePromise(null!=this._options.onStart?this._options.onStart(this):void 0),this._callOnPromiseDone(e,this.showStep,0)),this},o.prototype.next=function(){var t;return t=this.hideStep(this._current),this._callOnPromiseDone(t,this._showNextStep)},o.prototype.prev=function(){var t;return t=this.hideStep(this._current),this._callOnPromiseDone(t,this._showPrevStep)},o.prototype.goTo=function(t){var e;return e=this.hideStep(this._current),this._callOnPromiseDone(e,this.showStep,t)},o.prototype.end=function(){var o,i;return o=function(o){return function(){return t(n).off("click.tour-"+o._options.name),t(n).off("keyup.tour-"+o._options.name),t(e).off("resize.tour-"+o._options.name),o._setState("end","yes"),o._inited=!1,o._force=!1,o._clearTimer(),null!=o._options.onEnd?o._options.onEnd(o):void 0}}(this),i=this.hideStep(this._current),this._callOnPromiseDone(i,o)},o.prototype.ended=function(){return!this._force&&!!this._getState("end")},o.prototype.restart=function(){return this._removeState("current_step"),this._removeState("end"),this.start()},o.prototype.pause=function(){var t;return t=this.getStep(this._current),t&&t.duration?(this._paused=!0,this._duration-=(new Date).getTime()-this._start,e.clearTimeout(this._timer),this._debug("Paused/Stopped step "+(this._current+1)+" timer ("+this._duration+" remaining)."),null!=t.onPause?t.onPause(this,this._duration):void 0):this},o.prototype.resume=function(){var t;return t=this.getStep(this._current),t&&t.duration?(this._paused=!1,this._start=(new Date).getTime(),this._duration=this._duration||t.duration,this._timer=e.setTimeout(function(t){return function(){return t._isLast()?t.next():t.end()}}(this),this._duration),this._debug("Started step "+(this._current+1)+" timer with duration "+this._duration),null!=t.onResume&&this._duration!==t.duration?t.onResume(this,this._duration):void 0):this},o.prototype.hideStep=function(e){var o,n,i;return(i=this.getStep(e))?(this._clearTimer(),n=this._makePromise(null!=i.onHide?i.onHide(this,e):void 0),o=function(o){return function(){var n;return n=t(i.element),n.data("bs.popover")||n.data("popover")||(n=t("body")),n.popover("destroy").removeClass("tour-"+o._options.name+"-element tour-"+o._options.name+"-"+e+"-element"),i.reflex&&n.removeClass("tour-step-element-reflex").off(""+o._reflexEvent(i.reflex)+".tour-"+o._options.name),i.backdrop&&o._hideBackdrop(),null!=i.onHidden?i.onHidden(o):void 0}}(this),this._callOnPromiseDone(n,o),n):void 0},o.prototype.showStep=function(t){var o,i,r,s;return this.ended()?(this._debug("Tour ended, showStep prevented."),this):(s=this.getStep(t))?(r=t<this._current,o=this._makePromise(null!=s.onShow?s.onShow(this,t):void 0),i=function(e){return function(){var o,i,a;if(e.setCurrentStep(t),i=function(){switch({}.toString.call(s.path)){case"[object Function]":return s.path();case"[object String]":return this._options.basePath+s.path;default:return s.path}}.call(e),o=[n.location.pathname,n.location.hash].join(""),e._isRedirect(i,o))return e._redirect(s,i),void 0;if(e._isOrphan(s)){if(!s.orphan)return e._debug("Skip the orphan step "+(e._current+1)+".\nOrphan option is false and the element does not exist or is hidden."),r?e._showPrevStep():e._showNextStep(),void 0;e._debug("Show the orphan step "+(e._current+1)+". Orphans option is true.")}return s.backdrop&&e._showBackdrop(e._isOrphan(s)?void 0:s.element),a=function(){return e.getCurrentStep()===t?(null!=s.element&&s.backdrop&&e._showOverlayElement(s),e._showPopover(s,t),null!=s.onShown&&s.onShown(e),e._debug("Step "+(e._current+1)+" of "+e._options.steps.length)):void 0},s.autoscroll?e._scrollIntoView(s.element,a):a(),s.duration?e.resume():void 0}}(this),s.delay?(this._debug("Wait "+s.delay+" milliseconds to show the step "+(this._current+1)),e.setTimeout(function(t){return function(){return t._callOnPromiseDone(o,i)}}(this),s.delay)):this._callOnPromiseDone(o,i),o):void 0},o.prototype.getCurrentStep=function(){return this._current},o.prototype.setCurrentStep=function(t){return null!=t?(this._current=t,this._setState("current_step",t)):(this._current=this._getState("current_step"),this._current=null===this._current?null:parseInt(this._current,10)),this},o.prototype._setState=function(t,e){var o,n;if(this._options.storage){n=""+this._options.name+"_"+t;try{this._options.storage.setItem(n,e)}catch(i){o=i,o.code===DOMException.QUOTA_EXCEEDED_ERR&&this._debug("LocalStorage quota exceeded. State storage failed.")}return this._options.afterSetState(n,e)}return null==this._state&&(this._state={}),this._state[t]=e},o.prototype._removeState=function(t){var e;return this._options.storage?(e=""+this._options.name+"_"+t,this._options.storage.removeItem(e),this._options.afterRemoveState(e)):null!=this._state?delete this._state[t]:void 0},o.prototype._getState=function(t){var e,o;return this._options.storage?(e=""+this._options.name+"_"+t,o=this._options.storage.getItem(e)):null!=this._state&&(o=this._state[t]),(void 0===o||"null"===o)&&(o=null),this._options.afterGetState(t,o),o},o.prototype._showNextStep=function(){var t,e,o;return o=this.getStep(this._current),e=function(t){return function(){return t.showStep(o.next)}}(this),t=this._makePromise(null!=o.onNext?o.onNext(this):void 0),this._callOnPromiseDone(t,e)},o.prototype._showPrevStep=function(){var t,e,o;return o=this.getStep(this._current),e=function(t){return function(){return t.showStep(o.prev)}}(this),t=this._makePromise(null!=o.onPrev?o.onPrev(this):void 0),this._callOnPromiseDone(t,e)},o.prototype._debug=function(t){return this._options.debug?e.console.log("Bootstrap Tour '"+this._options.name+"' | "+t):void 0},o.prototype._isRedirect=function(t,e){return null!=t&&""!==t&&("[object RegExp]"==={}.toString.call(t)&&!t.test(e)||"[object String]"==={}.toString.call(t)&&t.replace(/\?.*$/,"").replace(/\/?$/,"")!==e.replace(/\/?$/,""))},o.prototype._redirect=function(e,o){return t.isFunction(e.redirect)?e.redirect.call(this,o):e.redirect===!0?(this._debug("Redirect to "+o),n.location.href=o):void 0},o.prototype._isOrphan=function(e){return null==e.element||!t(e.element).length||t(e.element).is(":hidden")&&"http://www.w3.org/2000/svg"!==t(e.element)[0].namespaceURI},o.prototype._isLast=function(){return this._current<this._options.steps.length-1},o.prototype._showPopover=function(e,o){var n,i,r,s;return t(".tour-"+this._options.name).remove(),s=t.extend({},this._options),r=this._isOrphan(e),e.template=this._template(e,o),r&&(e.element="body",e.placement="top"),n=t(e.element),n.addClass("tour-"+this._options.name+"-element tour-"+this._options.name+"-"+o+"-element"),e.options&&t.extend(s,e.options),e.reflex&&!r&&(n.addClass("tour-step-element-reflex"),n.off(""+this._reflexEvent(e.reflex)+".tour-"+this._options.name),n.on(""+this._reflexEvent(e.reflex)+".tour-"+this._options.name,function(t){return function(){return t._isLast()?t.next():t.end()}}(this))),n.popover({placement:e.placement,trigger:"manual",title:e.title,content:e.content,html:!0,animation:e.animation,container:e.container,template:e.template,selector:e.element}).popover("show"),i=n.data("bs.popover")?n.data("bs.popover").tip():n.data("popover").tip(),i.attr("id",e.id),this._reposition(i,e),r?this._center(i):void 0},o.prototype._template=function(e,o){var n,i,r,s,a;return a=t.isFunction(e.template)?t(e.template(o,e)):t(e.template),n=a.find(".popover-navigation"),r=n.find('[data-role="prev"]'),i=n.find('[data-role="next"]'),s=n.find('[data-role="pause-resume"]'),this._isOrphan(e)&&a.addClass("orphan"),a.addClass("tour-"+this._options.name+" tour-"+this._options.name+"-"+o),e.prev<0&&r.addClass("disabled"),e.next<0&&i.addClass("disabled"),e.duration||s.remove(),a.clone().wrap("<div>").parent().html()},o.prototype._reflexEvent=function(t){return"[object Boolean]"==={}.toString.call(t)?"click":t},o.prototype._reposition=function(e,o){var i,r,s,a,p,h,l;if(a=e[0].offsetWidth,r=e[0].offsetHeight,l=e.offset(),p=l.left,h=l.top,i=t(n).outerHeight()-l.top-e.outerHeight(),0>i&&(l.top=l.top+i),s=t("html").outerWidth()-l.left-e.outerWidth(),0>s&&(l.left=l.left+s),l.top<0&&(l.top=0),l.left<0&&(l.left=0),e.offset(l),"bottom"===o.placement||"top"===o.placement){if(p!==l.left)return this._replaceArrow(e,2*(l.left-p),a,"left")}else if(h!==l.top)return this._replaceArrow(e,2*(l.top-h),r,"top")},o.prototype._center=function(o){return o.css("top",t(e).outerHeight()/2-o.outerHeight()/2)},o.prototype._replaceArrow=function(t,e,o,n){return t.find(".arrow").css(n,e?50*(1-e/o)+"%":"")},o.prototype._scrollIntoView=function(o,n){var i,r,s,a,p,h;return i=t(o),i.length?(r=t(e),a=i.offset().top,h=r.height(),p=Math.max(0,a-h/2),this._debug("Scroll into view. ScrollTop: "+p+". Element offset: "+a+". Window height: "+h+"."),s=0,t("body, html").stop(!0,!0).animate({scrollTop:Math.ceil(p)},function(t){return function(){return 2===++s?(n(),t._debug("Scroll into view.\nAnimation end element offset: "+i.offset().top+".\nWindow height: "+r.height()+".")):void 0}}(this))):n()},o.prototype._onResize=function(o,n){return t(e).on("resize.tour-"+this._options.name,function(){return clearTimeout(n),n=setTimeout(o,100)})},o.prototype._initMouseNavigation=function(){var e;return e=this,t(n).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='prev']").off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='next']").off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='end']").off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='pause-resume']").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='next']",function(t){return function(e){return e.preventDefault(),t.next()}}(this)).on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='prev']",function(t){return function(e){return e.preventDefault(),t.prev()}}(this)).on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='end']",function(t){return function(e){return e.preventDefault(),t.end()}}(this)).on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role='pause-resume']",function(o){var n;return o.preventDefault(),n=t(this),n.text(e._paused?n.data("pause-text"):n.data("resume-text")),e._paused?e.resume():e.pause()})},o.prototype._initKeyboardNavigation=function(){return this._options.keyboard?t(n).on("keyup.tour-"+this._options.name,function(t){return function(e){if(e.which)switch(e.which){case 39:return e.preventDefault(),t._isLast()?t.next():t.end();case 37:if(e.preventDefault(),t._current>0)return t.prev();break;case 27:return e.preventDefault(),t.end()}}}(this)):void 0},o.prototype._makePromise=function(e){return e&&t.isFunction(e.then)?e:null},o.prototype._callOnPromiseDone=function(t,e,o){return t?t.then(function(t){return function(){return e.call(t,o)}}(this)):e.call(this,o)},o.prototype._showBackdrop=function(){return this.backdrop.backgroundShown?void 0:(this.backdrop=t("<div>",{"class":"tour-backdrop"}),this.backdrop.backgroundShown=!0,t("body").append(this.backdrop))},o.prototype._hideBackdrop=function(){return this._hideOverlayElement(),this._hideBackground()},o.prototype._hideBackground=function(){return this.backdrop?(this.backdrop.remove(),this.backdrop.overlay=null,this.backdrop.backgroundShown=!1):void 0},o.prototype._showOverlayElement=function(e){var o,n;return o=t(e.element),o&&0!==o.length&&!this.backdrop.overlayElementShown?(this.backdrop.overlayElementShown=!0,this.backdrop.$element=o.addClass("tour-step-backdrop"),this.backdrop.$background=t("<div>",{"class":"tour-step-background"}),n={width:o.innerWidth(),height:o.innerHeight(),offset:o.offset()},this.backdrop.$background.appendTo("body"),e.backdropPadding&&(n=this._applyBackdropPadding(e.backdropPadding,n)),this.backdrop.$background.width(n.width).height(n.height).offset(n.offset)):void 0},o.prototype._hideOverlayElement=function(){return this.backdrop.overlayElementShown?(this.backdrop.$element.removeClass("tour-step-backdrop"),this.backdrop.$background.remove(),this.backdrop.$element=null,this.backdrop.$background=null,this.backdrop.overlayElementShown=!1):void 0},o.prototype._applyBackdropPadding=function(t,e){return"object"==typeof t?(null==t.top&&(t.top=0),null==t.right&&(t.right=0),null==t.bottom&&(t.bottom=0),null==t.left&&(t.left=0),e.offset.top=e.offset.top-t.top,e.offset.left=e.offset.left-t.left,e.width=e.width+t.left+t.right,e.height=e.height+t.top+t.bottom):(e.offset.top=e.offset.top-t,e.offset.left=e.offset.left-t,e.width=e.width+2*t,e.height=e.height+2*t),e},o.prototype._clearTimer=function(){return e.clearTimeout(this._timer),this._timer=null,this._duration=null},o}(),e.Tour=o}(jQuery,window);
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='bootstrap-tour-standalone.min.css' rel='stylesheet'>
<script src='http://code.jquery.com/jquery-2.1.4.min.js'></script>
<script src='bootstrap-tour-standalone.min.js'></script>
<script src='http://d3js.org/d3.v3.min.js'></script>
<script src='http://dimplejs.org/dist/dimple.v2.1.6.min.js'></script>
<style>
body {
font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
font-size: 14px;
}
#title {
margin-left: 75px;
font-size: 18px;
color: gray;
font-weight: normal;
position: relative;
top: 30px;
margin-top: 0px;
margin-bottom: 5px;
width: 500px;
}
circle.dimple-series-0 {
opacity: 0.2;
r: 2;
}
</style>
<script type="text/javascript">
// Global-scope variables for maintaining state across function calls and event callbacks
var margin = 75,
width = 960 - margin,
height = 400 - margin;
var svg = null;
var chart = null;
var baseball_data = null;
/** Initializes/updates the dimple chart and d3 container objects */
function draw(data, duration) {
'use strict';
// If the chart doesn't exist, then it must be initialized first
var initialize = (chart == null);
if (initialize)
{
// Create title element
d3.select('body')
.append('h2')
.attr('id', 'title')
.text('MLB Home Runs vs. Batting Averages');
// Create container object for the chart
svg = d3.select('body')
.append('svg')
.attr('width', width + margin)
.attr('height', height + margin)
.append('g')
.attr('class','chart');
// Use dimple to simplify setting up our d3 chart
chart = new dimple.chart(svg, data);
chart.addMeasureAxis('x', 'avg').tickFormat = '.3f'; // 3 significant figures
chart.addMeasureAxis('y', 'HR');
// The final element in the category fields is necessary, so aggregation doesn't occur
chart.addSeries(['name', 'weight', 'height', 'handedness', '=== Data ==='], dimple.plot.point);
// Override the default colors to employ better design principles (no color where it is not needed)
chart.defaultColors = [
new dimple.color('black'),
new dimple.color('red') // this gets used by the linear regression line
];
chart.draw(duration);
}
else
{
// Set the new data and transition to the updated view
chart.data = data;
chart.draw(duration, false);
}
// Provide better axis naming, since the default fields are shorthand
var style = {'font-family': 'sans-serif', 'font-size': '16px', 'fill': 'gray'};
chart.axes[0].titleShape.text('Batting Average').style(style);
chart.axes[1].titleShape.text('Home Runs').style(style);
}
/** Load the CSV data, transform, and then render */
function initGraph(callback) {
d3.csv('baseball_data.csv', function(d) {
// Handedness comes in as short-hand from the CSV file, so transform it to more descriptive naming
var handedness = d.handedness;
switch(handedness) {
case 'B':
handedness = 'Switch';
break;
case 'L':
handedness = 'Left';
break;
case 'R':
handedness = 'Right';
break;
}
d.handedness = handedness;
return d;
}, function(data) {
// Get rid of all records with 0 averages, which is either means:
// 1. The data is missing
// 2. The player had no at-bats
// 3. The player has not had a significant number of at-bats to have an average
baseball_data = data.filter(function(d) { return d['avg'] > 0.0 });
draw(baseball_data, 0);
// Support for callbacks if passed as an argument
if (callback) {
callback();
}
});
}
/** Show a linear regression line overlaid on the chart */
function showLinearModel() {
var min = 0.2;
var lmLine = [
{'avg':0.210,'HR':10},
{'avg':0.3,'HR':110}
];
var lmSeries = null;
// Check whether the linear regression line already exists
if (chart.series.length == 2)
{
// Pick up existing linear model series
lmSeries = chart.series[1];
}
else
{
// Create regression line
lmSeries = chart.addSeries(['avg', 'line'], dimple.plot.line, [chart.axes[0], chart.axes[1]]);
// Override in order to explain better what the line is on mouseover
lmSeries.getTooltipText = function(e) {
return [
"Linear regression line for all batters, which accounts for 30% of the variability.",
"Roughly, home runs can increase by an order of magnitude with only a 10% change in batting average."
];
};
}
lmSeries.data = lmLine;
draw(baseball_data.filter(function(d) { return d['avg'] >= min }), 0);
}
/** Match the final step of the tour in the event that the tour is skipped */
function finalStep() {
// If the tour has been skipped, then make sure to set up the graph to match where it would be at the end step
showLinearModel();
// Match the other changes that have occurred during the tour
var min = 0.2;
chart.axes[0].overrideMin = min;
chart.axes[1].overrideMin = 1;
chart.axes[1].useLog = true;
draw(baseball_data.filter(function(d) { return d['avg'] >= min }), 0);
}
</script>
</head>
<body>
<script type="text/javascript">
// These tour steps define what bootstrap-tour uses
var tourSteps = [
{
orphan: true, // Don't attach to an element; Center on the page
title: "Let's learn something about baseball...",
content: "Even if you don't know baseball, consider the following question:<br><br>How much better is a player with a batting average of 0.300 than one with 0.200?<br><br>Select <b>Next</b> to continue...",
},
{
orphan: true, // Don't attach to an element; Center on the page
title: "So, how much is a player worth?",
content: "You're correct if you guessed 1.5x better, but is that the whole story?<br><br>You may be surprised.",
onNext: function(tour) {
// Reveal the chart for the first time
initGraph();
}
},
{
element: '#tour-overlay',
placement: 'left',
title: "Looking at the data...",
content: "What do you notice?<br><br>Clearly, something happens with a player's home runs if he has a .200 batting average or better.<br><br>Let's take a closer look though.",
prev: -1,
onNext: function(tour) {
// Filter and zoom in on a region of the data
var min = 0.2;
chart.axes[0].overrideMin = min;
draw(baseball_data.filter(function(d) { return d['avg'] >= min }), 1000);
}
},
{
element: '#tour-overlay-right',
placement: 'right',
title: "Looking at the data...",
content: "Ahh...That's better. However, are you able to tell the relationship between home runs and batting averages yet?<br><br>Let's try viewing it another way.",
onPrev: function(tour) {
// Revert to unfiltered data
chart.axes[0].overrideMin = null;
draw(baseball_data, 1000);
},
onNext: function(tour) {
// Apply log-scale on the y-axis
var min = 0.2;
chart.axes[1].overrideMin = 1;
chart.axes[1].useLog = true;
draw(baseball_data.filter(function(d) { return d['avg'] >= min }), 1000);
},
},
{
element: '#tour-overlay-right',
placement: 'right',
title: "Looking at the data...",
content: "By changing the scale of the y-axis to be log-based (or non-linear) we are able to see a different story.",
onPrev: function(tour) {
// Revert to unscaled y-axis
var min = 0.2;
chart.axes[1].overrideMin = null;
chart.axes[1].useLog = false;
draw(baseball_data.filter(function(d) { return d['avg'] >= min }), 1000);
},
},
{
element: '#tour-overlay-right',
placement: 'right',
title: "Looking at the data...",
content: "Roughly, home runs increase by an <i><b>order of magnitude</b></i> for each 10% increase in batting average. (Our linear regression here accounts for 30% of the variation)",
onShow: function(tour) {
// Reveal linear regression line
showLinearModel();
},
onPrev: function(tour) {
// Hide linear regression line
var min = 0.2;
chart.series[1].data = [];
draw(baseball_data.filter(function(d) { return d['avg'] >= min }), 0);
},
},
{
element: 'circle.dimple-jack-heidemann',
placement: 'right',
title: "Let data be your guide...",
content: "So, a player like Jack Heidemann having a 0.211 batting average with 9 HRs...",
onShow: function(tour) {
// Emphasize data point
d3.select('#tour-overlay-movable')
var circle = svg.select('circle.dimple-jack-heidemann');
circle.style({'fill': 'red', 'opacity': 1, 'r': 5})
},
onShown: function(tour) {
// Offset tour popover to give space to data point
d3.select('.popover').style({'margin-left': '25px', 'margin-top': '3px'});
},
onHide: function(tour) {
// Unset data point emphasis
svg.select('circle.dimple-jack-heidemann')
.style({'fill': 'black', 'opacity': null, 'r': null});
d3.select('.popover').style({'margin-left': null, 'margin-top': null});
}
},
{
element: 'circle.dimple-pete-rose',
placement: 'right',
title: "Let data be your guide...",
content: "...is a world away from Pete Rose with 160 HRs and a batting average of 0.303.",
onShow: function(tour) {
// Emphasize data point
var circle = svg.select('circle.dimple-pete-rose');
circle.style({'fill': 'red', 'opacity': 1, 'r': 5})
},
onShown: function(tour) {
// Offset tour popover to give space to data point
d3.select('.popover').style({'margin-left': '25px', 'margin-top': '3px'});
},
onHide: function(tour) {
// Unset data point emphasis
svg.select('circle.dimple-pete-rose')
.style({'fill': 'black', 'opacity': null, 'r': null});
d3.select('.popover').style({'margin-left': null, 'margin-top': null});
}
},
{
element: '#tour-overlay-right',
orphan: true,
title: "Let data be your guide...",
content: "So, the bigger story is that a batter with a batting average <i>1.5x</i> better than another batter is typically <i><b>10x better</b></i> in hitting home runs.",
// Set a different template, since you can no longer skip
template: "<div class='popover tour'>" +
"<div class='arrow'></div>" +
"<h3 class='popover-title'></h3>" +
"<div class='popover-content'></div>" +
"<div class='popover-navigation'>" +
"<button class='btn btn-sm btn-default' data-role='prev'>« Prev</button>" +
"<button class='btn btn-sm btn-default' data-role='next'>Next »</button>" +
"<button class='btn btn-sm btn-default' data-role='end'>End</button>" +
"</div>" +
"</nav>" +
"</div>",
},
];
var tour = new Tour({
storage: false, // Don't save tour progress
template: "<div class='popover tour'>" +
"<div class='arrow'></div>" +
"<h3 class='popover-title'></h3>" +
"<div class='popover-content'></div>" +
"<div class='popover-navigation'>" +
"<button class='btn btn-sm btn-default' data-role='prev'>« Prev</button>" +
"<button class='btn btn-sm btn-default' data-role='next'>Next »</button>" +
"<button class='btn btn-sm btn-default' data-role='end'>Skip</button>" +
"</div>" +
"</nav>" +
"</div>",
steps: tourSteps,
onEnd: function(tour) {
if (!svg) {
// Tour was skipped before displaying chart
initGraph(finalStep);
} else {
// Tour ended or was skipped after displaying chart
finalStep();
}
}
});
// Kick off tour on page launch
tour.init();
tour.start();
</script>
<div id='tour-overlay' style='position: absolute; top: 300px; left: 500px; width: 1px; height: 1px;'></div>
<div id='tour-overlay-right' style='position: absolute; top: 300px; left: 700px; width: 1px; height: 1px;'></div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment