en_US English ja 日本語 zh_CN 中文

python3でnumpyのarrayを逆順で読み込み

いつも忘れるので自分用メモ。xy座標で0から-1と0から1を分けて処理したいとか言ったときに、座標を逆順から読み込む方法。以下はnumpyのarrayで。

numpyのarrayを逆順で読み込み

スライスかnumpyのflipを使う

端っこから逆順。スライスを使った場合。スライスを使う場合には、場所指定の数がずれることにだけ注意が必要。

print (Qhor[0:10])
print (Qhor[9::-1])
print (np.flip(Qhor[0:10],axis=0))

出力

[0. 0. 0. 0. 0. 0. 921.18257197 907.22434369 907.54839177 917.00774199]
[917.00774199 907.54839177 907.22434369 921.18257197 0. 0.  0. 0. 0. 0. ]
[917.00774199 907.54839177 907.22434369 921.18257197 0. 0. 0. 0. 0.  0.]

ちょっと見にくいので真ん中を切り出したバージョン。

print (Qhor[20:25])
print (Qhor[24:19:-1])
print (np.flip(Qhor[20:25],axis=0))

出力

[958.26422151 958.88673711 958.01356441 960.51771837 965.83001593]
[965.83001593 960.51771837 958.01356441 958.88673711 958.26422151]
[965.83001593 960.51771837 958.01356441 958.88673711 958.26422151]

おしまい。

関連記事

1. pythonのまとめ

 

 

en_US English ja 日本語 zh_CN 中文

[python3・覚書] よく忘れるpython3の書き方・一般編

よく忘れるpython3の書き方の覚書。

1行が長い場合に途中で改行が入れたい場合

バックスラッシュが使える。

df = pd.DataFrame(data=[np.round(dat1,1)\
np.round(dat2,1),\
np.round(dat3,1)],\
columns=basename,index=['dat1','dat2','dat3'])

読み込んだファイルの名前情報を取得する

tkinterで読み込んでる場合

filenames = tkfd.askopenfilenames(filetypes= [('text','*.xy'),('text','*.ras')], initialdir='./DATA')
for i in range(len(filenames)):
  basename[i] = os.path.basename(filenames[i])

numpyのarrayデータをprintする時省略せずに全部見せる

import numpy as np
import sys
np.set_printoptions(threshold=sys.maxsize)

 

 

随時更新

 

関連記事

1. pythonのまとめ

D

en_US English ja 日本語 zh_CN 中文

高脂血症が悪化してダイエットしているお話 in Finland!

タイトル通りの投稿。

大学の健康診断の血液検査でコレステロール値やら中性脂肪やらの値が限界突破。もともと基準値よりは高かったのだけど、ついに食事制限か薬の服用を推奨される。

薬の服用に抵抗はないのだけど、ちょっと食生活の乱れと太り過ぎってこともあったので、まずダイエットをしてみることにした。

開始時の体重は168cmで68kg。

ダイエットの基本方針

第1方針はカロリー制限

1日のカロリーを1000−1500kcalに落とし込むってのが一番。

他の方針はやる気がないときはサボるけど、誕生日とか特別な祝日とか食べるものが決まっている日以外は、摂取カロリーの制限を徹底。

お腹が減りすぎると脂肪を貯めやすくなるなんて情報もあるけれど、そういうのは特に気にせずに、カロリー制限の方を優先する。まあご飯を茶碗一杯までにしておけばそう摂取カロリーが増えることもない。

ちなみにフィンランドのアジア系グロッセリー(JIAHEとか)ではそれなりに美味しい日本米系統の米が買える。うちは最近は中国の東北米をよく使っている。

第2方針はコレステロール制限

タンパク質は肉より魚か豆腐・納豆などの豆類。

刺し身とか、青魚っていうとちょっと難しかったりもするんだけど、まあ料理用の魚はスーパーでもそこそこ種類が手に入る。

納豆はアジアンショップから。ちょっと高いのでそのうち家で発酵させようかと考え中。フィンランドの家気温が安定してるから結構条件が良いのじゃないかなと思っている。少なくとも赤ワインは結構簡単につくれたし。

