FrontPage

2014/03/22からのアクセス回数 6915

ここで紹介した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.

Rec.2.1.png

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.

Rec.2.2.png

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.

Rec.2.3.png

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.

Rec.2.4.png

sageへの入力:

# Rの結果と異なる!
graph = preGraph("fig2.4.png")
r('p <- ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4)')
r('plot(p)')
postGraph(graph)

fig2.4.png

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)

fig2.5.png

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)

fig2.6.png

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.

Rec.3.1.png

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)

fig3.1.png

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.

fig.3.2a.png

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.

fig.3.2b.png

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.

fig.3.3.png

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.

Rec.3.2.png

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)

fig3.4.png

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.

Rec.3.3.png

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)

Rec.3.4.png

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)

Rec.3.5.png

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.

Rec.3.6.png

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)

Rec.3.7.png

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)

Rec.3.8.png

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)

Rec.3.9.png

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.

test1.0.png

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)

Rec.3.10.png

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)

fig-3.29.png

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.

Rec.4.1.0.png

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.

Rec.4.2.0.png

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.

fig-4.5.png

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.

Rec.4.3.png

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.

Rec.4.4.png

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.

Rec.4.5.png

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.

Rec.4.6.png

sageへの入力:

# R版
graph = preGraph("fig-4.17.png")
r('p <- ggplot(sunspotyear, aes(x=Year, y=Sunspots)) + geom_area()')
r('plot(p)')
postGraph(graph)

fig-4.17.png

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.

Rec.4.7.png

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)

fig-4.20.png

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.

Rec.4.9.png

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)

fig-4.25.png

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.

Rec.5.1.png

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.

fig-5.4a.png

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.

fig-5.4b.png

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)

Rec.5.3.png

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.

Rec.5.4.png

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.

fig-5.9.png

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.

Rec.5.5.png

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.

Rec.5.6.png

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.

fig-5.19.png

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.

sample1.png

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)

fig-5.19-1.png

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)

fig-5.20.png

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.

Rec.6.1.png

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.

fig-6.2.png

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.

fig-6.4.png

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.

fig-6.3.png

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.

Rec.6.4.png

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)

Rec.6.6.png

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)

Rec.6.12.png

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.

Rec.9.3.png

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.

Rec.11.1.png

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)

fig-11.1.png

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)

fig-13.32.png

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)
# グラフがゆがんでいるのは、要チェックです。

fig-13.33.png

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)

fig-13.35.png

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)
# プロットにちょっと時間がかかります。

fig-13.40.png

コメント

選択肢 投票
おもしろかった 4  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。

  • このページがヒントになり Mathematica RLink を使って ggplot2(R) を動かすことができました。感謝します。http://mmays.hatenablog.com/entry/2014/03/24/155244 -- [[ysato ]] 2014-03-24 (月) 15:59:00
  • ysatoさま、最近の意気込みのすごさが伝わってきます。頑張って下さい。 -- 竹本 浩? 2014-03-24 (月) 21:59:07
  • mac の Sage-8.3 で r("install.packages('ggplot2')") を実行したところ、パッケージ ‘ggplot2’ のインストールは、ゼロでない終了値をもちました。r('library(ggplot2)') がエラーになります。Sage-8.3 固有の問題のように思います。 -- ysato? 2014-10-11 (土) 13:42:51
  • 8.3 ではなく Sage 6.3 です。 Sage 6.2 で試したところエラーはでません。Sage 6.3 固有の問題のようです。 -- ysato? 2014-10-11 (土) 22:28:45
  • ysatoさま、貴重な情報ありがとうございます。 -- 竹本 浩? 2014-10-12 (日) 09:22:51
  • Sage 6.3 の問題の解決法ををsage-support に教えてもらいました。次に解決法が書いてあります。https://groups.google.com/forum/#!topic/sage-support/9C3HbJRitCk -- ysato? 2014-10-13 (月) 12:53:59
  • ysatoさま、sage-supportに問いあせて頂きましてありがとうございます。 -- 竹本 浩? 2014-10-13 (月) 14:04:48

(Input image string)


添付ファイル: filetest1.0.png 1013件 [詳細] filesample1.png 874件 [詳細] fileRec.11.1.png 915件 [詳細] fileRec.9.3.png 851件 [詳細] fileRec.6.12.png 944件 [詳細] fileRec.6.6.png 943件 [詳細] fileRec.6.4.png 863件 [詳細] fileRec.6.1.png 927件 [詳細] fileRec.5.6.png 993件 [詳細] fileRec.5.5.png 888件 [詳細] fileRec.5.4.png 909件 [詳細] fileRec.5.3.png 955件 [詳細] fileRec.5.1.png 891件 [詳細] fileRec.4.9.png 910件 [詳細] fileRec.4.7.png 916件 [詳細] fileRec.4.6.png 986件 [詳細] fileRec.4.5.png 914件 [詳細] fileRec.4.4.png 965件 [詳細] fileRec.4.3.png 921件 [詳細] fileRec.4.2.0.png 965件 [詳細] fileRec.4.1.0.png 1019件 [詳細] fileRec.3.10.png 1043件 [詳細] fileRec.3.9.png 914件 [詳細] fileRec.3.8.png 932件 [詳細] fileRec.3.7.png 927件 [詳細] fileRec.3.6.png 996件 [詳細] fileRec.3.5.png 1015件 [詳細] fileRec.3.4.png 1010件 [詳細] fileRec.3.3.png 1025件 [詳細] fileRec.3.2.png 984件 [詳細] fileRec.3.1.png 967件 [詳細] fileRec.2.4.png 918件 [詳細] fileRec.2.3.png 969件 [詳細] fileRec.2.2.png 962件 [詳細] fileRec.2.1.png 926件 [詳細] filefig3.4.png 891件 [詳細] filefig3.1.png 848件 [詳細] filefig2.6.png 899件 [詳細] filefig2.5.png 939件 [詳細] filefig2.4.png 971件 [詳細] filefig.3.3.png 872件 [詳細] filefig.3.2b.png 903件 [詳細] filefig.3.2a.png 899件 [詳細] filefig-13.40.png 757件 [詳細] filefig-13.35.png 924件 [詳細] filefig-13.33.png 781件 [詳細] filefig-13.32.png 838件 [詳細] filefig-11.1.png 789件 [詳細] filefig-6.4.png 771件 [詳細] filefig-6.3.png 821件 [詳細] filefig-6.2.png 804件 [詳細] filefig-5.20.png 803件 [詳細] filefig-5.19.png 788件 [詳細] filefig-5.19-1.png 745件 [詳細] filefig-5.9.png 875件 [詳細] filefig-5.4b.png 897件 [詳細] filefig-5.4a.png 830件 [詳細] filefig-4.25.png 806件 [詳細] filefig-4.20.png 861件 [詳細] filefig-4.17.png 885件 [詳細] filefig-4.5.png 979件 [詳細] filefig-3.29.png 841件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-01 (木) 11:44:39 (2704d)
SmartDoc