Rできれいな図を描く(棒グラフ)



2010

2011

2012

2013

2014

2015

1

149

136

133

122

118

144

2

174

132

154

111

126

152

データの読み込み(Excelからクリップボード経由で読み込む想定)

mydata <- read.table(file = "clipboard", header = T, check.names = F)

作図する

mymatrix <- t(t(mydata))
plot_data <- sweep(mymatrix, 2, apply(mymatrix, 2, sum), FUN = "/") * 100

mycol = c(rgb(235, 125, 50, maxColorValue = 255), rgb(200, 200, 200, maxColorValue = 255))

mybarplot <- function(x, ...) barplot(x,
                      ylim = c(0, 100),
                      yaxp = c(0,100,4),
                      cex.axis = 1.5,
                      cex.names = 1.5,
                      las = 1,
                      ...)

mybarplot(numeric(ncol(plot_data)))
abline(h = 50, col = "red", lwd = 4)
par(new = T)
mybarplot(plot_data, axes = F, col = mycol)
box()

cex.axis:y軸の文字の大きさ
cex.names:x軸の文字の大きさ
f:id:touch-sp:20171211212941p:plain:w500

おまけ(プロットエリアのみ塗りつぶす)

value <- as.numeric(apply(mydata,2,function(x)gsub(",","",x)))

mycol <- c(rep(rgb(90,155,215,maxColorValue=255),ncol(mydata)-1),"red")

plot(0,0,type="n",ylim=c(0,350000),xlim=c(0,1),ann=F,yaxs="i",xaxs="i",axes=F)
rect(0,0,1,350000,col = rgb(255, 245, 235, maxColorValue = 255))
abline(h=seq(50000,250000,50000),lty="dashed")
abline(h=300000,col="red",lwd=2,lty="dashed")
par(new=T)
barplot(value,names.arg=names(mydata),col=mycol,ylim=c(0,350000),las=1,cex.names=0.8,space=0.5)

f:id:touch-sp:20171212005600p:plain:w500

Rできれいな図を描く(折れ線グラフ)



2008

2009

2010

2011

2012

2013

2014

2015

A

43.30

44.50

43.60

44.30

44.20

43.80

43.50

43.70

B

22.80

21.90

21.00

20.20

19.40

18.80

17.80

16.90

C

10.60

10.70

11.70

11.80

12.30

13.10

14.20

14.20

データの読み込み(Excelからクリップボード経由で読み込む想定)

mydata <- read.table(file = "clipboard", header = T, row.names = 1, check.names = F)

作図する

x.axis <- names(mydata)

myplot <- function(x, ...) plot(x,
                   pch = 19,
                   ylim = c(0, 70),
                   type = "o",
                   ann = F,
                   yaxs = "i",
                   lwd = 4,
                   cex.axis = 1.5,
                   las = 1,
                   ...)

myplot(x.axis, mydata[1,], col = rgb(145, 90, 35, maxColorValue = 255))
par(new = T)
myplot(x.axis, mydata[2,], axes = F, col = rgb(0, 150, 215, maxColorValue = 255))
par(new = T)
myplot(x.axis, mydata[3,], axes = F, col = rgb(255, 0, 0, maxColorValue = 255))
abline(h = seq(0, 70, 10), lty = "dashed")

yaxs = "i":x軸の交点をy=0にする
las = 1:軸ラベルを水平に描く
f:id:touch-sp:20171211193107p:plain:w500

便利な利用方法

  • メタファイルとしてコピー
  • PowerPointに貼り付け
  • グループ化解除

おまけ(プロットエリアのみ塗りつぶす)

x.axis <- names(mydata)

myplot <- function(x, ...) plot(x,
                   pch = 19,
                   xlim = c(2007.8, 2015.2),
                   ylim = c(0, 70),
                   ann = F,
                   xaxs = "i",
                   yaxs = "i",
                   lwd = 4,
                   cex.axis = 1.5,
                   las = 1,
                   ...)

myplot(x.axis, mydata[1,], type = "n")
rect(2007.8, 0, 2015.2, 70, col = rgb(255, 245, 235, maxColorValue = 255))
abline(h = seq(0, 70, 10), lty = "dashed")

par(new = T)
myplot(x.axis, mydata[1,], axes = F, col = rgb(145, 90, 35, maxColorValue = 255), type = "o")

par(new = T)
myplot(x.axis, mydata[2,], axes = F, col = rgb(0, 150, 215, maxColorValue = 255), type = "o")

par(new = T)
myplot(x.axis, mydata[3,], axes = F, col = rgb(255, 0, 0, maxColorValue = 255), type = "o")

f:id:touch-sp:20171211223712p:plain:w500

補足

以下でも同じグラフが描ける

x.axis <- as.numeric(names(mydata))

x.max <- max(x.axis) + 0.2
x.min <- min(x.axis) - 0.2

mycol = c(rgb(145, 90, 35, maxColorValue = 255),
          rgb(0, 150, 215, maxColorValue = 255),
          rgb(255, 0, 0, maxColorValue = 255))


plot(0, 0, type = "n", xlim = c(x.min, x.max), ylim = c(0, 70),
     xlab = "", ylab = "",
     xaxs = "i", yaxs = "i",
     las = 1,
     cex.axis = 1.5)

rect(x.min, 0, x.max, 70, col = rgb(255, 245, 235, maxColorValue = 255))
abline(h = seq(0, 70, 10), lty = "dashed")

for (i in 1:length(x.axis)) {
    points(x.axis, mydata[i,], pch = 19, col = mycol[i], lwd = 4, type = "o", cex = 1.5)
    }

cex = 1.5:プロットを大きくしている

Rで横軸が時系列のグラフを書く

日付の場合

