SlideShare a Scribd company logo
1 of 24
Download to read offline
Stat405            Polishing, continued


                             Hadley Wickham
Monday, 9 November 2009
1. Coming up next.
               2. Project.
               3. Colour scales
               4. Themes.




Monday, 9 November 2009
Monday           Wednesday

           Nov 9             Polishing           Spam

         Nov 16           Posters / Project      Spam

         Nov 23             Debugging         Thanksgiving
                            Professional
         Nov 30             development
                                               Poster pres


Monday, 9 November 2009
Project 3

                  Your turn to find an interesting data
                  source and analyse it. Any data is
                  acceptable but it needs to be large
                  (>1,000 points).
                  If you don’t have any ideas, try looking at
                  http://delicious.com/hadley/data



Monday, 9 November 2009
Deliverables
                  Poster.
                  Single double-sided page handout,
                  summarising the major findings on the
                  poster.
                  The R code used to clean the data and
                  produce the plots. (No manual steps!)



Monday, 9 November 2009
Timeline
                  Nov 17-19. Meet to discuss choice of
                  data and initial analysis ideas. Data
                  preparation.
                  Nov 23-30. Review of draft poster
                  (optional, but highly recommended).
                  Dec 2. Final poster presentation. Turn in
                  electronic copy of handout & code.


Monday, 9 November 2009
Polishing



Monday, 9 November 2009
Tools

                  Scales. Used to override default
                  perceptual mappings, and tune
                  parameters of axes and legends.
                  Themes: control presentation of
                  non-data elements.



Monday, 9 November 2009
Your turn


                  Recall the four key parameters that all
                  scales have in common. What are their
                  names and what do they do?




Monday, 9 November 2009
p <- qplot(carat, price, data = diamonds, geom = "hex")

     # First argument (name) controls legend title
     p + scale_fill_continuous("Count")

     # Breaks and labels control legend keys
     p + scale_fill_continuous(breaks = c(1000, 3500, 7000))
     p + scale_fill_continuous(breaks = c(0, 4000, 8000))

     # Why don't 0 and 8000 have colours?
     p + scale_fill_continuous(breaks = c(0, 4000, 8000),
       limits = c(0, 8000))

     # Can use labels to make more human readable
     breaks <- c(0, 2000, 4000, 6000, 8000)
     labels <- format(breaks, big.mark = ",")
     p + scale_fill_continuous(breaks = breaks, labels = labels,
        limits = c(0, 8000))

Monday, 9 November 2009
Default colour scales

                  Discrete: evenly spaced hues of equal
                  chroma and luminance. No colour
                  appears more important than any other.
                  Does not imply order.
                  Continuous: evenly spaced hues
                  between two colours.



Monday, 9 November 2009
Alternatives

                  Discrete: hue, brewer, manual
                  Continuous: gradient, gradient2,
                  gradientn




Monday, 9 November 2009
Color brewer
                  Cynthia Brewer applied the basic
                  principles and then rigorously tested the
                  results to produce a selection of good
                  palettes, particularly tailored for maps:
                  http://colorbrewer2.org/
                  Can use cut_interval() or cut_number()
                  to convert continuous to discrete.


Monday, 9 November 2009
# Fancy looking trigonometric function
     vals <- seq(-4 * pi, 4 * pi, len = 50)
     df <- expand.grid(x = vals, y = vals)
     df$r <- with(df, sqrt(x ^ 2 + y ^ 2))
     df$z <- with(df, cos(r ^ 2) * exp(- r / 6))
     df$z_cut <- cut_interval(df$z, 9)

     (p1 <-               qplot(x, y, data = df, fill = z,
       geom               = "tile"))
     (p2 <-               qplot(x, y, data = df, fill = z_cut,
       geom               = "tile"))



