やりたいこと
システムにインストールされているフォント一覧を取得して、それぞれの見え方をプロットして確かめる。
こんな感じ。
コード
解説は省略。そのうち追加するかもなので、ご質問があればぜひ。
表示されるフォントが多すぎるときは、コメントにあるように絞り込んでください。
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 文字化けがあるたびに警告が出るので、それを無視
import warnings
warnings.filterwarnings("ignore")
# フォントの一覧を取得
font_names = sorted(
set([fm.FontProperties(fname=path).get_name() for path in fm.findSystemFonts()]),
reverse=True,
)
# font_names = [
# font_name for font_name in font_names
# if font_name.lower().startswith("l") # フォントの絞り込みに使える
# ]
num_fonts = len(font_names)
# 描画パラメータ
width_column = 15 # 1列の幅。座標上で1列がどれだけの幅を持つか。例文が長すぎて入らないときはここを大きく。
num_columns = 3 # 列数。何列に分割するか。フォントが小さすぎて見えないときは、これを小さくしてみる。
font_size = 60 # フォントサイズ
example_text = '光とカゲの街'
# 種々の調整
num_rows = -(-num_fonts // num_columns)
width = width_column * num_columns
# 描画
fig = plt.figure(figsize=(width, num_rows)) # これで 1inch = 座標上の1単位 になるはず。
ax = fig.add_subplot(
111,
ylim=[0, num_rows], xlim=[0, width],
xticks=[width_column * i for i in range(num_columns)],
yticks=[i + 1 for i in range(num_rows)],
aspect=1, adjustable='box', # アスペクト比を1:1に固定。
)
for i, font_name in enumerate(font_names):
ax.text(
(i % num_columns) * width_column, i // num_columns,
f'{font_name}: {example_text}',
fontdict={'family': font_name, 'fontsize': font_size},
)
fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
ax.grid(True, which='both', axis='both', color="#aaaaaa", linestyle='--', linewidth=4)
fig.show()
余談
こういうコードを覚えておくの、面倒ですよね?
そんなときに使えるのが、VSCodeのこの拡張機能!
ぜひ使ってください。