Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

テストデータ(4) 常用漢字

常用漢字のテストデータです。
 

data = [""]*7

#小1
data[0] = """
一右雨円王音下火花貝学気九休玉金空月犬見五口校左三山子四糸字耳七
車手十出女小上森人水正生青夕石赤千川先早草足村大男竹中虫町天田土
二日入年白八百文木本名目立力林六"""

#小2
data[1] = """
引羽雲園遠何科夏家歌画回会海絵外角楽活間丸岩顔汽記帰弓牛魚京強教
近兄形計元言原戸古午後語工公広交光考行高黄合谷国黒今才細作算止市
矢姉思紙寺自時室社弱首秋週春書少場色食心新親図数西声星晴切雪船線
前組走多太体台地池知茶昼長鳥朝直通弟店点電刀冬当東答頭同道読内南
肉馬売買麦半番父風分聞米歩母方北毎妹万明鳴毛門夜野友用曜来里理話
"""

#小3
data[2] = """
悪安暗医委意育員院飲運泳駅央横屋温化荷界開階寒感漢館岸起期客究急
級宮球去橋業曲局銀区苦具君係軽血決研県庫湖向幸港号根祭皿仕死使始
指歯詩次事持式実写者主守取酒受州拾終習集住重宿所暑助昭消商章勝乗
植申身神真深進世整昔全相送想息速族他打対待代第題炭短談着注柱丁帳
調追定庭笛鉄転都度投豆島湯登等動童農波配倍箱畑発反坂板皮悲美鼻筆
氷表秒病品負部服福物平返勉放味命面問役薬由油有遊予羊洋葉陽様落流
旅両緑礼列練路和"""

#小4
data[3] = """
愛案以衣位囲胃印英栄塩億加果貨課芽改械害街各覚完官管関観願希季紀
喜旗器機議求泣救給挙漁共協鏡競極訓軍郡径型景芸欠結建健験固功好候
航康告差菜最材昨札刷殺察参産散残士氏史司試児治辞失借種周祝順初松
笑唱焼象照賞臣信成省清静席積折節説浅戦選然争倉巣束側続卒孫帯隊達
単置仲貯兆腸低底停的典伝徒努灯堂働特得毒熱念敗梅博飯飛費必票標不
夫付府副粉兵別辺変便包法望牧末満未脈民無約勇要養浴利陸良料量輪類
令冷例歴連老労録"""

#小5
data[4] = """
圧移因永営衛易益液演応往桜恩可仮価河過賀快解格確額刊幹慣眼基寄規
技義逆久旧居許境均禁句群経潔件券険検限現減故個護効厚耕鉱構興講混
査再災妻採際在財罪雑酸賛支志枝師資飼示似識質舎謝授修述術準序招承
証条状常情織職制性政勢精製税責績接設舌絶銭祖素総造像増則測属率損
退貸態団断築張提程適敵統銅導徳独任燃能破犯判版比肥非備俵評貧布婦
富武復複仏編弁保墓報豊防貿暴務夢迷綿輸余預容略留領"""

#小6
data[5] = """
異遺域宇映延沿我灰拡革閣割株干巻看簡危机揮貴疑吸供胸郷勤筋系敬警
劇激穴絹権憲源厳己呼誤后孝皇紅降鋼刻穀骨困砂座済裁策冊蚕至私姿視
詞誌磁射捨尺若樹収宗就衆従縦縮熟純処署諸除将傷障城蒸針仁垂推寸盛
聖誠宣専泉洗染善奏窓創装層操蔵臓存尊宅担探誕段暖値宙忠著庁頂潮賃
痛展討党糖届難乳認納脳派拝背肺俳班晩否批秘腹奮並陛閉片補暮宝訪亡
忘棒枚幕密盟模訳郵優幼欲翌乱卵覧裏律臨朗論"""