肉を食べる場合は皮なし鶏肉を茹でてとか。牛と豚は稀に食べる。

最近昼飯にインスタントラーメン食い過ぎだったので、これを修正。どうしても食べたい時は食べるけど。

野菜は炒めものが中心。さほど量は気にしていないけれど、食べすぎはしていない。サラダだけはカロリー制限も気にせずバリバリ食べる。まあオイル使ってないし大したカロリーじゃないはず。

第3方針はとにかく軽めの運動

とりあえず1日30分歩くのを日課に。外に出てもいいし、めんどいなら家の中で。

腕立て・スクワットなどの軽い筋トレを週2回。筋肉を付けるというよりは、落ちる筋肉量を最低限に留めるというくらいの意識で。

歩く以外の有酸素運動は週1やるかやらないか。まあ今は良い季節なので少しの緩めのジョギングくらいすることもある。

よく食べているもの

納豆: うまい、ダイエットの味方

豆腐: うまい、コレステロールの味方

鶏もも茹で: 沸騰に突っ込んで火を止めて15分放置。ポン酢をかければ美味しい。ほどほどにダイエットの味方

ソイヨーグルト: まずい、けどダイエットとコレステロールの味方

ひまわりの種: そこそこうまい、おやつ的なフィーリングが欲しくなったときに

気にしないダイエット情報

腹がへると脂肪を貯めやすくなる

まあそうなのかもしれないけれど、とりあえず体重が落ちてから考えれば良いという方針。脂肪ためやすくなくても食べる量もとに戻したら太るだろうし。

一気に痩せると代謝が落ちてリバウンドする

同上。それはそうなんだろうけど、食べる量戻したら一気に痩せなくてもいつかはもとに戻る気がする。

朝昼を食べて夜を減らす

これもそうなんだろうけど、トータルカロリーの方を重視。朝・昼そんなに食べなかったら、夜を敢えて減らしたりはしない。

1ヶ月目の結果

寝起きの体重が68 kg >>63.8kg。まあ順調なスタート。とりあえず一度58kgくらいまでは落としてしまい、それから筋肉量の調整などに移りたいとは思っている。

2ヶ月目の結果

寝起きの体重が63.8kg >> 61.6 kg。飲み会が2度あったからまあこんなものかな。来月はとりあえず50kg台に持っていきたい。

D

en_US English ja 日本語 zh_CN 中文

python3でランダムな強度座標で描かれた画像をグリッドの定点座標で描写し直す

また投稿タイトルがイマイチしっくりこなかったのだけど、やりたかったことといえば割とランダムなXY座標点の強度(x,y,I)で描かれている画像を、例えばx,y座標0.1刻みずつといった定点のグリッドの強度座標に直したかったということ。

データは以下のような感じ。ある程度格子に近い座標にデータはあるけれど、それぞれの座標は定点に乗っているわけではないという感じ。

X Y I

-0.87 -0.84 3.5
-0.32 -0.83 10
-0.09 -0.85 4.5
0.08 -0.87 5.3
0.35 -0.88 6.2
0.90 -0.84 3.1

-0.85 -0.74 4.5
-0.31 -0.73 15
-0.13 -0.75 2.2
0.07 -0.77 3.6
0.35 -0.78 11
0.88 -0.74 5.2

... ... ...

-0.86 0.84 35
-0.33 0.83 12
-0.12 0.85 53
0.11 0.87 12
0.32 0.88 18
0.94 0.84 19

大概の場合このままのランダム座標で処理して困ることもないのだけど、別の座標系に変換したいってときにグリッドデータから変換したほうが都合が良かったってことがあって、座標点をグリッドの定点に書き換えるってことを試したのがこの投稿。

とりあえずtkinterでdataの読み込み。

