Boxplots von Projektionen



Ähnliche Dokumente
Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Erwin Grüner

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Linienland, Flächenland und der Hyperraum Ein Ausflug durch die Dimensionen

Graphic Coding. Klausur. 9. Februar Kurs A

Hochschule München, FK 03 FA SS Ingenieurinformatik

Computer Vision I. Nikos Canterakis. Lehrstuhl für Mustererkennung, Universität Freiburg

Die Größe von Flächen vergleichen

QM: Prüfen -1- KN

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Optimierung von Heizungsanlagen. Hydraulischer Abgleich Arbeitsweise der Software

STATISTIK. Erinnere dich

Grundlagen der Videotechnik. Redundanz

Primzahlen und RSA-Verschlüsselung

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Das Mathematik-Abitur im Saarland

Hinweise zur Kalibrierung von Kameras mit einer AICON Kalibriertafel

2) Geben Sie in der Anmeldemaske Ihren Zugangsnamen und Ihr Passwort ein

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Behörde für Bildung und Sport Abitur 2008 Lehrermaterialien zum Leistungskurs Mathematik

Plotten von Linien ( nach Jack Bresenham, 1962 )

Mind Mapping am PC. für Präsentationen, Vorträge, Selbstmanagement. von Isolde Kommer, Helmut Reinke. 1. Auflage. Hanser München 1999

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Korrelation (II) Korrelation und Kausalität

Welche Lagen können zwei Geraden (im Raum) zueinander haben? Welche Lagen kann eine Gerade bezüglich einer Ebene im Raum einnehmen?

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

6.2 Scan-Konvertierung (Scan Conversion)

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

CTI SYSTEMS S.A. CTI SYSTEMS S.A. 12, op der Sang. Fax: +352/ L Lentzweiler. G.D.

Übung Theoretische Grundlagen

2. Deskriptive Statistik 2.1. Häufigkeitstabellen, Histogramme, empirische Verteilungsfunktionen

Konzepte der Informatik

2. Mathematik Olympiade 2. Stufe (Kreisolympiade) Klasse 7 Saison 1962/1963 Aufgaben und Lösungen

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Statuten in leichter Sprache

Zeichen bei Zahlen entschlüsseln

Grundlagen der Technischen Informatik. Sequenzielle Netzwerke. Institut für Kommunikationsnetze und Rechnersysteme. Paul J. Kühn, Matthias Meyer

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Installationsanleitung FRITZ!BOX Fon 7270

Bestimmung einer ersten

1. Allgemein Speichern und Zwischenspeichern des Designs Auswahl der zu bearbeitenden Seite Text ergänzen Textgrösse ändern 3

Im Jahr t = 0 hat eine Stadt Einwohner. Nach 15 Jahren hat sich die Einwohnerzahl verdoppelt. z(t) = at + b

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Feiertage in Marvin hinterlegen

Kapitel MK:IV. IV. Modellieren mit Constraints

Wärmebildkamera. Arbeitszeit: 15 Minuten

1 C H R I S T O P H D R Ö S S E R D E R M A T H E M A T I K V E R F Ü H R E R

Verfasser: M. Krokowski, R. Dietrich Einzelteilzeichnung CATIA-Praktikum. Ableitung einer. Einzelteilzeichnung. mit CATIA P2 V5 R11

Elektrischer Widerstand

Erster Prüfungsteil: Aufgabe 1

Kosten-Leistungsrechnung Rechenweg Optimales Produktionsprogramm

Bruchrechnung Wir teilen gerecht auf

Festigkeit von FDM-3D-Druckteilen

Lösung. Prüfungsteil 1: Aufgabe 1

Frohe Weihnachten und ein gutes neues Jahr!

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Angebot. UVV-Prüfungen und Wartungen von mobilen Abfallpressen

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Java-Programmierung mit NetBeans

Teaser-Bilder erstellen mit GIMP. Bildbearbeitung mit GIMP 1

Kontrollstrukturen und Funktionen in C