#中学
data[6] = """
亜哀挨曖握扱宛嵐依威為畏尉萎偉椅彙違維慰緯壱逸茨芋咽姻淫陰隠韻唄
鬱畝浦詠影鋭疫悦越謁閲炎怨宴媛援煙猿鉛縁艶汚凹押旺欧殴翁奥岡憶臆
虞乙俺卸穏佳苛架華菓渦嫁暇禍靴寡箇稼蚊牙瓦雅餓介戒怪拐悔皆塊楷潰
壊懐諧劾崖涯慨蓋該概骸垣柿核殻郭較隔獲嚇穫岳顎掛潟括喝渇葛滑褐轄
且釜鎌刈甘汗缶肝冠陥乾勘患貫喚堪換敢棺款閑勧寛歓監緩憾還環韓艦鑑
含玩頑企伎岐忌奇祈軌既飢鬼亀幾棋棄毀畿輝騎宜偽欺儀戯擬犠菊吉喫詰
却脚虐及丘朽臼糾嗅窮巨拒拠虚距御凶叫狂享況峡挟狭恐恭脅矯響驚仰暁
凝巾斤菌琴僅緊錦謹襟吟駆惧愚偶遇隅串屈掘窟熊繰勲薫刑茎契恵啓掲渓
蛍傾携継詣慶憬稽憩鶏迎鯨隙撃桁傑肩倹兼剣拳軒圏堅嫌献遣賢謙鍵繭顕
懸幻玄弦舷股虎孤弧枯雇誇鼓錮顧互呉娯悟碁勾孔巧甲江坑抗攻更拘肯侯
恒洪荒郊香貢控梗喉慌硬絞項溝綱酵稿衡購乞拷剛傲豪克酷獄駒込頃昆恨
婚痕紺魂墾懇佐沙唆詐鎖挫采砕宰栽彩斎債催塞歳載埼剤崎削柵索酢搾錯
咲刹拶撮擦桟惨傘斬暫旨伺刺祉肢施恣脂紫嗣雌摯賜諮侍滋慈餌璽鹿軸叱
疾執湿嫉漆芝赦斜煮遮邪蛇酌釈爵寂朱狩殊珠腫趣寿呪需儒囚舟秀臭袖羞
愁酬醜蹴襲汁充柔渋銃獣叔淑粛塾俊瞬旬巡盾准殉循潤遵庶緒如叙徐升召
匠床抄肖尚昇沼宵症祥称渉紹訟掌晶焦硝粧詔奨詳彰憧衝償礁鐘丈冗浄剰
畳縄壌嬢錠譲醸拭殖飾触嘱辱尻伸芯辛侵津唇娠振浸紳診寝慎審震薪刃尽
迅甚陣尋腎須吹炊帥粋衰酔遂睡穂随髄枢崇据杉裾瀬是井姓征斉牲凄逝婿
誓請醒斥析脊隻惜戚跡籍拙窃摂仙占扇栓旋煎羨腺詮践箋潜遷薦繊鮮禅漸
膳繕狙阻租措粗疎訴塑遡礎双壮荘捜挿桑掃曹曽爽喪痩葬僧遭槽踪燥霜騒
藻憎贈即促捉俗賊遜汰妥唾堕惰駄耐怠胎泰堆袋逮替滞戴滝択沢卓拓託濯
諾濁但脱奪棚誰丹旦胆淡嘆端綻鍛弾壇恥致遅痴稚緻畜逐蓄秩窒嫡沖抽衷
酎鋳駐弔挑彫眺釣貼超跳徴嘲澄聴懲勅捗沈珍朕陳鎮椎墜塚漬坪爪鶴呈廷
抵邸亭貞帝訂逓偵堤艇締諦泥摘滴溺迭哲徹撤添塡殿斗吐妬途渡塗賭奴怒
到逃倒凍唐桃透悼盗陶塔搭棟痘筒稲踏謄藤闘騰洞胴瞳峠匿督篤栃凸突屯
豚頓貪鈍曇丼那奈梨謎鍋軟尼弐匂虹尿妊忍寧捻粘悩濃把覇婆罵杯排廃輩
培陪媒賠伯拍泊迫剝舶薄漠縛爆箸肌鉢髪伐抜罰閥氾帆汎伴阪畔般販斑搬
煩頒範繁藩蛮盤妃彼披卑疲被扉碑罷避尾眉微膝肘匹泌姫漂苗描猫浜賓頻
敏瓶扶怖阜附訃赴浮符普腐敷膚賦譜侮舞封伏幅覆払沸紛雰噴墳憤丙併柄
塀幣弊蔽餅壁璧癖蔑偏遍哺捕舗募慕簿芳邦奉抱泡胞俸倣峰砲崩蜂飽褒縫
乏忙坊妨房肪某冒剖紡傍帽貌膨謀頰朴睦僕墨撲没勃堀奔翻凡盆麻摩磨魔
昧埋膜枕又抹慢漫魅岬蜜妙眠矛霧娘冥銘滅免麺茂妄盲耗猛網黙紋冶弥厄
躍闇喩愉諭癒唯幽悠湧猶裕雄誘憂融与誉妖庸揚揺溶腰瘍踊窯擁謡抑沃翼
拉裸羅雷頼絡酪辣濫藍欄吏痢履璃離慄柳竜粒隆硫侶虜慮了涼猟陵僚寮療
瞭糧厘倫隣瑠涙累塁励戻鈴零霊隷齢麗暦劣烈裂恋廉錬呂炉賂露弄郎浪廊
楼漏籠麓賄脇惑枠湾腕"""

