Top Banner
Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole (Nova Gorica, oktober 2016) Najprej namestimo knjižnjico openair : library("openair", lib.loc="/usr/local/lib/R/site-library") 6.1 Prepoznavanje in spreminjanje časovnega zapisa a) V R uvozite oba podatkovna niza. bilje.meteo <- read.delim("bilje-meteo-primeri.txt") go.air <- read.csv("NG-air-primeri.csv") b) Uredite imena stolpcev za oba podatkovna okvirja. names(bilje.meteo)[1:9] <- c("date","p","T","rh","rain","ws","wd","glob.rad","diff.rad") c) Uredite časovni zapis - pretvorite zapis časa v pravilen format, nastavite čas v UTC. bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date, format = "%Y-%m-%d %H:%M"), tz="Etc/GMT-1") bilje.meteo$date.UTC <- strftime(bilje.meteo$date, format = "%Y-%m-%d %H:%M", tz = "GMT") bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date.UTC, format = "%Y-%m-%d %H:%M"), tz = "GMT") go.air$date <- as.POSIXct(strptime(go.air$date, format = "%Y-%m-%d %H:%M:%S"), tz = "Etc/GMT-1") go.air$date.UTC <- strftime(go.air$date, format = "%Y-%m-%d %H:%M", tz = "GMT") go.air$date <- as.POSIXct(strptime(go.air$date.UTC, format = "%Y-%m-%d %H:%M"), tz = "GMT") 6.2 Urejanje in združevanje podatkov a) Najpej za oba podatkovna okvirja uskladite časovni korak. Urejene podatke shranite v nov podatkovni okvir. bilje.meteo.1h <- timeAverage(bilje.meteo, avg.time = "1 hour") 1
15

Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

May 29, 2018

Download

Documents

dinhmien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

Uvodni tečaj v analizo okoljskih podatkov:Praktični primeri

dr. Asta Gregorič, Maruška Mole (Nova Gorica, oktober 2016)

Najprej namestimo knjižnjico openair :

library("openair", lib.loc="/usr/local/lib/R/site-library")

6.1 Prepoznavanje in spreminjanje časovnega zapisa

a) V R uvozite oba podatkovna niza.

bilje.meteo <- read.delim("bilje-meteo-primeri.txt")go.air <- read.csv("NG-air-primeri.csv")

b) Uredite imena stolpcev za oba podatkovna okvirja.

names(bilje.meteo)[1:9] <- c("date","p","T","rh","rain","ws","wd","glob.rad","diff.rad")

c) Uredite časovni zapis - pretvorite zapis časa v pravilen format, nastavite čas v UTC.

bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date, format = "%Y-%m-%d %H:%M"),tz="Etc/GMT-1")

bilje.meteo$date.UTC <- strftime(bilje.meteo$date, format = "%Y-%m-%d %H:%M", tz = "GMT")bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date.UTC, format = "%Y-%m-%d %H:%M"),

tz = "GMT")

go.air$date <- as.POSIXct(strptime(go.air$date, format = "%Y-%m-%d %H:%M:%S"),tz = "Etc/GMT-1")

go.air$date.UTC <- strftime(go.air$date, format = "%Y-%m-%d %H:%M", tz = "GMT")go.air$date <- as.POSIXct(strptime(go.air$date.UTC, format = "%Y-%m-%d %H:%M"),

tz = "GMT")

6.2 Urejanje in združevanje podatkov

a) Najpej za oba podatkovna okvirja uskladite časovni korak. Urejene podatke shranite v nov podatkovniokvir.

bilje.meteo.1h <- timeAverage(bilje.meteo, avg.time = "1 hour")

1

Page 2: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

summary(bilje.meteo.1h)

