脳卒中左片麻痺になりました

twitter http://twitter.com/#!/ti5942

Screenshot01Screenshot02Screenshot03

・読み込めるテキストファイルのデータ形式
共通で読める形式は2つの数の組でセパレートは空白(space)
なお,plot fileでは先頭文字が#, % の行はコメント行ですが,DataVisualizationでは,#はエラーになる...

例えば,
# ではDVがエラーになるが...
Screenshot01Screenshot02Screenshot03






% のときは正常に完了します.
Screenshot01Screenshot02Screenshot03






【Data Visualization】

折れ線(line),曲線(smooth line),マークのみ(scatter)の3種類あり,座標も2種類(school box axes,scientific axes)自動でつけられる.
マーク付き折れ線のような重ね描きもできる.
Screenshot01Screenshot02Screenshot03

Screenshot01Screenshot02Screenshot03

また,座標軸のみの表示もできる.
Screenshot01


【plot file】

・指定なし→折れ線グラフ,マーク指定,マークのみ指定でDVと同じ形状のグラフが描ける
Screenshot01Screenshot02Screenshot03

Screenshot01Screenshot03


・座標軸等を描くのはちょっと面倒なので,DVの座標軸に重ね書きする.単位長さを一致させることが重要.
Screenshot01

x axis={ticks ={step=10},length=10cm,include value=100,label},

school book axesでは,原点を含めるので

x軸が0から100までで長さ10cmとるので1単位0.1cm

(もし100を含まなければ,xの最大値90で10cmだから1単位10/90cmで誤差がでる.)

だから


\begin{scope}[x=0.1cm]

【棒グラフ(ybar)を描こう!】

棒グラフとヒストグラム


Screenshot01Screenshot02



Rで作った度数分布表は

Screenshot01Screenshot02

これを以下のように変えました.

Screenshot01Screenshot02





【手順】
  1. 余白を削る.(tikzpictureの中に入れる(tabularをノードに入れる))
  2. 列位置調整
  3. キャプションを入れる
  4. 「列名」編集
  5. 「合計行」編集

1.standaloneクラスでも,previwパッケージでもtikzpicture環境に入れることで「余白」を削ることができる.

なお,(u)platexで「previwパッケージ」を使うには,「prdvipdfmx.def」が必要である.



また,編集不要なら,pdfcropや,テーブル環境ごとノードに入れてstandaloneクラスで処理してもいい(ミニページ環境が必要)と思う.

【pdfcrop】
Screenshot01Screenshot02


Screenshot03Screenshot01



【minipage+standalone】

Screenshot01Screenshot02






2.列位置をすべて右揃えにする.

Screenshot01Screenshot02





3.タイトルを表の上に置く.(タイトルの下に表を置く)

positioningライブラリを使う.

Screenshot01Screenshot02




【位置を変えてみる】

表:タイトルの上

Screenshot01Screenshot02





表:タイトルの右

Screenshot01Screenshot02





表:タイトルの左
Screenshot01Screenshot02





4.列名・編集

