質問: 初歩的な点ですが、networkxを用いてmatplotlibを日本語表記にするにはどうしたらよいでしょうか? japanize-matplotlibをimportしましたが、豆腐になってしまいます。 ご助言頂けますと幸いです。 ``` # coding=UTF-8 #関数の宣言 import networkx as nx import string import pandas as pd import collections import itertools # import matplotlib.pyplot as plt import numpy as np import numpy.linalg as LA import matplotlib.pyplot as plt import japanize_matplotlib #有向グラフを指定 G=nx.DiGraph() #エッジ(辺)リストをファイルを読み込んで作成 G=nx.read_edgelist("sm.knif.prn",nodetype=str,create_using=nx.DiGraph(),encoding="utf-8") #ノード(頂点)数出力 print(nx.number_of_nodes(G)) #エッジ数出力 print(nx.number_of_edges(G)) #ネットワーク基本情報出力 print(nx.info(G)) #次数分布 print(nx.degree_histogram(G)) #近接中心性を計算 pr=nx.betweenness_centrality(G) plt.figure(figsize=(50,50)) # 近接中心性を用いた重みづけ nx.draw_kamada_kawai(G,node_color=list(pr.values()),cmap=plt.cm.Reds,node_size=[1000000*v for v in pr.values()],with_labels=True,font_family=IPAexGothic) plt.axis("off") plt.show() ```
回答: コメントで解決したようですが、その後の補足を含めて回答化 IPAexフォントをmatplotlibのフォルダにコピーして解決したようですが、直接的な原因はパラメータ指定のコーディングミスです。 ``` # 近接中心性を用いた重みづけ nx.draw_kamada_kawai(G,node_color=list(pr.values()), cmap=plt.cm.Reds,node_size=[1000000*v for v in pr.values()], with_labels=True,font_family=IPAexGothic) ``` 長いので折り返しました。 この最後の`font_family=IPAexGothic`のフォント名をシングルクォーテーションで囲っていないことが原因です。これを`font_family='IPAexGothic'`にするだけで日本語表示が出来ます。 もう少し前の段階から言うと、`matplotlib`の元々のフォントリストの中に日本語表示できるフォントがあれば`japanize_matplotlib`や`IPAexGothic`も不要で、例えばWindowsなら`font_family='MS Gothic'`で日本語表示が出来ます。 `matplotlib`と`networkx`の組み合わせた時に、`networkx`側の機能には反映されないようですが、`matplotlib`単体の時はプログラムの最初に以下のように日本語表示フォントを指定しておけば、いちいち文字列表示の際に個々にフォント指定をする必要がなくなるようです。 ``` import matplotlib ``` しておいて、 ``` matplotlib.rcParams['font.family'] = 'MS Gothic' ``` または ``` matplotlib.rc('font', family='MS Gothic') ``` を実行する。`'MS Gothic'`の部分は好みの日本語表示可能フォントを指定する。 MacOSやLinux/Unix系はチョコチョコ問題があるらしいのでIPAフォントをインストールしておくのが良いようですね。 参考 pip install して import するだけで matplotlib を日本語表示対応させる macOSのmatplotlibで日本語フォントを利用できるようにする matplotlibの日本語文字化けを解消する(Windows編) Matplotlibで簡単に日本語を表示する方法(Windows) sudo権限がない環境でmatplotlib/networkXの豆腐を避ける方法 令和対応のIPAフォント IPAexフォント Ver.004.01 IPAmj明朝フォント