## date p T## Min. :2015-08-31 23:00:00 Min. : 983 Min. :-7.75## 1st Qu.:2015-12-01 10:45:00 1st Qu.:1005 1st Qu.: 7.35## Median :2016-03-01 22:30:00 Median :1010 Median :12.95## Mean :2016-03-01 22:30:00 Mean :1010 Mean :13.35## 3rd Qu.:2016-06-01 10:15:00 3rd Qu.:1015 3rd Qu.:19.10## Max. :2016-08-31 22:00:00 Max. :1031 Max. :34.55## NA's :28 NA's :28## rh rain ws wd## Min. : 22.67 Min. : 0.00000 Min. :0.000 Min. : 0.00## 1st Qu.: 57.50 1st Qu.: 0.00000 1st Qu.:0.900 1st Qu.: 90.55## Median : 82.00 Median : 0.00000 Median :1.350 Median :102.26## Mean : 75.92 Mean : 0.07585 Mean :1.969 Mean :138.30## 3rd Qu.: 95.17 3rd Qu.: 0.00000 3rd Qu.:2.700 3rd Qu.:196.97## Max. :100.00 Max. :19.80000 Max. :9.500 Max. :360.00## NA's :17 NA's :26 NA's :26## glob.rad diff.rad## Min. : 0.0 Min. : 0.00## 1st Qu.: 0.0 1st Qu.: 0.00## Median : 5.5 Median : 5.25## Mean : 152.5 Mean : 63.47## 3rd Qu.: 227.4 3rd Qu.: 94.50## Max. :1016.5 Max. :620.00## NA's :8 NA's :6

summary(go.air)

## date PM10 O3## Min. :2016-01-31 23:00:00 Min. : 0.00 Min. : 0.00## 1st Qu.:2016-02-23 09:15:00 1st Qu.: 12.50 1st Qu.: 19.68## Median :2016-03-17 01:30:00 Median : 19.70 Median : 43.35## Mean :2016-03-16 22:28:59 Mean : 22.09 Mean : 46.54## 3rd Qu.:2016-04-08 11:45:00 3rd Qu.: 29.80 3rd Qu.: 68.92## Max. :2016-04-30 22:00:00 Max. :137.60 Max. :129.90## NA's :117 NA's :510## NO NO2 NOx date.UTC## Min. : 1.40 Min. : 1.60 Min. : 2.20 Length:2150## 1st Qu.: 4.20 1st Qu.: 9.90 1st Qu.: 14.30 Class :character## Median : 6.80 Median :17.00 Median : 23.50 Mode :character## Mean : 13.86 Mean :20.35 Mean : 32.73## 3rd Qu.: 14.78 3rd Qu.:27.90 3rd Qu.: 41.30## Max. :132.40 Max. :76.80 Max. :179.50## NA's :348 NA's :369 NA's :447

b) Izvozite podatke s spremenjenim časovnim korakom v .csv datoteko.

write.csv(bilje.meteo.1h, file = "bilje-meteo-1h.csv", row.names = FALSE)

2

Page 3: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

c) Združite podatkovna okvirja po času v skupen podatkovni okvir.

meteo.air <- merge(bilje.meteo.1h, go.air, by = "date", all = TRUE)

d) Iz združenih podatkov izločite podatke od 1. 2. 2016 do 30. 4. 2016 in izrišite povzetek za izločenepodatke.

meteo.air.pomlad <- selectByDate(meteo.air, start = "1/2/2016", end = "30/4/2016")

summaryPlot(meteo.air.pomlad, period = "months", par.settings=list(fontsize=list(text=8)))

date

Feb 01 Feb 15 Mar 01 Mar 15 Apr 01 Apr 15

missing = 0 (0%)min = 983max = 1024

mean = 1006.4median = 1007

95th percentile = 1018

100 % 100 % 100 %

p

missing = 0 (0%)min = −2max = 22.8

mean = 9.9median = 9.6

95th percentile = 18.8

100 % 100 % 100 %

T

missing = 0 (0%)min = 27.5max = 100

mean = 74.7median = 78.9

95th percentile = 98.3

100 % 100 % 100 %

rela

tive

hum

idity

missing = 0 (0%)min = 0max = 7.2

mean = 0.1median = 0

95th percentile = 0.5

100 % 100 % 100 %

rain

missing = 0 (0%)min = 0max = 9.5

mean = 2.4median = 1.7

95th percentile = 6.5

100 % 100 % 100 %

win

d sp

d.

missing = 0 (0%)min = 1.4max = 360

mean = 143.3median = 103.7

95th percentile = 294.6

100 % 100 % 100 %

win

d di

r.

missing = 0 (0%)min = 0max = 931

mean = 130.1median = 3.5

95th percentile = 646.6

100 % 100 % 100 %

glob

.rad