a <- as.Date(c("2017/4/15","2017/5/2","2017/8/31"))
b <- c(2,8,7)
par(xaxt="n")
plot(a,b,type="b",ylim=c(0,10),xlab="time",ylab="value")
par(xaxt="s")
axis.Date(1,at=seq(min(a),max(a),"month"),format="%m月%d日")

f:id:touch-sp:20171206123341p:plain:w400

時間の場合

a <- as.POSIXct(c("11:15","13:45","19:59"),format="%H:%M")
b <- c(2,8,7)
par(xaxt="n")
plot(a,b,type="b",ylim=c(0,10),xlab="time",ylab="value")
par(xaxt="s")
time_start <- as.POSIXct("00:00",format="%H:%M")
time_end <- as.POSIXct("24:00",format="%H:%M")
axis.POSIXct(1,at=seq(time_start,time_end,"hour"),format="%H時")

f:id:touch-sp:20171206170347p:plain:w400

クリップボードからグラフを作成

2017/5/5 2017/7/1 2017/10/28 2017/12/7
Value 1.2 1.3 2.0 1.9

Value <- read.table(file = "clipboard", header = T, sep = "\t", check.names = FALSE, row.names = 1)
Date <- as.Date(colnames(Value))
par(xaxt = "n")
plot(Date, Value, type = "b")
par(xaxt = "s")
axis.Date(1, at = seq(min(Date), max(Date), "month"), format = "%m月%d日")

f:id:touch-sp:20171208132202p:plain:w400

MXNet-1.0.0公開

ついにversion 1.0.0が公開された。
Windowsからもpipでインストール可能。
f:id:touch-sp:20171206172905p:plain

rmarkdownで表を書く

rmdファイル

---
title: "irisテーブル"
output: html_document
---

```{r}
head(iris)
```

---

```{r results="asis"}
print(xtable(head(iris)),type="html")
```

---

```{r results="asis"}
al <- rep("center",ncol(iris)+1)
print(xtable(head(iris), align = al), type = "html")
```

実行結果

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

print(xtable(head(iris)),type="html")
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.10 3.50 1.40 0.20 setosa
2 4.90 3.00 1.40 0.20 setosa
3 4.70 3.20 1.30 0.20 setosa
4 4.60 3.10 1.50 0.20 setosa
5 5.00 3.60 1.40 0.20 setosa
6 5.40 3.90 1.70 0.40 setosa

al <- rep("center",ncol(iris)+1)
print(xtable(head(iris), align = al), type = "html")
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.10 3.50 1.40 0.20 setosa
2 4.90 3.00 1.40 0.20 setosa
3 4.70 3.20 1.30 0.20 setosa
4 4.60 3.10 1.50 0.20 setosa
5 5.00 3.60 1.40 0.20 setosa
6 5.40 3.90 1.70 0.40 setosa

Rの結果をPDFに出力する (rmarkdown)

以前にも同様のことを書いた
touch-sp.hatenablog.com
今回は「rmarkdown」パッケージを使用する
PDF出力はWordで行う

rmdファイルを用意する(Markdown1.rmd)

---
output: word_document
---

```{r echo=FALSE}
print(title)
t.test(セトサ, バージーカラー, alternative = side, var.equal = F)
wilcox.test(セトサ, バージーカラー, alternative = side)
```

```{r echo=FALSE}
boxplot(セトサ, バージーカラー, names = c("セトサ", "バージーカラー"))
```

検定用ファイル

library(rmarkdown)
data(iris)
mydata <- iris

比較 <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")

for (hikaku in 1:length(比較)) {

    セトサ <- subset(mydata, Species == "setosa")[[比較[hikaku]]]
    バージーカラー <- subset(mydata, Species == "versicolor")[[比較[hikaku]]]

    if (mean(セトサ) > mean(バージーカラー)) side <- "greater"
    if (mean(セトサ) < mean(バージーカラー)) side <- "less"
    if (mean(セトサ) == mean(バージーカラー)) side <- "two.sided"

    title <- 比較[hikaku]

    render("Markdown1.rmd", output_file = paste(title,".docx",sep = ""))
}

WordのVBAを記載する

Sub 出力()

    Dim fd As Office.FileDialog

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

   With fd

      .AllowMultiSelect = True

      .Title = "Please select the file."

      .Filters.Clear
      .Filters.Add "Word", "*.docx"
      
      If .Show = True Then
       
        For lngCount = 1 To .SelectedItems.Count
            Selection.InlineShapes.AddOLEObject ClassType:="Word.Document.12", _
            FileName:=.SelectedItems(lngCount), LinkToFile:=False, DisplayAsIcon:=False
            Selection.EndKey unit:=wdStory
            If lngCount < .SelectedItems.Count Then
                Selection.InsertBreak Type:=wdPageBreak
            End If
        Next lngCount

        ThisDocument.ExportAsFixedFormat _
        OutputFileName:=ThisDocument.Path & "/" & "結果.pdf", _
        ExportFormat:=wdExportFormatPDF, _
        OpenAfterExport:=True, _
        Range:=wdExportAllDocument
        
        Application.Quit (wdDoNotSaveChanges)

      End If
   End With
End Sub

Windows10 で TFlearn を使う

環境

Windows 10 Pro 64bit
CPU only

TensorFlowをAnacondaの仮想環境にインストール

公式サイト通り

仮想環境に以下でTFlearnをいれる。

pip install tflearn

以下の4点が必要であった。

pip install Scipy
pip install h5py
pip install jupyter

こちらから以下をダウンロードしてインストール

pip install curses‑2.2‑cp35‑none‑win_amd64.whl


この本を購入したのでじっくり試そうと思う。

初めてのTensorFlow 数式なしのディープラーニング

初めてのTensorFlow 数式なしのディープラーニング