pandasの使い方(2) DataFrameの生成

データフレームを作る(1) numpyの配列から作る。

import numpy as np
import pandas as pd
a = np.random.randint(1, 100, (3, 2))
frame = pd.DataFrame(a, columns=["a", "b"])
print(frame)
#     a   b
# 0  85  80
# 1  85  10
# 2  17  38

 

データフレームを作る(2)リストから

import numpy as np
import pandas as pd

d =[[1, 2, 3], 
    [50, 60, 70]]
frame = pd.DataFrame(d)

print(frame)
#     0   1   2
# 0   1   2   3
# 1  50  60  70

print(frame.T)
#    0   1
# 0  1  50
# 1  2  60
#2  3  70

column名(列名)、index名(行名)が自動で割り振られる。
.Tで行列変換(転置)
 

データフレームを作る(3)辞書から

data = {"year": [2010, 2011, 2012, 2013],
        "pref":["千葉", "山口", "岐阜", "東京"]}

f = pd.DataFrame(data)
print(f)
#   pref  year
# 0   千葉  2010
# 1   山口  2011
# 2   岐阜  2012
# 3   東京  2013

 
columnsを指定しないと、昇順になる。
columns指定で、存在しない列はNaNとなる。

f = pd.DataFrame(data, columns=["year", "pref", "count"])
print(f)
#    year pref count
# 0  2010   千葉   NaN
# 1  2011   山口   NaN
# 2  2012   岐阜   NaN
# 3  2013   東京   NaN

 
・ネストした辞書からDataFrameを作ると、外側のキーがcolumnに
 内側のキーが行indexになる。

data = {"year": {"1st":2010, "2nd":2011, "3rd":2012, "4th":2013},
        "pref": {"1st":"千葉", "2nd":"山口", "3rd":"岐阜"}}
f = pd.DataFrame(data)
print(f)
#    pref  year
# 1st   千葉  2010
# 2nd   山口  2011
# 3rd   岐阜  2012
# 4th  NaN  2013

 

データフレームを作る(4)Webから

 こちらの記事
pandasの使い方(4)ファイルの読み込み - Remrinのpython攻略日記
を参照 
 

データフレームを作る(5)コピー

d2 = d.copy()

 

データ構造の確認

# 行数の確認
print(len(frame))    #2

# 次元数の確認
print(frame.shape)   #(2, 3)

# 各列の基礎統計量の確認
print(frame.describe()) #データ数、平均、標準偏差、4分位
#                A          B          C
# count   2.000000   2.000000   2.000000 データ数
# mean   25.500000  31.000000  36.500000 平均
# std    34.648232  41.012193  47.376154 標準偏差
# min     1.000000   2.000000   3.000000 最小
# 25%    13.250000  16.500000  19.750000 
# 50%    25.500000  31.000000  36.500000
# 75%    37.750000  45.500000  53.250000
# max    50.000000  60.000000  70.000000 最大