missing = 0 (0%)min = 0max = 496.5

mean = 64.9median = 3.5

95th percentile = 288.5

100 % 100 % 100 %

diff.

rad

missing = 127 (5.9%)min = 0max = 137.6

mean = 22.1median = 19.7

95th percentile = 45.7

94.7 % 88.2 % 99.7 %

PM

10

missing = 521 (24.1%)min = 0max = 129.9

mean = 46.6median = 43.4

95th percentile = 101.7

80 % 56 % 92.4 %

O3

missing = 359 (16.6%)min = 1.4max = 132.4

mean = 13.8median = 6.8

95th percentile = 52

88.1 % 93.7 % 68.2 %

NO

missing = 380 (17.6%)min = 1.6max = 76.8

mean = 20.3median = 17

95th percentile = 46.1

84.8 % 94 % 68.2 %

NO

2

missing = 458 (21.2%)min = 2.2max = 179.5

mean = 32.7median = 23.5

95th percentile = 90.5

76.6 % 93.8 % 65.4 %

NO

x

value

Per

cent

of T

otal

010

990 1000 1010 1020

010

0 5 10 15 20

010

40 60 80 100

060

0.0 0.5 1.0 1.5

015

0 2 4 6

020

0 100 200 300

040

0 200 400 600 800

040

0 100 200 300 400

010

0 10 20 30 40 50 60

06

0 20 40 60 80 100

030

0 20 40 60 80

010

0 10 20 30 40 50

020

0 50 100

3

Page 4: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

6.3 Analiza in prikaz meteoroloških podatkov

a) Izrišite časovni potek vremenskih parametrov za celotno obdobje (pozorni bodite na imena osi in zapisenot).

timePlot(meteo.air, pollutant = c("p","T","rh","glob.rad","rain"),date.format = "%d/%m", key.columns = 3,name.pol = c("p (hPa)",expression("T (" * degree * "C)"),"RH (%)",

expression("glob. sevanje (W m" ^-2 * ")"),"padavine (mm)"), strip = FALSE, ylab = "Vremenske spremenljivke",

par.settings=list(fontsize=list(text=10)))

Vre

men

ske

spre

men

ljivk

e

990

1000

1010

1020

1030

0

10

20

30

20

40

60

80

100

0

200

400

600

800

1000

0

5

10

15

20

01/10 01/01 01/04 01/07

p (hPa)T (°C)

RH (%)glob. sevanje (W m−2)

padavine (mm)

4

Page 5: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

b) Prikažite razmerje med temperaturo in relativno vlažnostjo, grupirano po posameznih mesecih.

scatterPlot(meteo.air, x = "rh", y = "T", group = "month",xlab = "RH (%)", ylab = expression("T (" * degree * "C)"),key.title = "Mesec",cex = 0.8)

RH (%)

T (

°C)

0

10

20

30

20 40 60 80 100

Mesec January February March April May June July August September October November December

c) Prikažite razmerje med temperaturo in relativno vlažnostjo glede na sončno obsevanje za obdobja, koni padavin.

scatterPlot(subset(meteo.air, rain == 0), x = "T", y = "rh", z = "glob.rad",main = "Odvisnost relativne vlaznosti od temperature zraka \n glede na soncnosevanje",xlab = expression("T (" * degree * "C)"), ylab = "RH (%)",key.title = "Glob. sevanje", cex = 0.6)

Odvisnost relativne vlaznosti od temperature zraka

glede na soncno sevanje

T (°C)

RH

(%

)

20

40

60

80

100

0 10 20 30

0

200

400

600

800

1000

5

Page 6: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

d) Prikažite razmerje med temperaturo in relativno vlažnostjo glede na sončno obsevanje za vsa opazovanjav aprilu 2016 med 12. in 16. uro po lokalnem času.

scatterPlot(selectByDate(meteo.air, hour = 10:14, month = 5),x = "T", y = "rh", z = "glob.rad",main = "Odvisnost RH od T zraka glede na soncno sevanje (april, od 12:00 do16:00)",xlab = expression("T (" * degree * "C)"), ylab = "RH (%)",key.title = "Glob. sevanje")

Odvisnost RH od T zraka glede na soncno sevanje

(april, od 12:00 do 16:00)

T (°C)

RH

(%

)