Abiturprüfung Mathematik 2008 (Baden-Württemberg) Berufliche Gymnasien ohne TG Analysis, Aufgabe 1

Bitte wenden. Name: KURSARBEIT NR. 4 (10 DIFF GA) Seite 1

Funktionaler Zusammenhang. Lehrplan Realschule


Gleichungen Lösen. Ein graphischer Blick auf Gleichungen

Softwareentwicklungspraktikum Sommersemester Grobentwurf

Versand Etiketten / Endlosdruck

GS-Buchhalter/GS-Office 2015 Saldovorträge in folgenden Wirtschaftsjahren erfassen

Geometrische Optik. Ausserdem gilt sin ϕ = y R. Einsetzen in die Gleichung für die Brennweite ergibt unmittelbar: sin 2 ϕ

Bundesverband Flachglas Großhandel Isolierglasherstellung Veredlung e.v. U g -Werte-Tabellen nach DIN EN 673. Flachglasbranche.

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Biostatistik, WS 2015/2016 Der zwei-stichproben-t-test

affilinet_ Flash-Spezifikationen

Grundbegriffe Brechungsgesetz Abbildungsgleichung Brechung an gekrümmten Flächen Sammel- und Zerstreuungslinsen Besselmethode

Professionelle Seminare im Bereich MS-Office

Ihr Ideen- & Projektmanagement-Tool

Anleitung über den Umgang mit Schildern

Statistische Auswertung:

So wird s gemacht - Nr. 24

Klausur: Wirtschaftsingenieurwesen Prof. Dr. Ruf Informationsmanagement (Diplom) WS 2007/08

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Angebot. UVV-Prüfungen und Wartungen von mobilen Abfallpressen

3D-Konstruktion Brückenpfeiler für WinTrack (H0)

Daten sammeln, darstellen, auswerten

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Algorithmentheorie Maximale Flüsse

Lineare Gleichungssysteme

In diesem Bereich wird beschrieben, wie Sie eine Datensicherung der Software Jack Plus durchführen können.

Energetische Klassen von Gebäuden

Neuigkeiten beim Desktop von Windows

( ) als den Punkt mit der gleichen x-koordinate wie A und der

Dokumentation. estat Version 2.0

15.3 Bedingte Wahrscheinlichkeit und Unabhängigkeit

Grundlagen der Theoretischen Informatik, SoSe 2008

Rock-Band. Einleitung. Scratch. In diesem Projekt lernst du, wie du deine eigenen Musikinstrumente programmieren kannst! Activity Checklist

Quadratische Funktionen (Parabeln)

Transkript:

Boxplots von Projektionen H. P. Wolf Version: 11.04.06, formatiert: September 26, 2014, file: sc.rev 1 Gegenstand In diesem Papier wird die Funktion boxplot2d definiert. Mit dieser läßt sich in einen Scatterplot eines zweidimensionalen Datensatzes zu einer beliebigen Projektion der Daten ein Boxplots erstellen und geeignet im Scatterplot der Daten anbringen. 2 Definition von boxplot2d Die Syntax der Funktion ergibt sich aus Kopfzeile wie aus den ersten Kommentarzeilen der Funktion: 1 start 1 boxplot2d<-function( xy, add.to.plot=true, box.size=10, box.shift=0, angle=0, angle.type="0", tukey.style=true, coef.out=1.5, coef.h.out=3, design="sl", na.rm=false,... ){ ########################################################################## # boxplot for scatterplots, pw 03/05 # # xy: 2-col matrix # # add.to.plot: if TRUE => plot(xy,...) # # box.size: height of box in mm # # box.shift: shift of boxplot in mm # # angle: direction of projection in units defined by angle.type # # angle.type: "0"= angle, # angle in (0,2*pi) # # "1"=2*pi*angle/12, # clock-like # # "2"=2*pi*angle/360, # angle in (0,360) # # "3"=arctan(angle) # by fraction: delta.y/delta.x # # tukey.style: if TRUE outliers are defined as described in Tukey (1977): EDA # coef.out=1.5 # outliers are defined outside coef.out*boxwidth # coef.h.out=3 # heavy outliers are defined outside coef.h.out*boxwidth # design: if "sl" then parallelogram else box # ########################################################################## if(any(is.na(xy))){ if(na.rm){ xy<-xy[!apply(is.na(xy),1,any),,drop=false] print("warning: NAs elements have been removed!!") else{ xy.means<-colmeans(xy,na.rm=true) for(j in 1:ncol(xy)) xy[is.na(xy[,j]),j]<-xy.means[j] print("warning: NAs elements have been exchanged by mean values!!") zeichne ggf. Scatterplot 3 konstruiere Rotationsmatrix TM mittels angle und angle.type 4 ermittle Quantile der gedrehten Daten und retransformiere: xy.q 5 berechne für Box Vektor für Boxhöhe: real.step 6 realisiere gewünschte Verschiebung 9 erstelle Boxplot 10 1

# end of boxplot2d 2 definiere Hilfe von boxplot2d 2 \name{boxplot2d \alias{boxplot2d \title{ Boxplot of projection of two dimensional data \description{ boxplot2d computes summary statistics of a one dimensional projection of a two dimensional data set and plots a sloped boxplot of the statistics into the scatterplot of the two dimensional data set. \usage{ boxplot2d(xy, add.to.plot = TRUE, box.size = 10, box.shift = 0, angle = 0, angle.type = "0", tukey.style = TRUE, coef.out = 1.5, coef.h.out = 3, design = "sl", na.rm=false,...) \arguments{ \item{xy{ \code{(nx2)-matrix, two dimensional data set \item{add.to.plot{ if \code{true the boxplot is added to the actual plot of the graphics device \item{box.size{ height of the box (of the boxplot) \item{box.shift{ shift of boxplot perpendicular to the projection direction \item{angle{ direction of projection in units defined by angle.type \item{angle.type{ \code{"0": angle in (0,2*pi), \code{"1": clock-like: angle.typ.0==2*pi*angle.typ.1/12, \code{"2": degrees: angle.typ.0==2*pi*angle.typ.2/360, \code{"3": by fraction: delta.y/delta.x \item{tukey.style{ if \code{true outliers are defined as described in Tukey (1977) \item{coef.out{ outliers are values that are more than \code{coef.out*boxwidth away from the box, default: \code{coef.out=1.5 \item{coef.h.out{ heavy outliers are values that are more than \code{coef.h.out*boxwidth away from the box, default: \code{coef.h.out=3 \item{design{ if \code{sl then parallelogram else box \item{na.rm{ if TRUE NA values are removed otherwise exchanged by mean \item{\dots{ additional graphical parameters \references{ Tukey, J. \emph{exploratory Data Analysis. Addison-Wesley, 1977. \author{peter Wolf \note{ version 08/2003 \seealso{ \code{\link[graphics]{boxplot \examples{ xy<-cbind(1:100, (1:100)+rnorm(100,,5)) par(pty="s") plot(xy,xlim=c(-50,150),ylim=c(-50,150)) boxplot2d(xy,box.shift=-30,angle=3,angle.typ=1) 2

boxplot2d(xy,box.shift=20,angle=1,angle.typ=1) boxplot2d(xy,box.shift=50,angle=5,angle.typ=1) par(pty="m") \keyword{misc Ohne Kommentar. 3 zeichne ggf. Scatterplot 3 1 if(!add.to.plot) plot(xy,...) Benötigt wird eine (2,2)-Rotationsmatrix TM. 4 konstruiere Rotationsmatrix TM mittels angle und angle.type 4 1 if(is.numeric(angle.type)){ angle.type<-as.character(angle.type) if(all(angle.type!=c("0","1","2","3"))) angle.type<-"0" w <- switch(angle.type, "0"= angle, "1"=2*pi*(3-angle)/12, "2"=2*pi*angle/360, "3"=atan(angle) ) TM <- matrix(c(cos(w),sin(w),-sin(w),cos(w)),2,2) Als Standardposition wird der Rerotierte Median der rotierten y-werte verwendet. Nach Tukey: Die Rolle der Quartile übernehmen die Angeln (hinges), ihr Abstand heißt Angelabstand (H-Spread). Ein Schritt (step) ist das Produkt H-Spread factor z.b. mit factor=coef.default==1.5 inner fence: [lower hinge step, upper hinge +step] Ausreißer: (upper hinge + step, upper hinge + 2step]= (upper hinge + 1.5 H-Spread, upper hinge + 3 H- Spread] =(fence, fence + 1.5 H-Spread] sowie entsprechend links. heavy outliers: (fence+1.5h-spread, unendlich) sowie entsprechend links. 5 ermittle Quantile der gedrehten Daten und retransformiere: xy.q 5 1 xyt<- xy %*% TM ##ermittle empirsche Quantile##= z <- xyt[,1] z.stats1 <- boxplot.stats(z,coef=coef.out) z.stats2 <- boxplot.stats(z,coef=coef.h.out) z<-c(min(z),z.stats1$stats,max(z)) names(z) <- c("min","fence","hinge","median","hinge","fence","max") outlier.heavy <- z.stats2$out outlier <- z.stats1$out outlier <- outlier[! outlier %in% outlier.heavy ] else{ z <- c(min(z),quantile(z,c(0.10, 0.25, 0.5, 0.75, 0.90)),max(z)) names(z)<-c("min", ".1", ".25",".5",".75",".9", "max") xy.q <- cbind(z,median(xyt[,2])) %*% t(tm) xy.out<-if(0<length(outlier)) cbind(outlier,median(xyt[,2])) %*% t(tm) else numeric(0) xy.out.heavy<-if(0<length(outlier.heavy)) cbind(outlier.heavy,median(xyt[,2])) %*% t(tm) else numeric(0) Die Ermittlung eines Höhenvektors für die Box ist gar nicht so einfach. Außerdem werden zwei Designs verfolgt. Soll sich das Erscheinungsbild der Box, wie auch immer die Weltkoordinaten sind und welche Größenverhältnisse der graphische Device aufweist, durch ein Rechteck auszeichnen? Dieses wird erreicht durch design!="sl". Angemessener für viele Probleme werden jedoch parallelogrammförmige Boxen sind, die auch bei einer Veränderung des Device sich entsprechend mitändern und im Weltkoordinatensystem immer Rechtecke sind. Das Parallelgramm soll dann mit jenem übereinstimmen, daß sich einstellt, wenn bei einem quadratischen Device und gleichen Bereichen für x und y der Device gestreckt wird. Für die Berechnung des Boxhöhenvektors sind auf jeden Fall erforderlich: Spannweiten der Wertebereiche der Weltkoordinaten d.xy, Spannweiten des Viewports in Weltkoordinaten d.usr und Maße der Viewports in mm d.pmm. 3

d. für delta deutet auf Differenzen zwischen maximalen und minimalen Werten hin. 6 berechne für Box Vektor für Boxhöhe: real.step 6 1 # d. steht fuer delta.: d.xy <-apply(xy.q[c(1,7),], 2,diff) d.usr<-apply(matrix(par()$usr,2,2),2,diff) d.pmm<-par()$pin*25.4 if(design=="sl"){ ermittle Boxhöhenvektor real.step für schräges Design 7 else{ ermittle Boxhöhenvektor real.step für Box-Design 8 In der schrägen Form wird im Weltkoordinatensystem ein Boxplot erstellt und in die geeignete Position gebracht, was in der Regel zu schrägen Erscheinungsbildern führen wird. Im Weltkoordinatensystem liegt jedoch ein Rechteck vor. Zu beachten ist, daß die gewünschte Boxhöhe in mm angegeben wird. Was ist zu tun? Zunächst wird zu einem Vektor, der entlang des Boxplots zeigt, ein in Weltkoordinaten senkrechter Vektor d.xy.s.mm konstruiert und im mm-koordinaten überführt. Dann wird ein Einheitsvektor senkrecht zu Verlauf des Boxplots in mm-koordinaten d.xy.0.s erstellt. d.xy.s.mm zeigt in die gewünschte Richtung und muß proportional zu dem Wunsch box.size verlängert werden. Vorher ist jedoch d.xy.s.mm so zu strecken, daß seine Projektion auf d.xy.0.s einen Einheitsvektor ergibt, und deshalb durch die Länge der Projektion zu teilen: d.xy.s.mm.proj1. Zum Schluß ist eine Retransformation in Weltkoordinaten notwendig. 7 ermittle Boxhöhenvektor real.step für schräges Design 7 6 # d.xy.s.mm: bzgl. Welt-coor senkrechten Vektor in mm-coor d.xy.s.mm <- (c(-1,1)*rev(d.xy))/d.usr*d.pmm # d.xy.0.s: bzgl. mm-coor senkrechten Einheits-Vektor d.xy.mm.s <- c(-1,1)*rev( d.xy/d.usr*d.pmm ) d.xy.0.s <- d.xy.mm.s/(d.xy.mm.s%*%d.xy.mm.s)^0.5 # Streckung von d.xy.s.mm so, dass Projektion auf d.xy.0.s von Laenge 1 d.xy.s.mm.proj1 <- d.xy.s.mm / (d.xy.s.mm %*% d.xy.0.s) # Boxsize: in mm real.step.mm <- box.size * d.xy.s.mm.proj1 # Darstellung in Welt-coor real.step <- real.step.mm/d.pmm*d.usr Die Idee für das Box-Design ist etwas einfacher. Nehme den Vektor, der längs des Boxplots zeigt (d.xy), transformiere diesen in mm-koordinaten und ermittle den zugehörigen senkrechten Vektor. Verlängere diesen Boxhöhenvektor gemäß der gewünschten box.size. Retransformiere Höhenvektor in Weltkoordinaten. 8 ermittle Boxhöhenvektor real.step für Box-Design 8 6 # Einheitsvektor zu d.xy in mm-coor d.xy.mm <- d.xy/d.usr*d.pmm d.xy.mm.ev<- d.xy.mm/(d.xy.mm%*%d.xy.mm)^0.5 # Konstruktion eines Boxhoehenvektors der Laenge box.size in mm mm.step <- box.size*c(-1,1)*rev(d.xy.mm.ev) # Darstellung in Welt-coor real.step <- mm.step/d.pmm*d.usr # real.step fuer Boxdickenvektor Der gewünschte Shift verhält sich zur gewünschten Boxdicke wie der realisierte Shift zur realisierten Boxdicke. Folglich ergibt sich der zu realisierende Shift durch Multiplikation der gewünschten Shiftes mit dem Quotienten aus realisiertem real.step und gewünschter Dicke. 9 realisiere gewünschte Verschiebung 9 1 # Boxshift: in mm real.shift<-box.shift*real.step/box.size xy.q.orig <- xy.q xy.q <-cbind(xy.q[,1]+real.shift[1], xy.q[,2]+real.shift[2]) if(0<length(xy.out)) xy.out<-cbind(xy.out[,1]+real.shift[1], xy.out[,2]+real.shift[2]) if(0<length(xy.out.heavy)) 4

xy.out.heavy<-cbind(xy.out.heavy[,1]+real.shift[1], xy.out.heavy[,2]+real.shift[2]) Mit Hilfe der transformierten Quantile xy.q und des halben vertikalen Boxhöhen-Vektors hs ermittelt aus real.step ist die Erstellung der Boxplot kein großes Problem mehr. Die Extrema werden durch Punkte und nicht durch Striche dargestellt, da sie andernfalls aufgrund perspektivischer Verzerrungen eher zu Fehlinterpretationen verleiten würden. Der Code für Abschlußstriche ist jedoch in Kommentarzeilen vermerkt worden. 10 erstelle Boxplot 10 1 # Boxplotkonstruktion hs<-real.step/2 xyxy <-c( #min:xy.q[1,1]-hs[1],xy.q[1,2]-hs[2],xy.q[1,1]+hs[1],xy.q[1,2]+hs[2], xy.q[2,1],xy.q[2,2],xy.q[3,1],xy.q[3,2], xy.q[3,1]-hs[1],xy.q[3,2]-hs[2],xy.q[5,1]-hs[1],xy.q[5,2]-hs[2], xy.q[3,1]-hs[1],xy.q[3,2]-hs[2],xy.q[3,1]+hs[1],xy.q[3,2]+hs[2], xy.q[4,1]-hs[1],xy.q[4,2]-hs[2],xy.q[4,1]+hs[1],xy.q[4,2]+hs[2], xy.q[5,1]-hs[1],xy.q[5,2]-hs[2],xy.q[5,1]+hs[1],xy.q[5,2]+hs[2], xy.q[3,1]+hs[1],xy.q[3,2]+hs[2],xy.q[5,1]+hs[1],xy.q[5,2]+hs[2], xy.q[6,1],xy.q[6,2],xy.q[5,1],xy.q[5,2] #max,xy.q[7,1]-hs[1],xy.q[7,2]-hs[2],xy.q[7,1]+hs[1],xy.q[7,2]+hs[2] ) xyxy<-matrix(xyxy,length(xyxy)/4,4,true) segments(xyxy[,1],xyxy[,2],xyxy[,3],xyxy[,4]) if(0<length(xy.out)) points(xy.out[,1],xy.out[,2],pch=1,cex=1.5) if(0<length(xy.out)) points(xy.out[,1],xy.out[,2],pch=18) if(0<length(xy.out.heavy)) points(xy.out.heavy[,1],xy.out.heavy[,2],pch=19,cex=1.5) else{ points(xy.q[c(1,7),1],xy.q[c(1,7),2],pch=19) 3 Einige Demo-Aufrufe 11 * 11 x<-y<-rcauchy(50); plot(x,y);boxplot2d(cbind(x,y),angle=0,angle.type="0") 12 demos 12 data(co2) plot(co2,xlim=c(1940,2030),ylim=c(300,400)) h<-lsfit(time(co2),co2) abline(h) boxplot2d(cbind(time(co2),co2),angle=h$coef[2],angle.type="3", box.shift=5,box.size=10,design=0) data(co2) plot(co2,xlim=c(1940,2030),ylim=c(300,400)) h<-lsfit(time(co2),co2) abline(h) boxplot2d(cbind(time(co2),co2),angle=h$coef[2],angle.type="3", box.shift=10,box.size=10,design="sl") 5

xx<-(1:50); yy<-10*xx+sort(rnorm(50,,30)) bs<-10;bsh<-20;ang<-9;at<-"3" plot(xx,yy,xlim=c(-50,100),ylim=c(-200,700)) boxplot2d(cbind(xx,yy),angle=ang,angle.type=at,box.size=bs,design=0) boxplot2d(cbind(xx,yy),angle=ang,angle.type=at,box.size=bs,box.shift=bsh,design=0) boxplot2d(cbind(xx,yy),angle=-ang,angle.type=at,box.size=bs) boxplot2d(cbind(xx,yy),angle=-ang,angle.type=at,box.size=bs,box.shift=-bsh) xxx<-c(-80,-30,xx,95,140) plot(xxx,xxx,xlim=c(-200,200),ylim=c(-200,200)) boxplot2d(cbind(xxx,xxx),angle=ang,angle.type=at,box.size=bs,box.shift=-bsh) #boxplot2d(cbind(xx,yy),angle=60,angle.type=at,box.size=30) #boxplot2d(cbind(xx,yy),angle=30,angle.type=at,box.shift=bsh,box.size=30) co2 300 320 340 360 380 400 1940 1960 1980 2000 2020 Time 6