# 先頭・末端行の表示
print(frame.head(1)) #先頭の1行を確認
#        A  B  C
# order  1  2  3
print(frame.tail(1)) #末端の1行を確認
#         A   B   C
#  point  50  60  70

print(frame.info()) #構造の確認
# <class 'pandas.core.frame.DataFrame'>
# Index: 2 entries, order to point
# Data columns (total 3 columns):
# A    2 non-null int64
# B    2 non-null int64
# C    2 non-null int64
# dtypes: int64(3)
# memory usage: 56.0+ bytes
# None

 

値の確認

d =[[1, 2, 3],[50, 60, 70]]
frame = pd.DataFrame(d)
print(frame.columns) #RangeIndex(start=0, stop=3, step=1)
print(frame.index)   #RangeIndex(start=0, stop=2, step=1)
print(frame.values)  #値のみの表示→NumPyのndarray
# [[ 1  2  3]
#  [50 60 70]]

 
○特定の行、列の取得

f["A"] A列をSeriesとして取り出す
f.A A列をSeriesとして取り出す
f[0:2] 0~2行
f[:2] 0~2行
f["Jan":"Feb"] Jan~Febの行
f.loc["Jan"] Janの行
f.loc[:, ["A", "B"]] AとBの列
f.loc["Jan":"Feb",["A", "B"]] Jan~Febの行のAとB
f.iloc[0] 0行目
f.iloc[0][0] 0行目の0列目
f.iloc[[1, 2],[0, 1]] 1, 2行目の0,1列
f.iloc[1:2, :] 1~2行目のすべての列
f.iloc[:, 0:1] すべての行の0~1列
f[f.A > 5] Aの値が5より大きいすべての行
f.[f > 5] 5より大きいすべての要素、他はNaN
f[f["A"].isin([5, 10])] A列が5の値を持つ行。isinの引数はリスト型

 

data = [[0, 1, 2, 3], 
        [5, 6, 7, 8], 
        [10, 10, 10, 10]]      
f = pd.DataFrame(data)
f.index = ["Jan", "Feb", "Mar"]
f.columns = ["A", "B", "C", "D"]

print(f)
#       A   B   C   D
# Jan   0   1   2   3
# Feb   5   6   7   8
# Mar  10  10  10  10

print(f["A"])
# Jan     0
# Feb     5
# Mar    10
# Name: A, dtype: int64

print(f.A)
# Jan     0
# Feb     5
# Mar    10
# Name: A, dtype: int64

print(f[0:2])
#      A  B  C  D
# Jan  0  1  2  3
# Feb  5  6  7  8

#print(f[0]) # KeyError: 0

print(f["Jan":"Feb"])
# Jan  0  1  2  3
# Feb  5  6  7  8

#print(f["Jan"]) # KeyError: 'Jan'

print(f.loc["Jan"]) # 縦に表示
# A    0
# B    1
# C    2
# D    3
# Name: Jan, dtype: int64

print(f.loc["Jan":"Feb", ["A", "B"]])
#      A  B
# Jan  0  1
# Feb  5  6

print(f[f > 5])
#         A     B     C     D
# Jan   NaN   NaN   NaN   NaN
# Feb   NaN   6.0   7.0   8.0
# Mar  10.0  10.0  10.0  10.0

print(f[f["A"].isin([5, 10])])
#       A   B   C   D
# Feb   5   6   7   8
# Mar  10  10  10  10

 
参考:
Python Pandasでのデータ操作の初歩まとめ
Pandas でデータフレームを作ってみよう

テストデータ(3) アミノ酸 コドン表

m-RNAからアミノ酸へのコドン表
 

bases = "UCAG"
codons = [b1+b2+b3 for b1 in bases for b2 in bases for b3 in bases]
aminoacids = "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG"
codon_dict = dict(zip(codons, aminoacids))
print(codon_dict)

#sort to display   
s = sorted([(k, v) for k,v in codon_dict.items()], key=lambda x:codons.index(x[0]))
for i, ele in enumerate(s):
    print("'{}':'{}', ".format(ele[0], ele[1]), "\n"*(i%4 == 3), end="")

 