40

60

80

15 20 25

100

200

300

400

500

600

700

800

900

1000

6

Page 7: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

e) Veter prikažite z vetrovno rožo po posameznih sezonah.

windRose(meteo.air, angle = 45, ws.int = 1, breaks = 7, paddle = F,annotate = F, main = "Vetrovna roza",key = list(height = 1),type = "season")

Vetrovna roza

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

spring (MAM)

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

summer (JJA)

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

autumn (SON)

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

winter (DJF)

0 to 1 1 to 2 2 to 3 3 to 4 4 to 5 5 to 6 6 to 9.5

(m s−1)

7

Page 8: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

f) Prikažite povprečen dnevni potek hitrosti vetra.

dnevni.ws <- timeVariation(meteo.air, pollutant = "ws", local.tz = "Europe/Ljubljana",type = "season", ylab = expression("ws (m s" ^-1 * ")"),xlab = c("ura","ura","mesec","dan"),sub = " povprecna vrednost in 95% interval zaupanja",par.settings=list(fontsize=list(text=8)))

ura

ws

(m s

−1)

12345

Monday

sprin

g (M

AM

)

0 6 12 18 23

Tuesday Wednesday

0 6 12 18 23

Thursday Friday

0 6 12 18 23

Saturday Sunday

sum

mer

(JJ

A)

12345

12345

autu

mn

(SO

N)

0 6 12 18 23

win

ter

(DJF

)

0 6 12 18 23 0 6 12 18 23 0 6 12 18 23

12345

wind spd.

ura

ws

(m s

−1)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

spring (MAM)

0 6 12 18 23

summer (JJA)

0 6 12 18 23

autumn (SON)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

winter (DJF)

mesec

ws

(m s

−1)

1.0

1.5

2.0

2.5

3.0

spring (MAM)

J FMAMJ J ASOND

summer (JJA)

J FMAMJ J ASOND

autumn (SON)

1.0

1.5

2.0

2.5

3.0

winter (DJF)

dan

ws

(m s

−1)

1.5

2.0

2.5

3.0spring (MAM)

MonTueWedThuFriSatSun

summer (JJA)

MonTueWedThuFriSatSun

autumn (SON)

1.5

2.0

2.5

3.0winter (DJF)

povprecna vrednost in 95% interval zaupanja

8

Page 9: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

print(dnevni.ws, subset = "hour")

ura

ws

(m s

−1)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

spring (MAM)

0 6 12 18 23

summer (JJA)

0 6 12 18 23

autumn (SON)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

winter (DJF)

wind spd.

9

Page 10: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

6.4 Analiza in prikaz podatkov o kakovosti zraka

a) Prikažite časovni potek parametrov kakovosti zraka za obdobje februar - april.

timePlot(meteo.air.pomlad, pollutant = c("PM10", "O3","NO","NO2","NOx"),ylab = expression("(" * mu * "g m" ^-3 * ")"), key = FALSE,date.format = "%d/%m", date.breaks = 20)

(µg

m−3

)

0

50

100

PM

10

0

50

100

O3

0

50

100

NO

0

20

40

60

80

NO

2

0

50

100

150

01/02 08/02 15/02 22/02 29/02 07/03 14/03 21/03 28/03 04/04 11/04 18/04 25/04

NO

x

10

Page 11: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

b) Prikažite potek koncentracij PM10 in O3 za obdobje 9. 4. 2016 do 12. 4. 2016.

timePlot(selectByDate(meteo.air.pomlad, start = "9/4/2016", end = "12/4/2016"),pollutant = c("PM10", "O3"), group = T,ylab = expression("O"[3] * ", PM"[10] * " (" * mu * "g m" ^-3 * ")"),date.format = "%d/%m", date.breaks = 20)

Koncentracija O3 in PM10 (9. − 12. 4. 2016)

O3,

PM

10 (

µg m

−3)

0

20

40

60

80

100

120

09/04/1600:00

09/04/1612:00

10/04/1600:00

10/04/1612:00

11/04/1600:00

11/04/1612:00

12/04/1600:00

12/04/1612:00

PM10 O3

11

Page 12: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

c) Prikažite povprečen dnevni potek koncentracij PM10 in O3 v lokalnem času.

