【論文】Matplotlibでのグラフ出力 トラブル&解決方法
Matplotlibで論文用のグラフを出力した際に起こったトラブルと解決方法覚え書き
1. epsで出力した画像がLaTex上でうまく表示されない (グラフが画像の枠からはみ出る)
これはmatplotlibがepsを出力する際のbouding box値にバグがあるためらしく、下記のサイトでは一度PDFに変換して再度epsに戻すことで解決していました。
自分の環境では、epsをpdfに変換するのがうまくいかず断念。
結局は LaTexに直接貼るものはpdfで出力することにしました.
ami-gs.hatenablog.com
2. Matplotlibから出力したpdfをLaTexに貼ると、no BoundingBoxとエラーが出る
matplotlibから出力されたpdfをそのままLaTexに貼ろうとすると今度は"no BoundingBox"とエラーが出ました。
これは,LaTexの画像挿入のところで、bbを定義してあげると解決しました。
\includegraphics[bb=0 0 404 295, scale=0.6]
bbの値はLaTexに付属のextractbbコマンドを使うことで入手できる。
画像があるフォルダと同階層で,コマンドプロンプトから
extractbb img.pdf
と入力するとそのフォルダに.xbbファイルが生成され、その中にbb値が存在する.
www.ic.daito.ac.jp
3. matplotlibから出力されたeps、pdfをInkScapeにインポートするとフォントが変わってしまう
matplotlibでは、New Times Romanに設定したグラフがInkScapeにインポートするとSanSerifになってしまう事象がありました。
InkScape上で全て手作業でフォントを直すのはかなり大変なため,matplotlibから出力されるpdfのフォントを埋め込みではなくアウトライン化することで対応。
但し、InkScapeで編集するときに重くなるので注意が必要。
アウトライン化の方法は、
- matplotlib.patheffectsをインポート
- アウトライン化したいtextオブジェクトを取得
- そのtextオブジェクトのset_path_effectsメソッドを引数path_effects.Normal()で実行
import matplotlib.patheffects as path_effects tx = ax.get_xaxis().get_label() tx.set_path_effects([path_effects.Normal()])
【Android】Error: missing feature: WATCH
コードを実行しようとすると上記エラーが発生.
直前でAndroid studioをアップデートしたことと関連しているようで、Manifest内の設定が変わってしまった模様.Target deviceの位置にも”Missing...”と表示される.
リンク先を参考に下記を削除すると解決しました.
【Android】【Spinner】プルダウンで項目を選択できるSpinner
ボタンをクリックするとアイテムのリストがプルダウンで表示されて、そこから項目を選ぶタイプのUI実装方法。
かなりわかりづらい。
シェイプ等を変えず背景色とフォント色のみ設定する場合に必要になるファイルは
Itemが選択されたときに呼ばれるリスナーをセットする。
各ファイルのコード
- ***.java
/** Spinnerの準備 */ ArrayAdapter<String> adapter_mode = new ArrayAdapter<String>(this, R.layout._cutom_spinner_item); adapter_mode.setDropDownViewResource(R.layout._custom_spinner_dropdown); adapter_mode.add("1.***"); adapter_mode.add("2.***"); adapter_mode.add("3.***"); final Spinner spinner_mode = (Spinner) findViewById(R.id.spinner_mode); spinner_mode.setAdapter(adapter_mode); // リスナーを登録 spinner_mode.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { Spinner spinner = (Spinner)adapterView; Spinner_Item = (String)spinner.getSelectedItem(); // Itemが選択されたときに実行するmethod sendModeSig(); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } });
- _custom_spinner_item.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android ="http://schemas.android.com/apk/res/android" style ="?android:attr/spinnerItemStyle" android:singleLine ="true" android:layout_width ="fill_parent" android:layout_height="fill_parent" android:textColor ="@android:color/white" android:backgroundTint="@android:color/white" android:gravity ="center" android:ellipsize ="marquee" android:textAppearance="@style/TextAppearance.AppCompat.Large" />
- _custom_spinner_dropdown.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android ="http://schemas.android.com/apk/res/android" style ="?android:attr/spinnerItemStyle" android:singleLine ="true" android:layout_width ="fill_parent" android:layout_height="fill_parent" android:textColor ="@android:color/white" android:backgroundTint="@android:color/white" android:gravity ="center" android:ellipsize ="marquee" android:textAppearance="@style/TextAppearance.AppCompat.Large" />
こちらが大変参考になりました。感謝。
【Python】Import問題
すごくわかりづらいので自分なりにまとめ。まだ合っている自信がない。
- 明示的相対Import
from . import lib
.(ドット)はimportを実行しようとしているモジュールが属している同一パッケージを示す。
- 絶対Import
sys.pathやPYTHONPATHに登録されているパスからモジュールを捜索する。
sys.pathにはルートのスクリプト/モジュールのパスやカレントディレクトリが含まれ、ルートのスクリプト/モジュールからimportされたスクリプト/モジュールのパスは含まれない
- sys.path
sys.pathの中身はrootのスクリプト/モジュールとそこからimportした先のスクリプト/モジュールとで共通。
e.g.) rootのスクリプトでsys.pathに追加した内容はimportされたスクリプトからでも確認できる。(変数のスコープの様にスクリプト/モジュールごとのpathだと思ってた)
【Android】【debug】 Wifi経由で接続&デバッグ
WifiでAndroid端末にアクセスし、デバッグする方法。
端末のUSBポートをPCと接続しなくて済むのでUSBデバイスを使ったAppのデバッグに最適。
以下はadb.exeにパスが通っている前提。adb.exeは通常、\AppData\Local\Android\Sdk\platform-tools にある。
1. Android端末のIPを調べる
2. PCとAndroid端末を有線で接続する
adb.exe tcpip ポート番号
4. PCとAndroid端末の有線接続を切る
5. TCP/IPで端末と接続
adb.exe connect IP:ポート番号
4. 接続されているかを確認
adb.exe devices
その他
- error: more than one device/emulator と表示された時
adb emu kill
- adbの様子がおかしい時。再起動させる。
adb kill-server adb start-server
【Python】【wxPython】TextCtrlで一部だけ文字の色を変える
WxPythonのTextCtrlで文字を扱う際、全体の文字色は
m_textctrl.SetForegroundColour(色)
で変更できるが、このメソッドでは一部の文字列だけ色を変えることは出来ない。
一部だけ変える場合には
m_text.SetStyle(最初の文字位置, 終わりの文字位置, 色)
で文字の位置を指定してSetStyleで色を指定する