コドン表

codon_dict={
'UUU':'F',  'UUC':'F',  'UUA':'L',  'UUG':'L',  
'UCU':'S',  'UCC':'S',  'UCA':'S',  'UCG':'S',  
'UAU':'Y',  'UAC':'Y',  'UAA':'*',  'UAG':'*',  
'UGU':'C',  'UGC':'C',  'UGA':'*',  'UGG':'W',  
'CUU':'L',  'CUC':'L',  'CUA':'L',  'CUG':'L',  
'CCU':'P',  'CCC':'P',  'CCA':'P',  'CCG':'P',  
'CAU':'H',  'CAC':'H',  'CAA':'Q',  'CAG':'Q',  
'CGU':'R',  'CGC':'R',  'CGA':'R',  'CGG':'R',  
'AUU':'I',  'AUC':'I',  'AUA':'I',  'AUG':'M',  
'ACU':'T',  'ACC':'T',  'ACA':'T',  'ACG':'T',  
'AAU':'N',  'AAC':'N',  'AAA':'K',  'AAG':'K',  
'AGU':'S',  'AGC':'S',  'AGA':'R',  'AGG':'R',  
'GUU':'V',  'GUC':'V',  'GUA':'V',  'GUG':'V',  
'GCU':'A',  'GCC':'A',  'GCA':'A',  'GCG':'A',  
'GAU':'D',  'GAC':'D',  'GAA':'E',  'GAG':'E',  
'GGU':'G',  'GGC':'G',  'GGA':'G',  'GGG':'G'}

 

1 letter 3 letters 英語名 日本語名
A Ala Alanine ラニ
C Cys Cysteine システイン
D Asp Aspartic Acid アスパラギン
E Glu Glutamic Acid グルタミン酸
F Phe Phenylalanine フェニルアラニン
G Gly Glycine グリシン
H His Histidine ヒスチジン
I Ile Isoleucine イソロイシン
K Lys Lysine リジン
L Leu Leucine ロイシン
M Met Methionine メチオニン
N Asn Asparagine アスパラギン
P Pro Proline プロリン
Q Gln Glutamine グルタミン
R Arg Arginine アルギニン
S Ser Serine セリン
T Thr Threonine スレオニン
V Val Valine バリン
W Trp Tryptophan トリプトファン
Y Tyr Tyrosine チロシン

 
・開始コドン
 AUGはメチオニンを指定するが、同時に開始コドンにもなっている、
 タンパク質合成が完了すると最初のメチオニンは切り離される。
 
・終止コドン
 UAA, UAG, UGA
 
・タンパク質合成
 DNA→(転写)→m-RNA前駆体→(スプライシング)→m-RNA→(翻訳)→タンパク質

参考:
Pythonで辞書の初期値をまとめて登録する方法 | Nana-Korobi

map(), filter()

pythonのmap(), filter()の使い方について。
 

map()

Definition : map(func, *iterables)
リストなどの全要素に関数を適用し、イテレータを作る。
もとのリストは保存され、非破壊的。
mapオブジェクトを生成するので、中身を見たければlist化など。

list1 = [1.7, 5.9, -3.68]
m = map(int, list1)
print(m)            # <map object at 0x...>
print(list(m))      # [1, 5, -3]

 
mapのかわりに内包表記でも書ける

list1 = [1.7, 5.9, -3.68]
print([int(i) for i in list1])  # [1, 5, -3]

 
mapオブジェクトはイテレータ

list1 = [1.7, 5.9, -3.68]
m = map(int, list1)
print(next(m))     #  1 
print(next(m))     #  5
print(next(m))     # -3

 
lambda関数も使える

m = map(lambda x:x**2, range(4))
print(list(m))        # [0, 1, 4, 9]

 
map()を使って相関係数を計算する
公式:
f:id:rare_Remrin:20170505165448p:plain