timeVariation(meteo.air.pomlad, pollutant = c("O3","PM10"),local.tz = "Europe/Ljubljana", xlab = c("ura","ura","mesec","dan"),sub = " povprecna vrednost in 95% interval zaupanja",par.settings=list(fontsize=list(text=8)))

ura

O3,

PM

10

20

40

60

80

100

0 6 12 18 23

Monday

0 6 12 18 23

Tuesday

0 6 12 18 23

Wednesday

0 6 12 18 23

Thursday

0 6 12 18 23

Friday

0 6 12 18 23

Saturday

0 6 12 18 23

Sunday

O3 PM10

ura

O3,

PM

10

20

30

40

50

60

70

80

0 6 12 18 23

mesec

O3,

PM

10

30

40

50

J F M A M J J A S O N D

dan

O3,

PM

10

20

30

40

50

Mon Tue Wed Thu Fri Sat Sun

povprecna vrednost in 95% interval zaupanja

12

Page 13: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

dnevni.plini <- timeVariation(meteo.air.pomlad,pollutant = c("NO","NO2", "NOx", "O3"),local.tz = "Europe/Ljubljana",xlab = c("ura","ura","mesec","dan"),sub = " povprecna vrednost in 95% interval zaupanja",type = "month",par.settings=list(fontsize=list(text=8)))

ura

NO

, NO

2, N

Ox,

O3 0

50

100

150

Monday

Feb

ruar

y

0 6 12 18 23

Tuesday Wednesday

0 6 12 18 23

Thursday Friday

0 6 12 18 23

Saturday Sunday

Mar

ch

0

50

100

150

0

50

100

150

0 6 12 18 23

Apr

il

0 6 12 18 23 0 6 12 18 23 0 6 12 18 23

NO NO2 NOx O3

ura

NO

, NO

2, N

Ox,

O3

20

40

60

80

100

February

0 6 12 18 23

March

0 6 12 18 23

20

40

60

80

100

April

mesec

NO

, NO

2, N

Ox,

O3

10

20

30

40

50

60

February

J FMAM J J A SOND

March

J FMAM J J A SOND

10

20

30

40

50

60

April

dan

NO

, NO

2, N

Ox,

O3 20

40

60

February

MonTueWedThuFri SatSun

March

MonTueWedThuFri SatSun

20

40

60

April

povprecna vrednost in 95% interval zaupanja

13

Page 14: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

print(dnevni.plini, subset = "hour")

ura

NO

, NO

2, N

Ox,

O3

20

40

60

80

100

February

0 6 12 18 23

March

0 6 12 18 23

20

40

60

80

100

April

NO NO2 NOx O3

d) Prikažite povprečen dnevni potek koncentracij NO, NO2, NOx in O3.

scatterPlot(meteo.air.pomlad, x = "ws", y = "PM10", type = "wd",main = "Odvisnost PM10 od smeri in hitrosti vetra",xlab = expression("Hitrost vetra (m s" ^-1 * ")"),ylab = expression("PM"[10] * " (" * mu * "g m" ^-3 * ")"))

Odvisnost PM10 od smeri in hitrosti vetra

Hitrost vetra (m s−1)

PM

10 (

µg m

−3)

0

50

100

NW

0 2 4 6 8

N NE

W

0

50

100

E

0

50

100

0 2 4 6 8

SW S

0 2 4 6 8

SE

14

Page 15: Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

e) Prikažite odvisnost koncentracij PM10 od hitrosti vetra glede grupirano po smeri vetra.

polarPlot(meteo.air.pomlad,pollutant = "PM10")

0

2

4 ws

6

8

10

W

S

N

E

mean

PM10

10

15

20

25

f) Prikažite razmerje med NO2, NOx in NO pri različnih koncentracijah O3.

scatterPlot(meteo.air.pomlad, x = "NOx", y = "NO2", z = "NO", type = "O3",main = "Razmerje med NO2, NOx in NO pri razlicnih koncentracijah O3")

Razmerje med NO2, NOx in NO pri razlicnih koncentracijah O3

NOx

NO

2 0

20

40

60

O3 0 to 19.8

0 50 100 150

O3 19.8 to 43.4

0 50 100 150

O3 43.4 to 69

0

20

40

60

O3 69 to 130

20

40

60

80

100

120

15