Monday, 9 November 2009
p1 + scale_fill_gradient(low = "white",
       high = "black")

     # Highlight deviations
     p1 + scale_fill_gradient2()
     p1 + scale_fill_gradient2(breaks = seq(-1, 1,
       by = 0.25), limits = c(-1, 1))
     p1 + scale_fill_gradient2(mid = "white",
       low = "black", high = "black")

     p2 + scale_fill_brewer(pal = "Blues")



Monday, 9 November 2009
Your turn

                  Read through the examples for
                  scale_colour_brewer,
                  scale_colour_gradient2 and
                  scale_colour_gradientn.
                  Experiment!



Monday, 9 November 2009
Colour blindness

                  7-10% of men are red-green colour
                  “blind”. (Many other rarer types of colour
                  blindness)
                  Solutions: avoid red-green contrasts; use
                  redundant mappings; test. I like color
                  oracle: http://colororacle.cartography.ch



Monday, 9 November 2009
Themes



Monday, 9 November 2009
Visual appearance
                  So far have only discussed how to get the
                  data displayed the way you want,
                  focussing on the essence of the plot.
                  Themes give you a huge amount of
                  control over the appearance of the plot,
                  the choice of background colours, fonts
                  and so on.


Monday, 9 November 2009
# Two built in themes. The default:
     qplot(carat, price, data = diamonds)

     # And a theme with a white background:
     qplot(carat, price, data = diamonds) + theme_bw()

     # Use theme_set if you want it to apply to every
     # future plot.
     theme_set(theme_bw())

     # This is the best way of seeing all the default
     # options
     theme_bw()
     theme_grey()

Monday, 9 November 2009
Elements
                  You can also make your own theme, or
                  modify and existing.
                  Themes are made up of elements which
                  can be one of: theme_line, theme_segment,
                  theme_text, theme_rect, theme_blank
                  Gives you a lot of control over plot
                  appearance.


Monday, 9 November 2009
Elements
                  Axis: axis.line, axis.text.x, axis.text.y,
                  axis.ticks, axis.title.x, axis.title.y
                  Legend: legend.background, legend.key,
                  legend.text, legend.title
                  Panel: panel.background, panel.border,
                  panel.grid.major, panel.grid.minor
                  Strip: strip.background, strip.text.x,
                  strip.text.y


Monday, 9 November 2009
p <- qplot(displ, hwy, data = mpg) +
       opts(title = "Bigger engines are less efficient")

     # To modify a plot
     p
     p + opts(plot.title   =
       theme_text(size =   12, face = "bold"))
     p + opts(plot.title   = theme_text(colour = "red"))
     p + opts(plot.title   = theme_text(angle = 45))
     p + opts(plot.title   = theme_text(hjust = 1))




Monday, 9 November 2009
Your turn
                  Fix the overlapping y labels on this plot:
                  qplot(reorder(model, hwy), hwy, data =
                  mpg)
                  Rotate the labels on these strips so they
                  are easier to read.
                  qplot(hwy, reorder(model, hwy), data =
                  mpg) + facet_grid(manufacturer ~ .,
                  scales = "free", space = "free")


Monday, 9 November 2009

More Related Content

Viewers also liked

The story of story
The story of storyThe story of story
The story of story
sean8668
 
Artesian rv in brenham
Artesian rv in brenhamArtesian rv in brenham
Artesian rv in brenham
Joan Douglas
 
Power point presentation advertisement
Power point presentation advertisementPower point presentation advertisement
Power point presentation advertisement
loganjones07
 
τεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευση
τεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευσητεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευση
τεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευση
agathoula
 
Bacc Blue Hill week 5 deel 1
Bacc Blue Hill week 5 deel 1Bacc Blue Hill week 5 deel 1
Bacc Blue Hill week 5 deel 1
SomeAddict
 
Country place campout
Country place campoutCountry place campout
Country place campout
Joan Douglas
 
Grammar book 2
Grammar book 2Grammar book 2
Grammar book 2
laxhdh
 