# correlation coefficient
def corr(x, y):
    if len(x) != len(y):
        return "different length"
    sx = sum(x)
    sy = sum(y)
    sx2 = sum(map(lambda x:x**2, x))
    sy2 = sum(map(lambda x:x**2, y))
    sxy = sum(map((lambda x, y:x*y), x, y))
    n = len(x)
    try:
        return (n*sxy-sx*sy)/((n*sx2-sx**2)*(n*sy2-sy**2))**0.5
    except:
        return 0
    
x = [1, 2, 3]
y = [5, 5, 6]
print("相関係数:", corr(x, y)) # 相関係数: 0.8660254037844387

 

filter()

Definition : filter(function or None, iterable)
リストなどの全要素に関数を適用し、Trueのものだけのイテレータを作る。
もとのリストは保存され、非破壊的。
filterオブジェクトを生成するので、中身を見たければlist化など。
 
正の要素だけ選ぶ

list1 = [1.7, 5.9, -3.68]
f = filter(lambda x:x>0, list1)
print(list(f))   # [1.7, 5.9]

 
内包表記でも書ける

list1 = [1.7, 5.9, -3.68]
f = filter(lambda x:x>0, list1)
print(list(f))   # [1.7, 5.9]

 
関数をNoneにすると、Trueのものだけを選ぶ。

f = filter(None, range(4))
print(f)        # <filter object at 0x...>
print(list(f))  # [1, 2, 3]

 
filter()とは逆に偽の要素を選ぶ関数としてitertools.filterfalse()がある。

バーンスレイのシダ

○バーンスレイのシダ
 
4種類の変換をそれぞれ、85%、7%、7%、1%の確率で選んでいきます。

# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

def transform1(p):
    x, y = p[0], p[1]
    x1 = 0.85*x + 0.04*y
    y1 = -0.04*x + 0.85*y + 1.6
    return x1, y1

def transform2(p):
    x, y = p[0], p[1]
    x1 = 0.2*x - 0.26*y
    y1 = 0.23*x + 0.22*y + 1.6
    return x1, y1
    
def transform3(p):
    x, y = p[0], p[1]
    x1 = -0.15*x + 0.28*y
    y1 = 0.26*x + 0.24*y + 0.44
    return x1, y1

def transform4(p):
    y = p[1]
    x1 = 0
    y1 = 0.16*y
    return x1, y1    

def transform(p):
    transforms =[transform1, transform2, transform3, transform4]
    # 0~3の中から、85%, 7%, 7%, 1%の重みでインデックスを選ぶ
    index = np.random.choice([0, 1, 2, 3], p=probability)
    t = transforms[index]
    x, y = t(p)
    return x, y

def draw(n):
    x, y = [0], [0]    # x、yはn個の要素を持つリストになる
    x1, y1 = 0, 0      # 現在の座標
    for i in range(n):
        x1, y1 = transform((x1, y1))
        x.append(x1)
        y.append(y1)
    return x, y

n = 1000  # 点の数
# 85%, 7%, 7%, 1%
probability = [0.85, 0.07, 0.07, 0.01] # 合計が1.00
x, y = draw(n)
plt.plot(x, y, "o", c="g", markeredgecolor="darkgreen")
plt.title("Fern with {} points".format(n))
plt.show()

 
n=1000として、1000個の点で描いたシダ
f:id:rare_Remrin:20170506224334p:plain
 
n=8000として、8000個の点で描いたシダ
f:id:rare_Remrin:20170506224421p:plain
 
参考:
Pythonからはじめる数学入門 Amit Saha

matplotlibでアニメーション

matplotlibでアニメーションを作ります。
  

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import matplotlib.animation as ani

def create_circle():
    c1 = plt.Circle((0, 0), 0.5)
    return c1

def update_radius(i, c1):  # i:フレーム番号
    plt.cla()
    c1.radius = i*0.5      # 最大半径15
    return c1,

def create_animation():
    fig = plt.gcf()
    ax = plt.axes(xlim=(-10, 10), ylim=(-10, 10))
    ax.set_aspect("equal")
    c1 = create_circle()
    ax.add_patch(c1)
    anim = ani.FuncAnimation(fig, update_radius, 
                        fargs=(c1,), frames=30, interval=50)
    anim.save("circle.gif", writer = 'imagemagick')
