Lattice Graphics Tips


LatticeはRに標準添付のライブラリなので，どんな環境でも使えることが期待できる．

まずデータを準備する．`melt`を使うと扱いやすい形に変換できて便利．


```r
library(lattice)
library(reshape)
data(iris)
head(iris)
```

```
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
```

```r
melted.iris <- melt(iris)
```

```
## Using Species as id variables
```

```r
head(melted.iris)
```

```
##   Species     variable value
## 1  setosa Sepal.Length   5.1
## 2  setosa Sepal.Length   4.9
## 3  setosa Sepal.Length   4.7
## 4  setosa Sepal.Length   4.6
## 5  setosa Sepal.Length   5.0
## 6  setosa Sepal.Length   5.4
```

確率密度分布
------------


```r
sepal.length <- subset(melted.iris, variable="Sepal.Length")
print(densityplot(sepal.length$value, groups=sepal.length$Species, auto.key=T))
```

![densityplot.png](https://qiita-image-store.s3.amazonaws.com/0/56302/82730d23-bb28-953b-e24f-13bec8830149.png "densityplot.png")


### 凡例を横に並べる

```r
print(densityplot(sepal.length$value, groups=sepal.length$Species, auto.key=list(column=3)))
```

![densityplot2.png](https://qiita-image-store.s3.amazonaws.com/0/56302/4f1e571f-87ee-2158-80c4-5b0c962b0188.png "densityplot2.png")

### グリッドを入れる

panelを書く順番でグリッドが表に来るか裏に来るかが決まる．


```r
print(densityplot(sepal.length$value, groups=sepal.length$Species, auto.key=TRUE,
                  panel=function(...){panel.densityplot(...); panel.grid(h=-1, v=-1)}))
```

![densityplot3.png](https://qiita-image-store.s3.amazonaws.com/0/56302/330ff296-a8dc-c4c2-5195-ece280019eed.png "densityplot3.png")


### 色を変える

`col`で色を変えようとしても凡例の色が変わらないので，ちょっと手を入れる必要がある


```r
new.col <- rainbow(3)
par.settings <- list(superpose.line=list(col=new.col))

print(densityplot(sepal.length$value, groups=sepal.length$Species,
                  par.settings=par.settings, auto.key=TRUE))
```

![densityplot4.png](https://qiita-image-store.s3.amazonaws.com/0/56302/94d74992-7f86-db88-259a-7886dfbc32c7.png "densityplot4.png")

参考: http://www.magesblog.com/2012/12/changing-colours-and-legends-in-lattice.html

### 密度分布の下にある点を取り除く

点の数が多すぎると PDF にしたときに重くなってしまうので，取り除いてお
く．


```r
print(densityplot(sepal.length$value, groups=sepal.length$Species,
                  plot.points = FALSE, auto.key=TRUE))
```

![densityplot5.png](https://qiita-image-store.s3.amazonaws.com/0/56302/53835295-1250-446d-646a-06601490505b.png "densityplot5.png")

### 並べる

```r
print(densityplot(~melted.iris$value|factor(melted.iris$variable), groups=melted.iris$Species, auto.key=TRUE))
```

![densityplot6.png](https://qiita-image-store.s3.amazonaws.com/0/56302/47fdd6f0-b7ee-6706-2373-e6d986636171.png "densityplot6.png")

### 並べるけど，軸は独立させる

```r
print(densityplot(~melted.iris$value|factor(melted.iris$variable), groups=melted.iris$Species,
                  auto.key=TRUE, scales=list(x="free")))
```

![densityplot71.png](https://qiita-image-store.s3.amazonaws.com/0/56302/c8eac1ba-274d-4854-2823-e788dba68061.png "densityplot71.png")

```r
print(densityplot(~melted.iris$value|factor(melted.iris$variable), groups=melted.iris$Species,
                  auto.key=TRUE, scales=list(x="free", y="free")))
```

![densityplot72.png](https://qiita-image-store.s3.amazonaws.com/0/56302/996b606e-ca0e-1d71-62f4-7a9d64a4ba94.png "densityplot72.png")

平行線図
--------

線の数が多いときは`alpha`で薄くしておくと良い感じになる．


```r
parallelplot(~iris[1:4], alpha=0.4)
```

![parallelplot.png](https://qiita-image-store.s3.amazonaws.com/0/56302/674085a9-e221-3686-11eb-3a78c6df9736.png "parallelplot.png")

ここで，Min/MaxはPetal.Width, Petal.Length, Sepal.Width, Sepal.Length
のそれぞれで最大値，最小値が計算されている．なんらかの時間経過が見たい
ときなど，スケールが変わってしまっては困るときは要注意．上手い解決法が
分からないので，とりあえずアドホックな方法として最小値と最大値を全体に
いれることで対処している．


```r
iris.tmp <- data.frame(iris)[1:4]
iris.tmp["max",] <- rep(max(iris.tmp), times=dim(iris.tmp)[2])
iris.tmp["min",] <- rep(min(iris.tmp), times=dim(iris.tmp)[2])
parallelplot(~iris.tmp, alpha=0.4)
```

![parallelplot2.png](https://qiita-image-store.s3.amazonaws.com/0/56302/c7fe9774-be10-2346-b582-38eb40cb11f1.png "parallelplot2.png")