2014/03/22からのアクセス回数 7118 ここで紹介したSageワークシートは、以下のURLからダウンロードできます。 http://www15191ue.sakura.ne.jp:8000/home/pub/39/ また、Sageのサーバを公開しているサイト(http://www.sagenb.org/, http://www15191ue.sakura.ne.jp:8000/)にユーザIDを作成することで、ダウンロードしたワークシートを アップロードし、実行したり、変更していろいろ動きを試すことができます。 RグラフィックスクックブックをSageで試してみる †Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集 にでている例題をpython版ggplotで試し、ggplotでサポートしていない部分はRのggplot2をSageから操作してプロットしてみました。 Sageでデータをプロットするときに参考にしてください。 sageへの入力: # Rの必要なライブラリ #r("install.packages('ggplot2')") r('library(ggplot2)') #r("install.packages('gcookbook')") r('library(gcookbook)') # RUtilでjsonliteを使用するため、未インストールならインストールが必要 #r("install.packages('jsonlite')") # Pythonパッケージのインポート import pandas as pd import numpy as np from ggplot import * # RUtilにRとPandasのデータフレームを相互に変換する関数を追加 load(DATA + 'RUtil.py') 連続値をカテゴリに変換する †Pandasを使って連続値の区間で区切って処理する方法の紹介です。知っていると便利です。 sageへの入力: age = np.array([20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]) sex = np.array(['F', 'M', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M']) df = pd.DataFrame({'age': age, 'sex': sex}) df age sex 0 20 F 1 22 M 2 25 M 3 27 M 4 21 F 5 23 M 6 37 F 7 31 M 8 61 F 9 45 M 10 41 F 11 32 M [12 rows x 2 columns] sageへの入力: # カテゴリ分けする区切り値 bins = [18, 25, 35, 60, 100] cat_names = ['youth', 'YoungAdult', 'MiddleAged', 'Senior'] df['bins'] = pd.cut(df.age, bins, labels=cat_names) df.head() age sex bins 0 20 F youth 1 22 M youth 2 25 M youth 3 27 M YoungAdult 4 21 F youth [5 rows x 3 columns] ここからプロット例 †sageへの入力: # gcookbookのサンプルデータからheightweightを取得する heightweight = RDf2PandaDf("heightweight") heightweight.head() ageMonth ageYear heightIn sex weightLb 0 143 11.92 56.3 f 85.0 1 155 12.92 62.3 f 105.0 2 153 12.75 63.3 f 108.0 3 161 13.42 59.0 f 92.0 4 191 15.92 62.5 f 112.5 [5 rows x 5 columns] sageへの入力: heightweight.tail() ageMonth ageYear heightIn sex weightLb 231 164 13.67 66.5 m 112.0 232 189 15.75 65.0 m 114.0 233 164 13.67 61.5 m 140.0 234 167 13.92 62.0 m 107.5 235 151 12.58 59.3 m 87.0 [5 rows x 5 columns] sageへの入力: # Rec.2.1 散布図を作成する ggplot(mtcars, aes(x='wt', y='mpg')) + geom_point() <ggplot: (8125969)> sageへの入力: ggsave('Rec.2.1.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.2.2 折れ線グラフを作成する # 単純なデータなら以下の様にRから持ってくることもできる pressure = pd.DataFrame(sageobj(r('pressure'))['DATA']) pressure.head() pressure temperature 0 0.0002 0 1 0.0012 20 2 0.0060 40 3 0.0300 60 4 0.0900 80 [5 rows x 2 columns] sageへの入力: ggplot(pressure, aes(x='temperature', y='pressure')) +geom_line() + geom_point() <ggplot: (8165273)> sageへの入力: ggsave('Rec.2.2.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.2.3 棒グラフを作成する # cylは連続値なので、factorで離散として扱う ggplot(mtcars, aes(x='factor(cyl)')) +geom_bar() <ggplot: (8361829)> sageへの入力: ggsave('Rec.2.3.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.2.4 ヒストグラムを作成する ggplot(mtcars, aes(x='mpg')) + geom_histogram(binwidth='4') <ggplot: (8371409)> sageへの入力: ggsave('Rec.2.4.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rの結果と異なる! graph = preGraph("fig2.4.png") r('p <- ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4)') r('plot(p)') postGraph(graph) sageへの入力: # ToothGrowthデータをRから持ってくる ToothGrowth = RDf2PandaDf('ToothGrowth') ToothGrowth.head() dose len supp 0 0.5 4.2 VC 1 0.5 11.5 VC 2 0.5 7.3 VC 3 0.5 5.8 VC 4 0.5 6.4 VC [5 rows x 3 columns] sageへの入力: # Rec.2.5 箱ひげ図を作成する # geom_boxplotはまだ実装されていないみたい # ggplot(ToothGrowth, aes(x='interaction(supp, dose)', y='len')) + geom_boxplot() sageへの入力: #ggsave('Rec.2.4.png', dpi=50) sageへの入力: graph = preGraph("fig2.5.png") r('p <- ggplot(ToothGrowth, aes(x=interaction(supp, dose), y=len)) + geom_boxplot()') r('plot(p)') postGraph(graph) sageへの入力: # Rec.2.6 関数曲線をプロットする # stat_functionはまだ実装されていないみたい graph = preGraph("fig2.6.png") r('myfun <- function(xvar){ 1/(1 + exp(-xvar + 10)) }') r('p <- ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")') r('plot(p)') postGraph(graph) sageへの入力: # Rec.3.1 棒グラフを作成する pg_mean = pd.DataFrame({'group':['ctrl', 'trt1', 'trt2'], 'weight': [5.032, 4.661, 5.526]}) pg_mean.head() group weight 0 ctrl 5.03200000000000 1 trt1 4.66100000000000 2 trt2 5.52600000000000 [3 rows x 2 columns] sageへの入力: ggplot(pg_mean, aes(x='group', weight='weight')) + geom_bar() <ggplot: (8711265)> sageへの入力: ggsave('Rec.3.1.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # R版と指定方法が異なるので graph = preGraph("fig3.1.png") r('p <- ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity")') r('plot(p)') postGraph(graph) sageへの入力: # Fig3-2 BOD = RDf2PandaDf("BOD") BOD.head() Time demand 0 1 8.3 1 2 10.3 2 3 19.0 3 4 16.0 4 5 15.6 [5 rows x 2 columns] sageへの入力: # ggplotの場合、factor(Time)のようにプロットされる ggplot(BOD, aes(x='Time', weight='demand')) + geom_bar(stat="identity") <ggplot: (8711273)> sageへの入力: ggsave('fig.3.2a.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: ggplot(BOD, aes(x='factor(Time)', weight='demand')) + geom_bar(stat="identity") <ggplot: (8836749)> sageへの入力: ggsave('fig.3.2b.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Fig3-3 ggplot(pg_mean, aes(x='group', weight='weight')) + geom_bar(stat="identity", fill="lightblue", colour="black") <ggplot: (8980677)> sageへの入力: ggsave('fig.3.3.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.3.2 棒をグループ化する cabbage_exp = pd.DataFrame({'Cultivar': ['c39', 'c39', 'c39', 'c52', 'c52', 'c52'], 'Date': ['d16', 'd20', 'd21', 'd16', 'd20', 'd21'], 'Weight': [3.18, 2.8, 2.74, 2.26, 3.11, 1.47]}) cabbage_exp Cultivar Date Weight 0 c39 d16 3.18000000000000 1 c39 d20 2.80000000000000 2 c39 d21 2.74000000000000 3 c52 d16 2.26000000000000 4 c52 d20 3.11000000000000 5 c52 d21 1.47000000000000 [6 rows x 3 columns] sageへの入力: # 横並びができない。d20の積み重ねの色が変? #ggplot(cabbage_exp, aes(x='factor(Date)', weight='Weight', colour='Cultivar')) + geom_bar(position='dodge') ggplot(cabbage_exp, aes(x='factor(Date)', weight='Weight', colour='Cultivar')) + geom_bar() <ggplot: (8710225)> sageへの入力: ggsave('Rec.3.2.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.3.2 棒をグループ化 graph = preGraph("fig3.4.png") r('p <- ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) + geom_bar(position="dodge")') r('plot(p)') postGraph(graph) sageへの入力: # Rec.3.3 個数を示す棒グラフを作成する ggplot(diamonds, aes(x='cut')) + geom_bar() <ggplot: (9117985)> sageへの入力: ggsave('Rec.3.3.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.3.4 色つきの棒グラフを作成する r('upc <- subset(uspopchange, rank(Change)>40)') graph = preGraph("Rec.3.4.png") r('p <- ggplot(upc, aes(x=Abb, y=Change, fill=Region)) + geom_bar(stat="identity")') r('plot(p)') postGraph(graph) sageへの入力: # Rec.3.5 棒の正負によって色を塗り分ける # 値が正か負を示すpos列をデータフレームに追加する r('csub <- subset(climate, Source=="Berkeley" & Year >= 1900)') r('csub$pos <- csub$Anomaly10y >= 0') r('head(csub)') Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y pos 101 Berkeley 1900 NA NA -0.171 0.108 FALSE 102 Berkeley 1901 NA NA -0.162 0.109 FALSE 103 Berkeley 1902 NA NA -0.177 0.108 FALSE 104 Berkeley 1903 NA NA -0.199 0.104 FALSE 105 Berkeley 1904 NA NA -0.223 0.105 FALSE 106 Berkeley 1905 NA NA -0.241 0.107 FALSE sageへの入力: graph = preGraph("Rec.3.5.png") r('p <- ggplot(csub, aes(x=Year, y=Anomaly10y, fill=pos)) + geom_bar(stat="identity", position="identity")') r('plot(p)') postGraph(graph) sageへの入力: # Rec.3.6 棒の幅と間隔を調整する # 最大の幅1.0 # 指定が効かない ggplot(pg_mean, aes(x='group', weight='weight')) + geom_bar(stat="identity", width='1.0') <ggplot: (8826161)> sageへの入力: ggsave('Rec.3.6.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.3.7 積み上げ棒グラフを作成する graph = preGraph("Rec.3.7.png") r('p <- ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) + geom_bar(stat="identity")') r('plot(p)') postGraph(graph) sageへの入力: # Rec.3.8 100%積み上げ棒グラフ(Practical Data Science版) graph = preGraph("Rec.3.8.png") r('p <- ggplot(cabbage_exp) + geom_bar(aes(x=Date, y=Weight, fill=Cultivar), position="fill")') r('plot(p)') postGraph(graph) sageへの入力: # Rec.3.9 棒グラフにラベルを追加する vjustでラベルの位置を調整 # python版はダメ # ggplot(cabbage_exp, aes(x='factor(Date)', weight='Weight')) + geom_bar() + geom_text(aes(y='Weight', label='Weight')) graph = preGraph("Rec.3.9.png") r('p <- ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar) , y=Weight)) + geom_bar(stat="identity")+ geom_text(aes(label=Weight, vjust=1.5, colour="white"))') r('plot(p)') postGraph(graph) sageへの入力: #ggsave('Rec.3.9.png', dpi=50) sageへの入力: # geom_textは実装されているが、文字列のプロットのみをサポート ggplot(aes(x='wt', y='mpg', label='name'), data=mtcars) + \ geom_text() <ggplot: (8987329)> sageへの入力: ggsave('test1.0.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.3.10 クリーブランドのドットプロットを作成する r('tophit <- tophitters2001[1:25,]') # tophitters2001から上位25名を抽出 graph = preGraph("Rec.3.10.png") r('p <- ggplot(tophit, aes(x=avg , y=name)) + geom_point()') r('plot(p)') postGraph(graph) sageへの入力: # PDSの手法で、X軸とY軸を入れ替えてみる graph = preGraph("fig-3.29.png") r('p <- ggplot(tophit, aes(x=avg , y=name)) + geom_point(size=3) + coord_flip() + theme(axis.text.x=element_text(angle=60, hjust=1))') r('plot(p)') postGraph(graph) sageへの入力: # Rec.4.1 基本的な折れ線グラフを作成する(Python版) ggplot(BOD, aes(x='Time', y='demand')) + \ geom_line() <ggplot: (9320477)> sageへの入力: ggsave('Rec.4.1.0.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec4.2 折れ線グラフに点を追加する(Python版) ggplot(BOD, aes(x='Time', y='demand')) + \ geom_line() + geom_point() <ggplot: (9824733)> sageへの入力: ggsave('Rec.4.2.0.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Y軸を対数表示を加える(Python版) worldpop = RDf2PandaDf("worldpop") sageへの入力: ggplot(worldpop, aes(x='Year', y='Population')) + \ geom_line() + geom_point() + scale_y_log() <ggplot: (9329829)> sageへの入力: ggsave('fig-4.5.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.4.3 複数の線を持つ折れ線グラフを作成する(Python版) r('library(plyr)') # ToothGrowthデータを要約する r('tg <- ddply(ToothGrowth, c("supp", "dose"), summarise, length=mean(len))') supp dose length 1 OJ 0.5 13.23 2 OJ 1.0 22.70 3 OJ 2.0 26.06 4 VC 0.5 7.98 5 VC 1.0 16.77 6 VC 2.0 26.14 sageへの入力: tg = RDf2PandaDf("tg") sageへの入力: ggplot(tg, aes(x='dose', y='length', colour='supp')) + \ geom_line() <ggplot: (9823801)> sageへの入力: ggsave('Rec.4.3.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.4.4 線の体裁を変更する(Python版) Rではlinetypeで線種を指定 ggplot(BOD, aes(x='Time', y='demand')) + \ geom_line(linestyle="dashed", color="blue") <ggplot: (10373117)> sageへの入力: ggsave('Rec.4.4.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.4.5 点の体裁を変更する(Python版) R版とはsizeの単位が異なる、記号の形(shape=22)とfillは指定不可 ggplot(BOD, aes(x='Time', y='demand')) + geom_line() + \ geom_point(size=100, color="darkred") <ggplot: (10838649)> sageへの入力: ggsave('Rec.4.5.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.4.6 網掛け領域付きのグラフを作成する (Python版未完成) r('sunspotyear <- data.frame(Year = as.numeric(time(sunspot.year)), Sunspots = as.numeric(sunspot.year))') sunspotyear = RDf2PandaDf('sunspotyear'); sunspotyear.head() Sunspots Year 0 5 1700 1 11 1701 2 16 1702 3 23 1703 4 36 1704 [5 rows x 2 columns] sageへの入力: ggplot(sunspotyear, aes(x="Year", y="Sunspots")) + geom_line() <ggplot: (10382145)> sageへの入力: ggsave('Rec.4.6.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # R版 graph = preGraph("fig-4.17.png") r('p <- ggplot(sunspotyear, aes(x=Year, y=Sunspots)) + geom_area()') r('plot(p)') postGraph(graph) sageへの入力: # Rec.4.7 積み上げ面グラフを作成する(ダメ) uspopage = RDf2PandaDf('uspopage'); print uspopage.head() ggplot(uspopage, aes(x="Year", y="Thousands", fill="AgeGroup")) + geom_area() AgeGroup Thousands Year 0 <5 9181 1900 1 5-14 16966 1900 2 15-24 14951 1900 3 25-34 12161 1900 4 35-44 9273 1900 [5 rows x 3 columns] Traceback (most recent call last): File "<stdin>", line 1, in <module> ... KeyError: 'ymin' sageへの入力: ggsave('Rec.4.7.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # R版 graph = preGraph("fig-4.20.png") r('p <- ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) + geom_area() ') r('plot(p)') postGraph(graph) sageへの入力: # Rec.4.9 信頼区間の領域を追加する # Anomaly10y: 1950~1980年までの平均気温からの偏差の10年移動平均 # Unc10y: 95%の信頼区間 r('clim <- subset(climate, Source == "Berkeley", select=c("Year", "Anomaly10y", "Unc10y"))') clim = RDf2PandaDf('clim') sageへの入力: # 上限、下限の線で代用 up_line = pd.DataFrame({ 'y': (clim.Anomaly10y + clim.Unc10y).tolist(), 'x': clim.Year.tolist()}) lw_line = pd.DataFrame({ 'y': (clim.Anomaly10y - clim.Unc10y).tolist(), 'x': clim.Year.tolist()}) sageへの入力: ggplot(clim, aes(x="Year", y="Anomaly10y")) + \ geom_line() + \ geom_line(aes(x="x", y="y"), linestyle="dashed", color="blue", data=up_line) + \ geom_line(aes(x="x", y="y"), linestyle="dashed", color="blue", data=lw_line) <ggplot: (11396593)> sageへの入力: ggsave('Rec.4.9.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # R版 alpha指定が効かない graph = preGraph("fig-4.25.png") r('p <- ggplot(clim, aes(x=Year, y=Anomaly10y)) + geom_ribbon(aes(ymin=Anomaly10y-Unc10y, ymax=Anomaly10y+Unc10y)) + geom_line()') r('plot(p)') postGraph(graph) sageへの入力: # Rec.5.1 基本的な散布図を作成する ggplot(heightweight, aes(x="ageYear", y="heightIn")) + geom_point() <ggplot: (11405253)> sageへの入力: ggsave('Rec.5.1.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # R5.2 色と形を使用してデータポイントをグループ化 ggplot(heightweight, aes(x="ageYear", y="heightIn", color="sex")) + geom_point() <ggplot: (10243605)> sageへの入力: ggsave('fig-5.4a.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: ggplot(heightweight, aes(x="ageYear", y="heightIn", shape="sex")) + geom_point() <ggplot: (11561281)> sageへの入力: ggsave('fig-5.4b.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.5.3 点の形を指定する ggplot(heightweight, aes(x="ageYear", y="heightIn")) + geom_point(shape=3) Traceback (most recent call last): …. AttributeError: Unknown property shape sageへの入力: # R版 graph = preGraph("Rec.5.3.png") r('p <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point(shape=3)') r('plot(p)') postGraph(graph) sageへの入力: # Rec.5.4 連続値変数を色やサイズにマッピングする ggplot(heightweight, aes(x="ageYear", y="heightIn", colour="weightLb")) + geom_point() <ggplot: (11220169)> sageへの入力: ggsave('Rec.5.4.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: ggplot(heightweight, aes(x="ageYear", y="heightIn", size="weightLb")) + geom_point() <ggplot: (12021677)> sageへの入力: ggsave('fig-5.9.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.5.5 オーバープロットを扱う ggplot(diamonds, aes('carat', 'price')) + \ geom_point(alpha=1/20.) + \ ylim(0, 20000) <ggplot: (11783761)> sageへの入力: ggsave('Rec.5.5.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.5.6 回帰モデルの直線をフィットさせる ggplot(heightweight, aes(x="ageYear", y="heightIn")) + geom_point() + stat_smooth(method="lm", se=True) <ggplot: (13715161)> sageへの入力: ggsave('Rec.5.6.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: ggplot(heightweight, aes(x="ageYear", y="heightIn")) + geom_point() + stat_smooth() <ggplot: (13566493)> sageへの入力: ggsave('fig-5.19.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # ggplotの例題だと上手く表示できている meat_lng = pd.melt(meat[['date', 'beef', 'pork', 'broilers']], id_vars='date') ggplot(aes(x='date', y='value', colour='variable'), data=meat_lng) + \ geom_point() + \ stat_smooth(color='red') <ggplot: (12929917)> sageへの入力: ggsave('sample1.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rの結果は graph = preGraph("fig-5.19-1.png") r('p <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point() + stat_smooth()') r('plot(p)') postGraph(graph) sageへの入力: # glmでのスムーズ曲線 r('library(MASS)') graph = preGraph("fig-5.20.png") r('b <- biopsy') r('b$classn[b$class == "benign"] <- 0') r('b$classn[b$class == "malignant"] <- 1') r('p <- ggplot(b, aes(x=V1, y=classn)) + geom_point(position=position_jitter(width=0.3, height=0.06)) + stat_smooth(method=glm, family=binomial)') r('plot(p)') postGraph(graph) sageへの入力: # 不要な散布図のレシピは省略 sageへの入力: # Rec.6.1 基本的なヒストグラムを作成する faithful = RDf2PandaDf('faithful') ggplot(faithful, aes(x="waiting")) + geom_histogram() binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. <ggplot: (13745201)> sageへの入力: ggsave('Rec.6.1.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # binwidth=5 と色を変更 ggplot(faithful, aes(x="waiting")) + geom_histogram(binwidth=8, color="grey") <ggplot: (13192921)> sageへの入力: ggsave('fig-6.2.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.6.2 グループ化されたデータから複数のヒストグラムを作成する birthwt = RDf2PandaDf('birthwt') ggplot(birthwt, aes(x="bwt")) + geom_histogram(color="grey") + facet_wrap("smoke") binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. <ggplot: (13159925)> sageへの入力: ggsave('fig-6.4.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.6.3 密度曲線を作成する ggplot(faithful, aes(x="waiting")) + geom_density() <ggplot: (14193865)> sageへの入力: ggsave('fig-6.3.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.6.4 グループ化されたデータから複数の密度曲線を作成する ggplot(birthwt, aes(x="bwt", colour="factor(smoke)")) + geom_density() <ggplot: (14393965)> sageへの入力: ggsave('Rec.6.4.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.6.6 基本的な箱ひげ図を作成する graph = preGraph("Rec.6.6.png") r('p <- ggplot(birthwt, aes(x=factor(race), y=bwt)) + geom_boxplot()') r('plot(p)') postGraph(graph) sageへの入力: # Rec.6.12 2次元データから密度プロットを作成する graph = preGraph("Rec.6.12.png") r('p <- ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point() + stat_density2d()') r('plot(p)') postGraph(graph) sageへの入力: # Rec.9.3 テーマを使う # ブラックとホワイトのテーマ ggplot(heightweight, aes(x="ageYear", y="heightIn")) + geom_point() + theme_bw() <ggplot: (14404949)> sageへの入力: ggsave('Rec.9.3.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # Rec.11.1 ファセットを使いサブプロットに分割する mpg = RDf2PandaDf('mpg') ggplot(mpg, aes(x="displ", y="hwy")) + geom_point() + facet_grid("drv", "cyl") <ggplot: (14685905)> sageへの入力: ggsave('Rec.11.1.png', dpi=50) Saving 11.0 x 8.0 in image. sageへの入力: # R版では、水平、垂直パネルにも分割できる graph = preGraph("fig-11.1.png") r('p <- ggplot(mpg, aes(x=displ, y=hwy)) + geom_point()') r('p <- p + facet_grid(drv ~ .)') #r('p + facet_grid(. ~ cyl)') #r('p + facet_grid(drv ~ cyl)') r('plot(p)') postGraph(graph) sageへの入力: # 地図のプロット # r('install.packages("mapproj")') r('library(maps)') [1] "maps" "MASS" "plyr" "jsonlite" "gcookbook" "ggplot2" "stats" "graphics" [9] "grDevices" "utils" "datasets" "methods" "base" sageへの入力: # アメリカの地図データを取得 junk = r('states_map <- map_data("state")') sageへの入力: r('class(states_map)') graph = preGraph("fig-13.32.png") r('p <- ggplot(states_map, aes(x=long, y=lat, group=group)) + geom_polygon(fill="white", colour="black")') r('plot(p)') postGraph(graph) sageへの入力: # 世界地図から日本と韓国、中国をプロット r('world_map <- map_data("world")') junk = r('east_asia <- map_data("world", region=c("Japan", "China", "North Korea", "Sourth Korea"))') sageへの入力: graph = preGraph("fig-13.33.png") r('p <- ggplot(east_asia, aes(x=long, y=lat, group=group, fill=region)) + geom_polygon( colour="black") + scale_fill_brewer(palette="Set2")') r('plot(p)') postGraph(graph) # グラフがゆがんでいるのは、要チェックです。 sageへの入力: # 塗り分け地図(コロプレス地図) r('states_map = map_data("state")') r('crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)') r('crime_map <- merge(states_map, crimes, by.x="region", by.y="state")') graph = preGraph("fig-13.35.png") r('p <- ggplot(crime_map, aes(x=long, y=lat, group=group, fill=Assault)) + geom_polygon( ) + coord_map("polyconic")') r('plot(p)') postGraph(graph) sageへの入力: # 日本地図 # r('install.packages("raster")') r('library(raster)') # シェープファイルを読み込む場合は、readShapePoly関数を使用する sageへの入力: r('japan_shp <- getData("GADM", country="JPN", level=1)') r('japan_map <- fortify(japan_shp)') graph = preGraph("fig-13.40.png") r('p <- ggplot(japan_map, aes(x=long, y=lat, group=group)) + geom_path(lwd=0.5)') r('plot(p)') postGraph(graph) # プロットにちょっと時間がかかります。 コメント †皆様のご意見、ご希望をお待ちしております。
Tweet |