create_animation()

 
円が徐々に大きくなるアニメーションになるはずが、
ValueError: Cannot save animation: no writers are available. Please install ffmpeg to save animations.
というエラーが出てうまくいきませんでした。
imagemagickをダウンロードして、matplotlibrcのanimation convert pathを
#animation.convert_path: C:\py3531\pytemp\ImageMagick-7.0.5-5-portable-Q16-x86\magick.exeとしましたが認識せず。
また時間のある時にでも調べてみます。
  
 

matplotlibで図形

matplotlibで図形を描く方法。
 
plot()関数が呼ばれると背後でfigure()が呼ばれ、続いてaxes()が呼ばれてfigureの中に軸をつくる。
plot()関数を呼ばずにfigure()やaxes()で図、軸を設定できる。
 

import matplotlib.pyplot as plt

c1 = plt.Circle((0, 0), radius=1, fc="yellow", ec="r")
ax = plt.gca()
ax.add_patch(c1)
plt.axis("scaled")
plt.show()

 
f:id:rare_Remrin:20170506162014p:plain
 
○figure()関数
Figureオブジェクトを作る。
Definition :

figure(num=None,           # autoincrement if None, else integer from 1-N 
       figsize=None,       # defaults to rc figure.figsize 
       dpi=None,           # defaults to rc figure.dpi 
       facecolor=None,     # defaults to rc figure.facecolor 
       edgecolor=None,     # defaults to rc figure.edgecolor 
       frameon=True, 
       FigureClass=Figure, 
       **kwargs)

 

num figure番号。整数または文字列のオプション引数でデフォルトはNone。もしnumが与えられなければ、新しいfigureを作り、figure番号を1増やす。figureオブジェクトはこの番号をnumber属性として保持する。もしnumが与えられ、すでに存在しているfigure番号だった場合は、そのfigureオブジェクトをアクティブにし、参照を返す。存在しないfigure番号のときは、新規のfigureオブジェクトを作成し、その参照を返す。numが文字列のときはウィンドウのタイトルがnumになる。
figsize (幅, 高さ)の整数のタプルで単位はインチ。デフォルトはrc figure.figsize
dpi figureの解像度。整数で、デフォルトははrc figure.dpi
facecolor 背景色。デフォルトはrc figure.facecolor
edgecolor 枠の色。デフォルトはrc figure.edgecolor

 

返り値 figureオブジェクト

 
○axes()関数
 Figureオブジェクトに座標軸を付け加える

parameter 内容
facecolor color 軸の背景色
frameon True or False 枠を表示するか
sharex otherax 他の軸とxaxis属性を共有するか
sharey otherax 他の軸とyaxis属性を共有するか
polar True, False 極座標を使うか
aspect "equal", "auto", num アスペクト比x/y。"equal"は1:1

 
○axis()メソッド
素数4のタプルを引数としてaxis()メソッドを呼ぶと、座標軸の範囲を変更できる。

引数 内容
なし 現在の座標軸の範囲を(xmin, xmax, ymin, ymax)のタプルで返す。
"off" 座標軸を表示しない
"equal" 円が円に見える。
"scaled" 座上軸の両端の自動調整
"tight" 余白を小さく?
"image" データの範囲に合わせる
"auto" 非推奨
"normal" 非推奨
"square" x軸の範囲(xmax-xmin)とy軸の範囲を等しくする

 

fig = plt.figure()
ax =plt.axes()
print(plt.axis())   # (0.0, 1.0, 0.0, 1.0)

v = (0, 2, 0, 3)
plt.axis(v)
plt.show()

 
x軸の範囲が0~2、y軸の範囲が0~3になっている。
f:id:rare_Remrin:20170506155223p:plain

gcf()関数:現在のFifureへの参照。オブジェクトがない場合は作成する。
gca()関数:現在のAxesへの参照。オブジェクトがない場合は作成する。
 
○ax.set_aspect()関数
 グラフのアスペクト比を設定する。

○円plt.Circle以外にもいろいろな図形が書ける。
 Ellipse, Polygon, Rectangleなどなど
 
参考:
patches — Matplotlib 2.0.1 documentation