Los heroes de la guerra de independencia griega
Los heroes de la guerra de independencia griegaLos heroes de la guerra de independencia griega
Los heroes de la guerra de independencia griega
Justino Garcia
 
Grammer book 2011
Grammer book   2011Grammer book   2011
Grammer book 2011
moiramurphy
 
One Three Hill: respostas
One Three Hill: respostasOne Three Hill: respostas
One Three Hill: respostas
Sara Silva
 
Vol 2 Barricades Murals Jd
Vol 2 Barricades  Murals JdVol 2 Barricades  Murals Jd
Vol 2 Barricades Murals Jd
kpadnes
 
London football clubs, pubs, the soho
London football clubs, pubs, the sohoLondon football clubs, pubs, the soho
London football clubs, pubs, the soho
IES Aricel
 

Viewers also liked (15)

Scotland
ScotlandScotland
Scotland
 
The story of story
The story of storyThe story of story
The story of story
 
Artesian rv in brenham
Artesian rv in brenhamArtesian rv in brenham
Artesian rv in brenham
 
Power point presentation advertisement
Power point presentation advertisementPower point presentation advertisement
Power point presentation advertisement
 
τεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευση
τεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευσητεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευση
τεχνολογίες κοινωνικής δικτύωσης στην εκπαίδευση
 
Bacc Blue Hill week 5 deel 1
Bacc Blue Hill week 5 deel 1Bacc Blue Hill week 5 deel 1
Bacc Blue Hill week 5 deel 1
 
Country place campout
Country place campoutCountry place campout
Country place campout
 
Grammar book 2
Grammar book 2Grammar book 2
Grammar book 2
 
Chismes laborales
Chismes laboralesChismes laborales
Chismes laborales
 
Scenario Internet Febbraio
Scenario Internet FebbraioScenario Internet Febbraio
Scenario Internet Febbraio
 
Los heroes de la guerra de independencia griega
Los heroes de la guerra de independencia griegaLos heroes de la guerra de independencia griega
Los heroes de la guerra de independencia griega
 
Grammer book 2011
Grammer book   2011Grammer book   2011
Grammer book 2011
 
One Three Hill: respostas
One Three Hill: respostasOne Three Hill: respostas
One Three Hill: respostas
 
Vol 2 Barricades Murals Jd
Vol 2 Barricades  Murals JdVol 2 Barricades  Murals Jd
Vol 2 Barricades Murals Jd
 
London football clubs, pubs, the soho
London football clubs, pubs, the sohoLondon football clubs, pubs, the soho
London football clubs, pubs, the soho
 

Similar to 21 Polishing

Apache Hadoop Talk at QCon
Apache Hadoop Talk at QConApache Hadoop Talk at QCon
Apache Hadoop Talk at QCon
Cloudera, Inc.
 
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 20092009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
Caue Guerra
 

Similar to 21 Polishing (20)

Apache Hadoop Talk at QCon
Apache Hadoop Talk at QConApache Hadoop Talk at QCon
Apache Hadoop Talk at QCon
 
05 subsetting
05 subsetting05 subsetting
05 subsetting
 
24 Spam
24 Spam24 Spam
24 Spam
 
03 Cleaning
03 Cleaning03 Cleaning
03 Cleaning
 
22 Spam
22 Spam22 Spam
22 Spam
 
06 Data
06 Data06 Data
06 Data
 
06 data
06 data06 data
06 data
 
14 Ddply
14 Ddply14 Ddply
14 Ddply
 
08 Functions
08 Functions08 Functions
08 Functions
 
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 20092009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
 
12 Ddply
12 Ddply12 Ddply
12 Ddply
 
22 spam
22 spam22 spam
22 spam
 
07 Problem Solving
07 Problem Solving07 Problem Solving
07 Problem Solving
 
Localizing iOS Apps
Localizing iOS AppsLocalizing iOS Apps
Localizing iOS Apps
 
Tkinter Does Not Suck
Tkinter Does Not SuckTkinter Does Not Suck
Tkinter Does Not Suck
 
