<jupyter_start><jupyter_text>4.3 matplotlib  日本語でラベルを表示> matplotlibrcという名前で下記パスに作成する  > MacOS: ~/.matplot/  > `font.sans-serif: IPAexGothic, SimHei`>  或者使用下面语句  > `plt.rcParams['font.sans-serif'] = ['SimHei']  plt.rcParams['axes.unicode_minus'] = False`<jupyter_code># 配置文件地址
import matplotlib
matplotlib.matplotlib_fname()

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['IPAexGothic']
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
import matplotlib.style

# ggplotスタイルの指定
matplotlib.style.use('ggplot')

fig, ax = plt.subplots()

ax.set_title('日本語のタイトルを設定')
ax.text(2, 6, '文字列を描画', size=20)

x = [1, 2, 3]
y = [10, 2, 3]
labels = ['スパム', 'ハム', '玉子']
ax.bar(x, y, tick_label=labels, label='食べ物')

plt.show()<jupyter_output><empty_output><jupyter_text>4.3.1 Matplotlibの概要<jupyter_code>import matplotlib.pyplot as plt<jupyter_output><empty_output><jupyter_text>MATLABスタイル<jupyter_code>import matplotlib.style

# ggplotスタイルの指定
matplotlib.style.use('ggplot')
# データを用意
x = [1, 2, 3]
y = [2, 4, 9]

plt.plot(x, y) # 折れ線グラフを描画
plt.title('MATLAB-style') # グラフにタイトルを設定

plt.show() # グラフを表示<jupyter_output><empty_output><jupyter_text>オブジェクト指向スタイル<jupyter_code># データを用意
x = [1, 2, 3]
y = [2, 4, 9]

# 描画オブジェクト(fig)とサブプロット(ax)を生成
fig, ax = plt.subplots()

ax.plot(x, y) # 折れ線グラフを描画
ax.set_title('OOP-style') # イトルを設定

plt.show() # グラフを表示<jupyter_output><empty_output><jupyter_text>4.3.2 描画オブジェクト  描画オブジェクトとサブプロット<jupyter_code>import matplotlib.pyplot as plt
fig, axes = plt.subplots(2) # 2つのサブプロットを配置
plt.show()
fig, axes = plt.subplots(2, 2) # 2行２列の4個サブプロットを配置
plt.show()
fig, axes = plt.subplots(ncols=2) # １行２列のサブプロットを配置
plt.show()<jupyter_output><empty_output><jupyter_text>グラフのスタイル<jupyter_code>import matplotlib.style

# スタイルの一覧を表示
print(matplotlib.style.available)
# グラフのスタイルにclassicを指定
matplotlib.style.use('classic')

fig, ax = plt.subplots()
ax.plot([1, 2])

plt.show()<jupyter_output><empty_output><jupyter_text>タイトル<jupyter_code>fig, axes = plt.subplots(ncols=2)

# サブプロットにタイトルを設定
axes[0].set_title('日本語もだいじょうぶ')
axes[1].set_title('中文也是没啥问题的')

# 描画オブジェクトにタイトルを設定
fig.suptitle('figure title')

plt.show()<jupyter_output><empty_output><jupyter_text>軸ラベル<jupyter_code>fig, ax = plt.subplots()

ax.set_xlabel('x label') # x軸にラベルを設定
ax.set_ylabel('y label') # y軸にラベルを設定

plt.show()<jupyter_output><empty_output><jupyter_text>凡例<jupyter_code>fig, ax = plt.subplots()

# 凡例用のラベルを設定
ax.plot([1,2,3], [2, 4, 9], label='legend label')
ax.legend(loc='best') # 凡例を表示

plt.show()
fig, ax = plt.subplots()

# 凡例用のラベルを設定
ax.plot([1,2,3], [2, 4, 9], label='legend label')
ax.legend(loc='lower right') # 凡例を表示