列名の背景をgray!80,列名をゴシック白文字にする.
\newcommand{\retumei}[]{\textcolor{white}{\textgt{#1}}}
Screenshot01Screenshot02




ありゃ,タイトルのフォーマット忘れている(^_^;)
Screenshot01Screenshot02




5.合計行・編集
Screenshot01Screenshot02








1.成績データ読み込み
(x <- as.numeric(read.table("../RSource/data/成績データ.txt")))

2.ヒストグラム作成

h <- hist(x,breaks = seq(15,95,10),include.lowest = TRUE,right = FALSE,
col = "cyan",main="成績ヒストグラム",xlab="成績",ylab="人数")

3.列編集

n <- length(h$mids)
(A <- h$breaks[0:n])
(B <- h$breaks[1:n+1])
(C <- h$mids)
(D <- h$counts)
(E <- h$density*10)
(F <- E*100)

4.データフレーム作成

(DF <- data.frame(A,B,C,D,E,F))
Screenshot01


5.列名(日本語)セット
colnames(DF)<- c("以上","未満","階級値","度数","相対度数","百分率")
print(DF)

6.合計行
(S <- apply(DF, 2, sum))

7.元のデータフレームに合計行をいれる.
(DF <- rbind(DF,S))
Screenshot01

8.百分率編集

DF$百分率 <- sprintf("%.0f%%",DF$百分率)

9.
DF$以上[9] <- ""
DF$未満[9] <- ""
DF$階級値 <- "合計"
Screenshot01


なんとか準備完了!







Screenshot01Screenshot02

ひとつのデータ・フレームを作成すればいいだろう.

合計行は後で考えることのして,

Screenshot01Screenshot02




まず,各列を編集し,それらを束ねてデータフレームDFを作成して,
最後に日本語の列名をセットする.

このデータを表示すると,表形式になっているので,これをLaTeX形式に変換して画面表示させる.

ライブラリxtableを呼び出して関数xtable()を使う.
画面表示データをテキストファイルに出力する関数がsink(”ファイル名”)で,使い終わったらsink()で終了処理を行う.
***
library(xtable)
sink("/home/ti5942/R/WD/tex/度数分布表.table")
xtable(DF,caption = "度数分布表")
sink()
***

こんな感じである.これで,captionは表の下につけられる.表の上につけるには直接TeXコードを修正するしかないかも...

注意.tikzpicture環境はフロート環境(table環境,figure環境)内に入れることはできるが,tikzpicture環境内にフロート環境を入れることはNGなんだが...
standaloneクラスならミニページ環境にフロート環境(table環境,figure環境)を入れることでtikzpicture環境のノードに入れることができます.(previewパッケージはNG)

standaloneクラスはOKで,previewパッケージはNG
Screenshot01Screenshot02

ミニページ環境を外すとどちらもエラーになる
Screenshot01Screenshot02

table環境を外す,すなわちtabular環境ならどちらもOK
Screenshot01Screenshot02


さて,カッコつきは扱いにくいので,パーセント表示(百分率)は別の列にして書き直す.
ついでにF列以外は数字項目にした
Screenshot01

Screenshot01
ありゃ,「以上」「未満」「階級値」を整数表示にしたいんだけど...

Screenshot01

これでいいのかなあ?

Screenshot01

おお,なんか見えてきたぞ\(^o^)/

1.standaloneクラスではTikZノードのオプションに「text width」が使えないみたいだ(;´д`)トホホ…
QTikZでそれrを示そう.

・previewパッケージを使ったテンプレートの例

template_luaP.pgf(QTikZのテンプレート)
Screenshot01Screenshot02

・standaloneクラスを使ったテンプレートの例


template_luaS.pgf(QTikZのテンプレート)
Screenshot01Screenshot02


実行
Screenshot01Screenshot02

テンプレートがtemplate_luaP.pgfのときは
   
「プロセスが正常に完了しました。
だが,template_luaS.pgfのとき

     Use of \@iminipage doesn't match its

というエラーが出る.


2.standaloneクラスなら,ノード内でミニページ環境を入れるとテーブル環境が使える!
Screenshot01Screenshot02

テンプレートがtemplate_luaS.pgfのときは
   
「プロセスが正常に完了しました。 」
だが,template_luaP.pgfのとき

     LaTeX Error: Not in outer par mode.

というエラーが出る.

なお,ミニページ環境を外すとtemplate_luaS.pgfでもエラーになる.

Screenshot01


3.QTikZ:standaloneクラスとpreviewパッケージとで,日本語縦書き部分の出方が違う.(^_^;)

Screenshot01Screenshot02

Screenshot01
Rを使えば,50個のデータから度数分布表を作らないでも即ヒストグラムが描けるけど...
ここでは,階級が10〜100まで10点刻みで,各範囲の個数は?
Screenshot01

> h$counts
[1]  3  4  3  8  8 12  9  2  1

だから,データxをソートして区切ってみると

> sort(x)
 [1] 15 18 20 23 25 25 30 | 35 40 40 | 45 45 46 46 48 50 50 50 | 55 55 56 57
[23] 58 60 60 60 | 62 62 63 63 65 65 65 67 67 70 70 70 | 75 75 75 78 78 78
[45] 79 79 80 | 85 90 | 95

aとbの間のデータというのは a < x[i] ≦ b (aより大きくてb以下)ということがわかる

ところが教科書をみてみると
DSC_0024


階級の区切りが15〜95の10刻みで範囲が以上未満になってる.
加えて「95点のデータ」は85点以上95点未満に入れますとなってる.(^_^;)

そこでhist関数のヘルプをみてみると

Screenshot01Screenshot02

ということで,とりあえず次のように描き変えた.

Screenshot01

yラベルを「縦書き」にするにはtikzコード化してから.

【tikzコード化】
library(tikzDevice)
tikz("tex/tikz/成績ヒストグラム.tikz")
hist(x,breaks = seq(15,95,10),right=F,col = "cyan",
     main="成績ヒストグラム",xlab="成績",ylab="人数")
dev.off()
訂正
library(tikzDevice)
tikz("tex/tikz/成績ヒストグラム.tikz")
hist(x,breaks = seq(15,95,10),right=F,col = "cyan",
     main="成績ヒストグラム",xlab="成績",ylab="人数")
dev.off()

これなら「警告メッセージ」は出ない
Screenshot01

QTikZで見てみる
Screenshot01Screenshot02
standaloneクラス,previewパッケージどちらのテンプレートでも大丈夫みたいだ.

注意.
QtikZでファイル保存すると日本語部分が文字化けする.

Pandocでも試してみる
とりあえず,別名「成績ヒストグラム1.tikz」で保存する.

【lualatex】
pandoc-luaP
Screenshot01Screenshot02


pandoc-luaS
Screenshot01Screenshot02



【uplatex】
Pandoc-uplatexP
Screenshot01Screenshot02Screenshot03




Pandoc-uplatexS

Screenshot01Screenshot02Screenshot03


standaloneクラスのときはワーニングが出る...

実はどちらもjsarticleクラス
Screenshot01Screenshot02

これをbxjsarticleクラスにするとどうなるか?
Screenshot01Screenshot02

Screenshot01Screenshot02Screenshot03




Pandoc-uplatexPbx
Screenshot01Screenshot02Screenshot03


Pandoc-uplatexSbx
Screenshot01Screenshot02Screenshot03



ありゃ,どちらもjsarticleのときと同じ結果だな.当然か...


y軸ラベルとラベルを縦書きに修正
Screenshot01Screenshot02Screenshot03




QTikZでラベルの大きさと位置を調整して,PNG形式でエクスポート(ブログにアップするため)
Screenshot01成績ヒストグラム1
なお,QTikZのテンプレートをpreviewパッケージのもの(template_luaP.pgs)にすると縦書きの「人数」が横になる...
Screenshot01Screenshot02


Pandocの場合はどうだろうか?

このページのトップヘ