

初歩的な点ですが、networkxを用いてmatplotlibを日本語表記にするにはどうしたらよいでしょうか?  
japanize-matplotlibをimportしましたが、豆腐になってしまいます。  
ご助言頂けますと幸いです。

[code]

    # 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()
    
[/code]


CC BY-SA 4.0
2020-03-08T15:31:05.117
63669
2021-02-10T02:10:52.097
2021-02-10T02:10:52.097
3060
38030
question
python matplotlib networkx
networkxにおけるmatplotlibでの日本語表記


コメントで解決したようですが、その後の補足を含めて回答化

IPAexフォントをmatplotlibのフォルダにコピーして解決したようですが、直接的な原因はパラメータ指定のコーディングミスです。

[code]

    # 近接中心性を用いた重みづけ
    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)
    
[/code]

長いので折り返しました。  
この最後の`font_family=IPAexGothic`のフォント名をシングルクォーテーションで囲っていないことが原因です。これを`font_family='IPAexGothic'`にするだけで日本語表示が出来ます。

もう少し前の段階から言うと、`matplotlib`の元々のフォントリストの中に日本語表示できるフォントがあれば`japanize_matplotlib`や`IPAexGothic`も不要で、例えばWindowsなら`font_family='MS
Gothic'`で日本語表示が出来ます。

* * *

`matplotlib`と`networkx`の組み合わせた時に、`networkx`側の機能には反映されないようですが、`matplotlib`単体の時はプログラムの最初に以下のように日本語表示フォントを指定しておけば、いちいち文字列表示の際に個々にフォント指定をする必要がなくなるようです。

[code]

    import matplotlib
    
[/code]

しておいて、

[code]

    matplotlib.rcParams['font.family'] = 'MS Gothic'
    
[/code]

または

[code]

    matplotlib.rc('font', family='MS Gothic')
    
[/code]

を実行する。`'MS Gothic'`の部分は好みの日本語表示可能フォントを指定する。

MacOSやLinux/Unix系はチョコチョコ問題があるらしいのでIPAフォントをインストールしておくのが良いようですね。

* * *

参考  
[pip install して import するだけで matplotlib
を日本語表示対応させる](https://qiita.com/uehara1414/items/6286590d2e1ffbf68f6c)  
[macOSのmatplotlibで日本語フォントを利用できるようにする](https://qiita.com/akiya3/items/0c8d365cbdafabb5b0da)  
[matplotlibの日本語文字化けを解消する(Windows編)](https://datumstudio.jp/blog/matplotlib%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E3%82%92%E8%A7%A3%E6%B6%88%E3%81%99%E3%82%8Bwindows%E7%B7%A8)  
[Matplotlibで簡単に日本語を表示する方法（Windows）](https://gammasoft.jp/blog/matplotlib-
japanese-fonts/)  
[sudo権限がない環境でmatplotlib/networkXの豆腐を避ける方法](https://qiita.com/calderarie/items/6ee94b8e2201104efd78)

令和対応のIPAフォント  
[IPAexフォント Ver.004.01](https://ipafont.ipa.go.jp/node193)  
[IPAmj明朝フォント](https://mojikiban.ipa.go.jp/1300.html)


CC BY-SA 4.0
2020-03-10T01:12:04.727
63713
2020-03-10T01:12:04.727
26370
63669
answer