plt.show()<jupyter_output><empty_output><jupyter_text>> 'upper left', 'center', 'center left', 'lower center', 'best'  ファイルの出力<jupyter_code>fig, ax = plt.subplots()
ax.set_title('subplot title')
fig.savefig('sample-figure.png') # png形式で保存
fig.savefig('sample-figure.svg') # svg形式で保存<jupyter_output><empty_output><jupyter_text>4.3.3 グラフの種類と出力方法  折れ線グラフ<jupyter_code>fig, ax = plt.subplots()

x = [1, 2, 3]
y1 = [1, 2, 3]
y2 = [3, 1, 2]
ax.plot(x, y1) # 折れ線グラフを描画
ax.plot(x, y2)

plt.show()
import numpy as np

x = np.arange(0.0, 15.0, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

fit, ax = plt.subplots()
ax.plot(x, y1, label='sin')
ax.plot(x, y2, label='cos')
ax.legend()

plt.show()<jupyter_output><empty_output><jupyter_text>棒グラフ<jupyter_code>fig, ax = plt.subplots()

x = [1, 2, 3]
y = [10, 2, 3]
ax.bar(x, y) # 棒グラフを描画

plt.show()
# tick_label 目盛りにラベルを指定
fig, ax = plt.subplots()

x = [1, 2, 3]
y = [10, 2, 3]
labels = ['スパム', 'ハム', '玉子']
ax.bar(x, y, tick_label=labels) # ラベルを指定

plt.show()
# barh
fig, ax = plt.subplots()

x = [1, 2, 3]
y = [10, 2, 3]
labels = ['スパム', 'ハム', '玉子']
ax.barh(x, y, tick_label=labels)
plt.show()
fig, ax = plt.subplots()
x = [1, 2, 3]
y1 = [10, 2, 3]
y2 = [5, 3, 6]
labels = ['spam', 'ham', 'egg']

width = 0.4 # 棒グラフの幅を0.4にする
ax.bar(x, y1, width=width, tick_label=labels, label='y1') # 幅を指定して描画

#　幅分ずらして棒グラフを描画
x2 = [num + width for num in x]
ax.bar(x2, y2, width=width, label='y2')

ax.legend()
ax.set_title("複数の棒グラフを並べて描画")

plt.show()
fig, ax = plt.subplots()
x = [1, 2, 3]
y1 = [10, 2, 3]
y2 = [5, 3, 6]
labels = ['spam', 'ham', 'egg']

# y1とy2を足した値を格納
y_total = [num1 + num2 for num1, num2 in zip(y1, y2)]

# y1とy2を足した高さの棒グラフを描画
ax.bar(x, y_total, tick_label=labels, label='y1')
ax.bar(x, y2, label='y2')

ax.legend()
ax.set_title("積み上げ棒グラフを描画")

plt.show()<jupyter_output><empty_output><jupyter_text>散布図<jupyter_code># scatter
fig, ax = plt.subplots()

# ランダムに５０個要素を生成
np.random.seed(123)
x = np.random.rand(50)
y = np.random.rand(50)

ax.scatter(x, y) # 散布図を描画
plt.show()
# marker 
fig, ax = plt.subplots()

# ランダムに５０個要素を生成
np.random.seed(123)
x = np.random.rand(50)
y = np.random.rand(50)

ax.scatter(x[0:10], y[0:10], marker='v', label='triangle down') # 下向き三角
ax.scatter(x[10:20], y[10:20], marker='^', label='triangle up') # 上向き三角
ax.scatter(x[20:30], y[20:30], marker='s', label='square') # 正方形
ax.scatter(x[30:40], y[30:40], marker='*', label='star') # 星型
ax.scatter(x[40:50], y[40:50], marker='x', label='x') # X

ax.legend()

plt.show()<jupyter_output><empty_output><jupyter_text>ヒストグラフ （直方图）<jupyter_code># hist
# 正規分布に従うランダムな値
np.random.seed(123)
mu = 100 # 平均値
sigma = 15 # 標準偏差
x = np.random.normal(mu, sigma, 1000)

fig, ax = plt.subplots()

# ヒストグラフを描画
n, bins, patches = ax.hist(x)
ax.set_title("ビストグラフを描画")
plt.show()
for i, num in enumerate(n):
    print('{:.2f} - {:.2f}: {}'.format(bins[i], bins[i + 1], num))
fig, ax = plt.subplots()
ax.hist(x, bins=25) # ピンの数を指定して描画
plt.show()
fig, ax = plt.subplots()
# 横向きのヒストグラフを描画
ax.hist(x, orientation='horizontal') 
plt.show()
# 複数の値
np.random.seed(123)
mu = 100 # 平均値
x0 = np.random.normal(mu, 20, 1000)

# 異なる標準偏差でデータを生成
x1 = np.random.normal(mu, 15, 1000)
x2 = np.random.normal(mu, 10, 1000)

fig, ax = plt.subplots()
labels = ['x0', 'x1', 'x2']
# 3つのデータのヒストグラフを描画
ax.hist((x0, x1, x2), label=labels)

ax.legend()
plt.show()
# stacked = True 積み上げたヒストグラフ
fig, ax = plt.subplots()

labels = ['x0', 'x1', 'x2']
# 積み上げたヒストグラフを描画
ax.hist((x0, x1, x2), label=labels, stacked=True)
ax.set_title("積み上げたヒストグラフ")
ax.legend()
plt.show()<jupyter_output><empty_output><jupyter_text>箱ひげ図<jupyter_code># boxplot
# 異なる標準偏差でデータを生成
np.random.seed(123)
x0 = np.random.normal(0, 10, 500)
x1 = np.random.normal(0, 15, 500)
x2 = np.random.normal(0, 20, 500)

fig, ax = plt.subplots()
labels = ['x0', 'x1', 'x2']
ax.boxplot((x0, x1, x2), labels=labels)

plt.show()
# boxplotメソードの引数にvert=False、横向き
fig, ax =plt.subplots()
labels = ['x0', 'x1', 'x2']
ax.boxplot((x0, x1, x2), labels=labels, vert=False)

plt.show()<jupyter_output><empty_output><jupyter_text>円グラフ<jupyter_code># pie
labels = ['spam', 'ham', 'egg']
x = [10, 3, 1]
fig, ax = plt.subplots()
ax.pie(x, labels=labels)
# ax.axis('equal')　#　アスペクト比を保持して描画する
plt.show()
# pie ax.axis('equal')
labels = ['spam', 'ham', 'egg']
x = [10, 3, 1]
fig, ax = plt.subplots()
ax.pie(x, labels=labels, startangle=90, counterclock=False) # 上から時計回り
ax.axis('equal')
plt.show()
fig, ax = plt.subplots()
ax.pie(x, labels=labels, startangle=90, counterclock=False, shadow=True, autopct='%1.2f%%') #影と％表記を追加
ax.axis('equal')
ax.set_title('影と％表記')
plt.show()
# 目立たせるためexplode引数
explode = [0, 0.2, 0] # １番目の要素（ham）を切り出す

fig, ax = plt.subplots()

ax.pie(x, labels=labels, startangle=90,
      counterclock=False, shadow=True,
      autopct='%1.2f%%', explode=explode) # explode を指定する
# ax.axis('equal')
plt.show()<jupyter_output><empty_output><jupyter_text>複数のグラフを組み合わせる<jupyter_code># 棒グラフと折線グラフ
fig, ax = plt.subplots()

x1 = [1, 2, 3]
y1 = [5, 2, 3]
x2 = [1, 2, 3, 4]
y2 = [8, 5, 4, 6]
ax.bar(x1, y1, label='y1') # 棒グラフ
ax.plot(x2, y2, label='y2') # 折線グラフ
ax.legend()

plt.show()
# ヒストグラフに折れ線グラフを追加して近似曲線を描画する
np.random.seed(123)
x = np.random.randn(1000) # 正規乱数を生成

fig, ax = plt.subplots()

# ヒストグラフ
counts, edges, patches = ax.hist(x, bins=25)

# 近似曲線に用いる点を求める（ヒストグラフのビンの中点）
x_fit = (edges[:-1] + edges[1:]) / 2
# 近似曲線のプロット
y = 1000 * np.diff(edges) * np.exp(-x_fit**2 / 2) / np.sqrt(2 * np.pi)
ax.plot(x_fit, y)

plt.show()<jupyter_output><empty_output><jupyter_text>4.3.4 スタイル  色の設定<jupyter_code>fig, ax = plt.subplots()

# 線の色を名前で指定
ax.plot([1, 3], [3, 1], label='aqua', color='aqua')
# 16進数のRGBで指定
ax.plot([1, 3], [1, 3], label='#0000FF', color='#0000FF')
# RGBAをfloatで指定
ax.plot([1, 3], [2, 2], label='(0.1, 0.2, 0.5, 0.3)', color=(0.1, 0.2, 0.5, 0.3))
ax.legend()
plt.show()
fig, ax = plt.subplots()
ax.bar([1], [3], color='aqua') # 塗りつぶしの色を指定
#  塗りつぶしの色と枠線の色を指定
ax.bar([2], [4], color='aqua', edgecolor='black')

plt.show()<jupyter_output><empty_output><jupyter_text>線のスタイル<jupyter_code>fig, ax = plt.subplots()

# 5.5 point line
ax.plot([1, 3], [3, 1], linewidth=5.5, label='5.5')
# 10 point line
ax.plot([1, 3], [1, 3], linewidth=10, label='10')
ax.legend()
plt.show()
fig, ax = plt.subplots()
# 破線
ax.plot([1, 3], [3, 1], linestyle='--', label='dashed')
# 一点鎖線
ax.plot([1, 3], [1, 3], linestyle='-.', label='dashdot')
# 点線
ax.plot([1, 3], [2, 2], linestyle=':', label='dotted')
ax.legend()
plt.show()<jupyter_output><empty_output><jupyter_text>フォント<jupyter_code>fig, ax = plt.subplots()

ax.set_xlabel('xlabel', family='fantasy', size=20, weight='bold')
ax.set_ylabel('ylabel', family='cursive', size=40, weight='light')
ax.set_title('graph title', family='monospace', size=25, weight='heavy')
plt.show()

fontdict = {
    'family': 'fantasy',
    'size': 20,
    'weight': 'normal',
}
fig, ax = plt.subplots()

ax.set_xlabel('xlabel', fontdict=fontdict)
ax.set_ylabel('ylabel', fontdict=fontdict)
ax.set_title('graph title', fontdict=fontdict, size=40)

plt.show()<jupyter_output><empty_output><jupyter_text>テキスト描画<jupyter_code>fig, ax = plt.subplots()
ax.text(0.2, 0.4, 'Text', size=20)
plt.show()<jupyter_output><empty_output><jupyter_text>pandasのオブジェクトからグラフ描画<jupyter_code>import pandas as pd
import matplotlib.style
import matplotlib.pyplot as plt

matplotlib.style.use('ggplot')

# DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [3, 1, 2]})
df.plot()
plt.show()
import numpy as np

np.random.seed(123)
df2 = pd.DataFrame(np.random.rand(3, 2),
                  columns=['y1', 'y2'])
df2.plot.bar()
plt.show()
df2.plot.bar(stacked=True)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.20318452671681156, 'fraction_numerical': 0.046595682328807266, 'mean_word_length': 5.695879659908437, 'pattern_counts': {'":': 0, '<': 89, '<?xml version=': 0, '>': 95, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '22', 'dir': 'jupyter-structured-clean-dedup', 'id': '620287', 'license': 'MIT', 'n_tokens_mistral': 5743, 'n_tokens_neox': 5496, 'n_words': 874, 'path': '4.3 matplotlib.ipynb', 'repo_name': 'joyc/data-exam', 'size': '10237'}