tk = Tk()
tk.withdraw()
print ('select a data files')
filenames = tkfd.askopenfilenames(filetypes= [('text','*.dat')], initialdir='./DATA')
tkms.showinfo('file paths are',filenames)
tk.destroy()
data = [0]*len(filenames)
basename = [0]*len(filenames)
for i in range(len(filenames)):
  data[i] = np.loadtxt(filenames[I])
  basename[i] = os.path.basename(filenames[i]+str(i)+'.txt')

scipyのinterpolate.griddataで強度座標の変更

使ったのはscipyのinterpolate.griddataを試してみることに。

展開するためのグリッド座標点を準備する。numpyのmgridなりmeshgridなりを使って。

#meshgridで。グリッドの粗さはdataに合わせて
xi = np.linspace(-0.1,0.1,100)
yi = np.linspace(-0.1,0.1,100)
x_grid,y_grid = np.meshgrid(xi,yi)
#mgridならこんな感じ
x_grid,y_grid = np.mgrid[-0.1:0.1:101j,-0.1:0.1:101j]

読み込んだdataを並び換えてから、griddataを使う。interpolateのオプションは3種類cubic, linear, nearest。

for i in range(len(filenames)):
  coords=np.vstack((data[i][:,0].flatten(),data[i][:,1].flatten())).T
  grid_data1 = griddata(coords,data[i][:,2].flatten(),(x_grid,y_grid),method='cubic')
  grid_data2 = griddata(coords,data[i][:,2].flatten(),(x_grid,y_grid),method='linear')
  grid_data3 = griddata(coords,data[i][:,2].flatten(),(x_grid,y_grid),method='nearest)

できた座標をpyplotのscatterを使ってプロット。

  r_min = 0
  r_max = -1
  v_min=0
  v_max=50
  fig,ax=plt.subplots(2,2)
  ax[0,0].scatter(data[i][r_min:r_max,0],data[i][r_min:r_max,1],c=data[i][r_min:r_max,2],cmap=cm.gist_rainbow,marker='s',vmin=v_min,vmax=v_max,s=plotsize)
  ax[0,0].title.set_text('original')
  ax[0,1].scatter(x_grid,y_grid,c=grid_data1,cmap=cm.gist_rainbow,marker='s',vmin=v_min,vmax=v_max,s=plotsize)
  ax[0,1].title.set_text('cubic')
  ax[1,0].scatter(x_grid,y_grid,c=grid_data2,cmap=cm.gist_rainbow,marker='s',vmin=v_min,vmax=v_max,s=plotsize)
  ax[1,0].title.set_text('linear')
  ax[1,1].scatter(x_grid,y_grid,c=grid_data3,cmap=cm.gist_rainbow,marker='s',vmin=v_min,vmax=v_max,s=plotsize)
  ax[1,1].title.set_text('nearest')
  #なんか良い方法が見つからなかったんだけど軸設定はもう少しスッキリかける?
  ax[0,0].set_xlim(-0.1,0.1)
  ax[0,1].set_xlim(-0.1,0.1)
  ax[1,0].set_xlim(-0.1,0.1)
  ax[1,1].set_xlim(-0.1,0.1)
  ax[0,0].set_ylim(-0.1,0.1)
  ax[0,1].set_ylim(-0.1,0.1)
  ax[1,0].set_ylim(-0.1,0.1)
  ax[1,1].set_ylim(-0.1,0.1)
  plt.savefig('FIGURE/TEST/'+'griddata'+basename[i]+'orig.png')

それで画像はこんな感じ。

griddata

見た感じcubicとlinearはそれなりに良さそうに見える。実際にこんな座標変換が許されるかはデータと目的次第でしょうので、必要なデータ処理にバイアスがかかってないかはチェックする必要があるでしょう。

さて、これでだいたい良いって場合もあるかもしれないけれど、このdataの場合だと中心のマスク部分の座標点が取り除かれている処理がされているので、その座標点分がintnerpolateで高強度に染められてしまうという問題?が。

numpyのmeshgridをマスクする

そもそもscipyの違うモジュールでやるって手もあるんだろうけど、今回は単純にグリッドの座標にマスクを追加して修正。

#mask xy grid for center
  x1,x2,y1,y2 = 0.0125, -0.0101, 0.0138, -0.0152
  rect = (x_grid < x1) & (x_grid>x2) & (y_grid < y1) & (y_grid > y2)
  x_grid=x_grid[~rect]
  y_grid=y_grid[~rect]

もしくはnanに変更するとか。

  x_grid[rect]=np.nan
  y_grid[rect]=np.nan

これで画像はこんな感じに。ちょっとマスクのサイズ間違ってるっぽいけど、まあ良いでしょう。

maskをつけて

という感じで一応定点グリッドに座標を移し替えられました、という投稿でした。

関連記事

1. pythonのまとめ

D

 

 

en_US English ja 日本語 zh_CN 中文

フィンランドで保育園päiväkotiをエスポーからヘルシンキに変更したときのあれこれ

久しぶりに海外育児関係の投稿。ちょっとセンシティブ?な内容も含むので、必要のない方は読まなくていい感じの投稿かも。

さて、私達フィンランドのエスポーに住んでいたのだけど、最近ヘルシンキの外れに引っ越した。海外だと引っ越し自体もそれなりに大変なものだけど、一番の心配事というと子供のデイケア(päiväkoti)・幼稚園の変更。
最近エスポーのデイケアにようやく馴染んできたところでもあったのだけど、嫁の新しいヘルシンキの職場が遠すぎたのでそうも言っていられず。

息子のL君はエスポーの時は近所の公立のデイケアに通っていたので、ヘルシンキでも同じように公立にしようかなと思っていた。
嫁の就職に関連した引っ越しだったので、ヘルシンキのデイケアの申請は2週間前までにすれば、移動手続きができるとのこと(それ以外の理由だと4ヶ月?必要)。申請先はヘルシンキのシティーオフィス。

それでちょうど2週間前くらいに申請したところ、引っ越しの数日前に引越し先の近所のデイケアの一つに入れるとの連絡が来た。残念ながら第一希望で出していた保育園ではなかったのだけど、アパートからはほどよく近い場所。嫁Xが働き始めるまえにデイケアが見つかったー、ということで一安心していたのだった。

それで引っ越しの済んだ翌週に指定されたデイケアに子供を連れて行ったのだけど、ちょっと驚きがーーエスポーの元のデイケアとは、だいぶ様相が異なっていたのだ。端的に書くならば、ネイティブのフィンランド系じゃない人口が大多数(私もパッと見かなり多いなと思ったのだけど、嫁が言うには9割?)を締めていたのだ。子供たちだけでなく先生やサポーターの職員も。

引っ越した地域自体は特に偏った人口分布をしているというわけではないのでまず驚きだったのだけど、とりあえず子供を預けて様子を見つつ周辺の情報収集をしてみることに。

フィンランドの公立デイケアにネイティブフィンランド系の人がほぼいないってのが驚きだったってこともあり、まずは地域の他の保育園の調査。ぱっと外から眺めてみた感じだけど、他のデイケアはエスポーにいたときの感じとほぼ変わらないように見える。
ついでに近所に住んでいる嫁の同僚にも聞いてみたけれど、彼の子供の通うデイケアは私達のエスポーの時のものと似たような感じのよう(多かれ少なかれ人口比の縮図って感じ)。良いか悪いかって話とはまた別なのだけど、どうやら私達の入ったデイケアだけがこの地域では特徴的であったようだ。

それでもL君がすっと馴染めるようならこのままでもいいかなって気もしていたのだけど、元のエスポーのデイケアとあまりに雰囲気が違うせいなのかうまく馴染むことができず。数日でデイケアに行きたくないと泣き叫ぶように。いや、もともとエスポーのときからデイケア行きたくないっていうことは結構あったのだけど、ここまで泣き叫ぶってのはちょっと極端。

これはどうしたもんかなーって悩んでいたところに、情報収集にコンタクトしていた私立デイケアの一つに空きがあるとの連絡がくる。結局私達はその私立のデイケアに移動することにした(こちらは数日ですぐに順応できて、今では暇があればデイケアに行きたいと自分から言うくらい)。

ちなみにKERAの補助が得られる場合は、公立に比べて私立のデイケアがさほど値段が高いというわけでもない。ヘルシンキの私達のとこの場合は月額で100ユーロちょっとプラスってくらい。エスポーだと私立でもほぼ同じ値段になるくらいのとこもあるみたいだけど。

というわけでフィンランドの公立のデイケアでもそういった偏りがてきている場合もある、っていうのは情報としてシェアしておいてもいいかなと思ってこの投稿を書いている。
もちろんフィンランドが重視する多文化共生ってのはとても重要なんだろうけど、フィンランドネイティブじゃない文化がフィンランドの公立デイケアの大多数を締めてるってのは予想できないし、この場合ちょっと多文化ってのとは違うんじゃないかなとは思ってしまった。
事前にデイケアの内情を知ることができて選択肢の一つとして提示されている、っていうのなら良いのだけど、引っ越しのときのデイケア選択って必ずしもそういう感じじゃないんだよなあ。それに一旦決まった公立デイケアから移動するのって大変なんだ。今回はたまたま私立のデイケアに空きがあったけど、そういう場合だけではないだろうし。

うーん、自分の子供を通わせるってのでなければまた見方も変わるのかもしれないけれど、子育て中だと少し、いやかなり守備的になってしまうのはしょうがないよなあ。うーん、わからないな。

いずれにしろ、このあたりのことが気になる人の場合は事前に入るかもしれない地域のデイケアをいくつかチラ見しておくのは良いかもしれない。とはいえ、公立デイケアってどこもいっぱいだったりするので、希望してもそこに入れるかはわからないのだけどね……子供がコミュ強な子だったらどんなとこでもさほど問題にもならないのだろうけどねえ。

関連記事

1. 海外出産・海外育児のまとめ

D

en_US English ja 日本語 zh_CN 中文

フィンランドで滞在許可証の更新 〰2021年

前回少し長めの滞在許可証をもらっていたので、久しぶりの滞在許可証の更新手続き。

さほど代わり映えしないなと書類などを準備してたんだけど、コロナの影響なのか申請システムに変更点が一つ。
EnterFinlandで電子申請をする際、オンラインバンクなどのセキュリティー認証システムが使える人は、移民局のオフィスでの面接がスキップできる可能性があるのだそう。
滞在許可証用の写真を写真屋で撮ってデジタルデータで送らないといけない、などの縛りはあるけれど、条件を満たす人にとっては面接スキップできるってのは結構大きなメリットなのではなかろうか。

私達の家族の場合は、嫁Xがオンライン認証を持っていなかったので前回までと更新手続きやら必要書類やらは変わらず。
むしろ面接の際に、直近6ヶ月の給与明細やら銀行口座の取引履歴などの追加書類を提出するように要請された。

オンラインシステムを簡略化してる分面接の方を丁寧にやってる、とかなのかな? まあ、たまたま、抽出検査に引っかかったのかもしれないけれど。

ついでに滞在許可証の更新許可までの時間も前回の時より少し長めにかかった。まあ最終的に貰えるならば時間がかかったとしても問題はないのだけど。

下リンクは前回までの滞在許可証を更新したときの手続き。

フィンランドで滞在許可証を更新するプロセス

フィンランドの滞在許可証の更新・2回目

D

en_US English ja 日本語 zh_CN 中文

MacOSをCatalinaにアップデートしたら日本語変換がおかしくなった

仕様なのかそうでないのかは知らないけれど、MacOSのアップグレードをしたらmac標準の日本語入力システム(ひらがな)が大変おかしなことになった。特に小文字系やらアルファベットに対してやたらと長文の変換をさせてこようとしたり、かな入力のときのアルファベットがなぜか違うアルファベットになったりーーちょっと鬱陶しいのレベルを超えて、タイプミスやら誤字脱字が頻出するようになってしまう。
もともと、最近のMacの日本語入力は評判良くなかったわけだけど、これではちょっと使い物にならない……ということで代替手段を探すことに。

Google日本語入力をインストール

適当にWebサーチして見つかったのはGoogle日本語入力。フリーの日本語入力だしMacで使えるし、まあGoogleだしってことで迷わずインストール。変換システムがMacネイティブとは少し異なるので慣れるまでに少し時間がかかりそうだけど、使い勝手に問題はなさそう。

ctr+shift+J,K,Lなどでアルファベットと日本語入力を切り替えられるのはMacネイティブの時と変わらず。ストレスフリー。というわけで暫くは日本語入力はGoogle日本語入力で行く予定。

2021/3/25追記:

カッコ開きのカッコのタイプ(「【『(に合わせてカッコ閉じをあわせてくれるのが地味に便利。マックネイティブのやつにはなかった。

D

 

en_US English ja 日本語 zh_CN 中文

Mac OS をcatalinaにアップデートしたらpyopenclにエラーが出るのでその対策

MacOSをアップデートしたらpythonプログラム走らせるのにエラーが出る様になった話。簡単に対応はできるけど、いつも忘れるので一応投稿しておく。

エラーは以下の様な感じ。

pyopencl._cl.RuntimeError: clBuildProgram failed: BUILD_PROGRAM_FAILURE

対策は

export PYOPENCL_NO_CACHE=1

をプログラム使う前にexportするだけ。

.bash_profile 

に書きこんどきゃいいのかな。あれ、macてzshに変わったんだっけ。.zshrcを編集しなきゃなのかと思ったら、bash_profileしか見つからない。んー、どうなってるんだろ。

2021/05/03追記:

Catalinaで違うPythonプログラム(pyFAI)を使ってたら似たようなエラーをくらったので追記。

上記のexportでは解決せず。というかこれはcatalinaの問題ではなく、プログラムの方のopenclの使い方の問題。

解決方法はpyopenclをUninstallして、macOSのOpenCLが使われるようにしただけで問題なく動いた。

どのOpenCL使うか指定するのでも良いかもしれないけど、やり方がわからなかったのでアンインストした。どこかで他のプログラムが動かなくなる予感はあるが。

D

en_US English ja 日本語 zh_CN 中文

電源ヒューズが切れた! in フィンランド!

二日酔いの朝に寝ぼけながら着替えていたら、ぶら下がりタイプの照明に腕を激突。明かりがブツっと音を立てて消えたので、これは照明のケーブルをやっちゃたかなあ、とだるめの二日酔いと合わせて憂鬱な気分になる。

しばらくそのまま朝のあれこれ準備してたんだけど、気付いたらWi-Fiが落ちていたり、他の電気製品が使えなくなっていたりーーこれは、照明が壊れたんじゃなくて、ブレーカーが落ちたのか、と思い当たる。

うちのマンションではブレーカーなどが入ってるブレーカーボックス(?)、は入り口近くについている。前のマンションでも大体同じ場所についてたから、大体そうなのかな。

写真の一番下のやつが大元のブレーカーで、これが切れてるだけっていうならスイッチを入れ直せばいいだけなんだけど、今回はブレーカーは落ちてない。

家の全部の電気が使えなくなったわけではなく、一部の電源が落ちてるだけだったので、どれかのヒューズだけが壊れたってので間違いはないのだろうけど……意外とどのヒューズがどの部屋と繋がってるのかはわかりにくい。あ、ちなみにヒューズは上の写真の円形の目玉おやじ見たいのをくるくる回すと中から取り出せる。

それで適当にネット検索したらヒューズが落ちた場合真ん中の円形のが飛び出してくるのだそう。なんとなくそれっぽいヒューズを1個取り出してみる。

あっ! これかっっ!!

ってことで、このヒューズを交換したら無事におうちに電源が戻りましたよって言うお話でした。

ちなみにブレーカーボックスの中に変えのヒューズはすでに準備されていた。前の住人が準備したのか、マンションの管理人が準備してたのかは謎。

D

en_US English ja 日本語 zh_CN 中文

python3のmatplotlibでグラフを出力する時のグラフサイズの調整

普段プログラム中でmatplotlibを使うときは、随所でplt.plot()でプロットしてplt.show()で確認しつつplt.savefig(bbox_inches=’tight’)で保存してって感じで使っていることが多い。

それはそれでいいのだけど、いくつかの同じタイプの絵をまとめて他の人に見せようと思ったら微妙に軸の長さがずれている。なんでかなってみてたら、X軸のラベルのサイズで全体のスケールが変わっていた模様。これをどうしたら直せるのかと、bbox_inchesとtight_layoutのオプションをいじりながら遊んでみたのが今回の投稿。

……ってなことをやろうと思って書いてたんだけど、書き終わってみたらbbox_inchesを普通に使うんで問題なかった。悲しい。なんで最初の絵ずれてたんだろ、多分変なことしてたんだと思う。

rcParamsでまずは全体のプロットの外観調整

plt.rcParams['font.family']='Arial'
plt.rcParams['font.size']= 14
plt.rcParams['axes.linewidth']=2.5
plt.rcParams['xtick.major.width']=2.5
plt.rcParams['xtick.labelsize']=14
plt.rcParams['ytick.major.width']=2.5
plt.rcParams['ytick.labelsize']=14
plt.rcParams['figure.figsize']=(4,4)

rcParamsを使うのがいいのかは知らないけど、大体のセッティングを最初にできるので大概のプログラムでは突っ込んでいる。figsizeが基本的に絵のサイズ。

plotはまあなんでもいいのだけど、一応以下のようなプロット。一応subplotsを使う設定で。

#Xラベルの長さを変える
Title = ['aaa','bbb','ccc','ddd','eee','fff']
#Title2 = ['aaaaaa','bbbbbb','cccccc','dddddd','eeeeee','ffffff']
data1=np.array([165,201,224,158,178,207])
Err1=np.array([1,4,1,2,4,10])
data2=np.array([380,420,418,435,412,409])
Err2=np.array([10,19,12,20,18,34])
fig, ax1 = plt.subplots()
ax1.set_ylabel('y1',fontname='Arial')
ax1.errorbar(Title,data1,yerr=Err1,capsize=10,marker='o',ms=11,color='orange',fillstyle='none',linestyle = 'None')
ax2=ax1.twinx()
ax2.set_ylabel('y2',fontname='Arial')
ax2.errorbar(Title,data2,yerr=Err2,capsize=10,marker='D',ms=11,color='b',fillstyle='none',linestyle = 'None')

このプロット用の描画設定。

ax1.tick_params(axis ='x', which ='both', top='off',bottom='off', pad=10)
ax1.set_ylim(150,250)
ax1.set_yticks([150,200,250])
ax1.tick_params('x',labelrotation=90)
ax2.set_ylim(250,650)
ax2.set_yticks([200,400,600,800])

絵のセーブのオプションでサイズの最終調整。

bbox_inchesの場合。

fig.savefig('FIGURE/test1.png',bbox_inches='tight')

bbox_inchesでpad_inchesも0にして。

fig.savefig('FIGURE/test2.png',bbox_inches='tight',pad_inches=0)

tight_layoutを使って。

fig.tight_layout()
fig.savefig('FIGURE/test3.png')

ちなみにpyplotからplt.savefigにしても違いはない。

1個目。

test1

2個目。

test2

3個目

test3

 

というわけでbbox_inchesを使っておけば問題ない。

むしろtight_layourt()の方がラベルサイズとか揃ってないプロットにはよくなさげ。画像の全体サイズを合わせたいならこっちだけど。

下のように軸の高さ・幅を抜いて割らないとってなぜか最初に思ってたんだけど、別にそんなことはなかった。

width = ax1.figure.subplotpars.right-ax1.figure.subplotpars.left
height = ax1.figure.subplotpars.top-ax1.figure.subplotpars.bottom
ax1.figure.set_size_inches(4/width,4/height)

まあ、あとで何かに使えるかもしれないし、一応載せておく。任意の長さに軸サイズを調整したいって時なんかに使えるのかな。

うん、久しぶりにちょっと意味不明な投稿だ。

関連記事

1. pythonのまとめ

D