04 reports
04 reports04 reports
04 reports
 
Visualising Big Data
Visualising Big DataVisualising Big Data
Visualising Big Data
 
08 functions
08 functions08 functions
08 functions
 
Who Wants To Be a Munger
Who Wants To Be a MungerWho Wants To Be a Munger
Who Wants To Be a Munger
 
25 Debugging
25 Debugging25 Debugging
25 Debugging
 

More from Hadley Wickham (20)

27 development
27 development27 development
27 development
 
27 development
27 development27 development
27 development
 
24 modelling
24 modelling24 modelling
24 modelling
 
23 data-structures
23 data-structures23 data-structures
23 data-structures
 
Graphical inference
Graphical inferenceGraphical inference
Graphical inference
 
R packages
R packagesR packages
R packages
 
21 spam
21 spam21 spam
21 spam
 
20 date-times
20 date-times20 date-times
20 date-times
 
19 tables
19 tables19 tables
19 tables
 
18 cleaning
18 cleaning18 cleaning
18 cleaning
 
17 polishing
17 polishing17 polishing
17 polishing
 
16 critique
16 critique16 critique
16 critique
 
15 time-space
15 time-space15 time-space
15 time-space
 
14 case-study
14 case-study14 case-study
14 case-study
 
13 case-study
13 case-study13 case-study
13 case-study
 
12 adv-manip
12 adv-manip12 adv-manip
12 adv-manip
 
11 adv-manip
11 adv-manip11 adv-manip
11 adv-manip
 
11 adv-manip
11 adv-manip11 adv-manip
11 adv-manip
 
10 simulation
10 simulation10 simulation
10 simulation
 
10 simulation
10 simulation10 simulation
10 simulation
 

Recently uploaded

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

