最近サイバーパンク風グラフ流行っていません？

## まずはどんなグラフか？
![alt](https://matplotlib.org/matplotblog/posts/matplotlib-cyberpunk-style/figures/5.png)

その特徴は
* ネオンカラーを使う。
* 基本線の前後に透明度の低い線を引いて、ボケ感を出す。
* 透明度の低い面装飾を追加して、ボケ感を追加する。
* 使用するフォントをサイバーっぽい物を使用する。

## 投稿のキッカケ
* [matplotlib公式サイト](https://matplotlib.org/)に[matplotblog](https://matplotlib.org/matplotblog/)があるのは、皆さんご存知でした？
* このサイトの最新の投稿が[Matplotlib Cyberpunk Style](https://matplotlib.org/matplotblog/posts/matplotlib-cyberpunk-style/)で上記のグラフの作成について解説しています。(2020/03/27 投稿)
* NHKスペシャル▽新型コロナウイルス瀬戸際の攻防〜感染拡大阻止（2020/4/11 PM9:00-PM10:04)でもサイバーパンク風グラフが使用されていました。(2020/4/11放送)
![ 2020-04-14 22.11.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126042/7f3ac96f-a0d4-9226-8a44-d9ae5ac9bf24.png)
[引用：NHKスペシャル：NHKプラス再配信から]
* R界隈でもサイバーパンク風グラフパッケージがリリースされています。(リリース日:2020/04/02)

> 
[ ggCyberPunk](https://github.com/delabj/ggCyberPunk)
![alt](https://github.com/delabj/ggCyberPunk/raw/master/readme_files/figure-gfm/unnamed-chunk-1-1.png) 

* 立て続けにこのようなグラフイメージを見るにつけ、この状況なので**「見えない敵」**に準えてサイバー感のあるグラフニーズがあるようです。

## レシピ
* まず基本的なプロットを描く
* ダーク系の背景を設定する
* カラーをネオン色系に設定する
* ネオン管のようにグロー感を出す（透明度の低い線を基本線の前後に引く）
* サイバー感を強めるため、面領域を透明度の低いネオンカラーで塗りつぶす

公式ブログの投稿には、全コードが記載されていますので参考にしてください。

## 自分的にカスタマイズ
* このサイバーパンク風にアニメーションを加えたらどんな感じ？

```python
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# from IPython.display import HTML

fig = plt.figure(figsize=(8, 4.5), dpi=144)
ax = fig.add_subplot(111)

plt.style.use("dark_background")

for param in ['text.color', 'axes.labelcolor', 'xtick.color', 'ytick.color']:
    plt.rcParams[param] = '0.9'  # very light grey

for param in ['figure.facecolor', 'axes.facecolor', 'savefig.facecolor']:
    plt.rcParams[param] = '#212946'  # bluish dark grey

colors = [
    '#08F7FE',  # teal/cyan
    '#FE53BB',  # pink
    '#F5D300',  # yellow
    '#00ff41',  # matrix green
]

n_shades = 10
diff_linewidth = 1.05
alpha_value = 0.3 / n_shades

ims = []
def plot(data):
    plt.cla()
    rand = np.random.randint(1,8,(50,))
    for n in range(1, n_shades+1):
        # 基本線の前後にアルファ値の低い線を描画する
        im = plt.plot(rand, color=colors[3], linewidth=2+(diff_linewidth*n), alpha=alpha_value)
        # 基本線を描画する
        im2 = plt.plot(rand, color=colors[3], marker='o', markersize=3)
        # 線以下を描画する
        im3 = ax.fill_between(x=np.arange(50), y1=rand, y2=[0]*len(rand), color=colors[3], alpha=0.03)
        ims.append(im)
        ims.append(im2)
        ims.append(im3)

ani = animation.FuncAnimation(fig, plot, interval=50)

ax.grid(color='#2A3459')
ax.set_xlim([ax.get_xlim()[0] - 0.2, ax.get_xlim()[1] + 0.2])  # to not have the markers cut off
ax.set_ylim(0)

# グラフ枠を消去
ax.spines["top"].set_linewidth(0)
ax.spines["right"].set_linewidth(0)
ax.spines["left"].set_linewidth(0)
ax.spines["bottom"].set_linewidth(0)

ani.save('./cyberpunk.mp4', writer='ffmpeg', fps=15)

plt.show()
```
改良点：（公式ブログの骨格を残して、アニメしただけです）
* 基準線の前後にアルファ値の低い線を描く。
* 基本線を描く。
* 面領域を塗りつぶす。
* それを`ims`に追加して、それを`FuncAnimation`で実行する。
* なぜかグラブ領域の枠が表示されるので非表示設定をしました。
* 作成したgif画像がQiita.comには上げられなかったので`mp4`形式で作成
* その結果グラフ領域の背景が白くに変更されたため、`style`をコメントアウトして以下の動画となりました。
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126042/21196f4e-fd74-7fe8-01e0-18296338c83a.gif)

## まとめ
* 「全然、サイバーぽっく無いじゃん！」というコメントはスルーで、、、
* サイバーパンク風は意外と簡単に実装できる。
* **「見えない敵と戦う」**この状況に、ならではのニーズがあると思いました。