21 Polishing

  • 1. Stat405 Polishing, continued Hadley Wickham Monday, 9 November 2009
  • 2. 1. Coming up next. 2. Project. 3. Colour scales 4. Themes. Monday, 9 November 2009
  • 3. Monday Wednesday Nov 9 Polishing Spam Nov 16 Posters / Project Spam Nov 23 Debugging Thanksgiving Professional Nov 30 development Poster pres Monday, 9 November 2009
  • 4. Project 3 Your turn to find an interesting data source and analyse it. Any data is acceptable but it needs to be large (>1,000 points). If you don’t have any ideas, try looking at http://delicious.com/hadley/data Monday, 9 November 2009
  • 5. Deliverables Poster. Single double-sided page handout, summarising the major findings on the poster. The R code used to clean the data and produce the plots. (No manual steps!) Monday, 9 November 2009
  • 6. Timeline Nov 17-19. Meet to discuss choice of data and initial analysis ideas. Data preparation. Nov 23-30. Review of draft poster (optional, but highly recommended). Dec 2. Final poster presentation. Turn in electronic copy of handout & code. Monday, 9 November 2009
  • 8. Tools Scales. Used to override default perceptual mappings, and tune parameters of axes and legends. Themes: control presentation of non-data elements. Monday, 9 November 2009
  • 9. Your turn Recall the four key parameters that all scales have in common. What are their names and what do they do? Monday, 9 November 2009
  • 10. p <- qplot(carat, price, data = diamonds, geom = "hex") # First argument (name) controls legend title p + scale_fill_continuous("Count") # Breaks and labels control legend keys p + scale_fill_continuous(breaks = c(1000, 3500, 7000)) p + scale_fill_continuous(breaks = c(0, 4000, 8000)) # Why don't 0 and 8000 have colours? p + scale_fill_continuous(breaks = c(0, 4000, 8000), limits = c(0, 8000)) # Can use labels to make more human readable breaks <- c(0, 2000, 4000, 6000, 8000) labels <- format(breaks, big.mark = ",") p + scale_fill_continuous(breaks = breaks, labels = labels, limits = c(0, 8000)) Monday, 9 November 2009
  • 11. Default colour scales Discrete: evenly spaced hues of equal chroma and luminance. No colour appears more important than any other. Does not imply order. Continuous: evenly spaced hues between two colours. Monday, 9 November 2009
  • 12. Alternatives Discrete: hue, brewer, manual Continuous: gradient, gradient2, gradientn Monday, 9 November 2009
  • 13. Color brewer Cynthia Brewer applied the basic principles and then rigorously tested the results to produce a selection of good palettes, particularly tailored for maps: http://colorbrewer2.org/ Can use cut_interval() or cut_number() to convert continuous to discrete. Monday, 9 November 2009
  • 14. # Fancy looking trigonometric function vals <- seq(-4 * pi, 4 * pi, len = 50) df <- expand.grid(x = vals, y = vals) df$r <- with(df, sqrt(x ^ 2 + y ^ 2)) df$z <- with(df, cos(r ^ 2) * exp(- r / 6)) df$z_cut <- cut_interval(df$z, 9) (p1 <- qplot(x, y, data = df, fill = z, geom = "tile")) (p2 <- qplot(x, y, data = df, fill = z_cut, geom = "tile")) Monday, 9 November 2009
  • 15. p1 + scale_fill_gradient(low = "white", high = "black") # Highlight deviations p1 + scale_fill_gradient2() p1 + scale_fill_gradient2(breaks = seq(-1, 1, by = 0.25), limits = c(-1, 1)) p1 + scale_fill_gradient2(mid = "white", low = "black", high = "black") p2 + scale_fill_brewer(pal = "Blues") Monday, 9 November 2009
  • 16. Your turn Read through the examples for scale_colour_brewer, scale_colour_gradient2 and scale_colour_gradientn. Experiment! Monday, 9 November 2009
  • 17. Colour blindness 7-10% of men are red-green colour “blind”. (Many other rarer types of colour blindness) Solutions: avoid red-green contrasts; use redundant mappings; test. I like color oracle: http://colororacle.cartography.ch Monday, 9 November 2009
  • 19. Visual appearance So far have only discussed how to get the data displayed the way you want, focussing on the essence of the plot. Themes give you a huge amount of control over the appearance of the plot, the choice of background colours, fonts and so on. Monday, 9 November 2009
  • 20. # Two built in themes. The default: qplot(carat, price, data = diamonds) # And a theme with a white background: qplot(carat, price, data = diamonds) + theme_bw() # Use theme_set if you want it to apply to every # future plot. theme_set(theme_bw()) # This is the best way of seeing all the default # options theme_bw() theme_grey() Monday, 9 November 2009
  • 21. Elements You can also make your own theme, or modify and existing. Themes are made up of elements which can be one of: theme_line, theme_segment, theme_text, theme_rect, theme_blank Gives you a lot of control over plot appearance. Monday, 9 November 2009
  • 22. Elements Axis: axis.line, axis.text.x, axis.text.y, axis.ticks, axis.title.x, axis.title.y Legend: legend.background, legend.key, legend.text, legend.title Panel: panel.background, panel.border, panel.grid.major, panel.grid.minor Strip: strip.background, strip.text.x, strip.text.y Monday, 9 November 2009
  • 23. p <- qplot(displ, hwy, data = mpg) + opts(title = "Bigger engines are less efficient") # To modify a plot p p + opts(plot.title = theme_text(size = 12, face = "bold")) p + opts(plot.title = theme_text(colour = "red")) p + opts(plot.title = theme_text(angle = 45)) p + opts(plot.title = theme_text(hjust = 1)) Monday, 9 November 2009
  • 24. Your turn Fix the overlapping y labels on this plot: qplot(reorder(model, hwy), hwy, data = mpg) Rotate the labels on these strips so they are easier to read. qplot(hwy, reorder(model, hwy), data = mpg) + facet_grid(manufacturer ~ ., scales = "free", space = "free") Monday, 9 November 2009