山下達郎「DAYDREAM」をMatplotlibで視覚化する

<h1>はじめに</h1>
最近（2023年7月）、巷間を賑わせている山下達郎さんですが、
1980年発表のアルバム「RIDE ON TIME」所収の「DAYDREAM」という曲があります。<br>
（作詞：吉田美奈子　作曲；山下達郎）<br><br>

作詞の際に、アクリルカラーチャートを見ながら、色の名前をメロディに当てはめていった、というエピソードが示す通り、実に色彩感覚に溢れた楽曲となっております。

私は以前にどこかで、この楽曲について<i>「１番から３番へと歌詞に進むに従って、暗い色から明るい色へとグラデーションしている」</i>という指摘をするコメントを読んで感心したのですが、曲を聞きしなに思い描いてみてはいたものの、実際にどのような色が登場しているのかが、少し気になっていたところでした。

そこで、甚だ不粋ではありますが、Matplotlibの練習を兼ねて、グラフィックで表現できないか、と思い立ち、チャレンジしました。

<h1>目的</h1>
<li>matplotlibおよびpythonへの理解を深める</li><br>
<li>「DAYDREAM」の色彩感を視覚化する</li><br>

<h1>挑戦</h1>
<h3>そもそも”アクリルカラーチャート”とは何か？</h3>
色を掛け合わせた見本表のことを言うようで、私は勝手に統一のものがあると思い込んでいたところ、
そういうものでもなさそうで、つまり吉田美奈子さんが見ていたカラーチャートがわからない限り、完全に一致させることはできないということになり、早速行き詰まってしまいましたが、結局「歌詞中の色名＋hexdigits」で検索し、ヒットしない色（ココブラウン、メタリックなど）も、強引に色を確定させました。

<details><summary>色一覧／クリックで展開</summary>
スカーレット　#FF2400<br>
グラスグリーン　#228B22<br>
バイオレット　#EE82EE<br>
ショックピンク　#FC0FC0<br>
ローズグレー　#A78F8D<br>
ペールブルー　#AFEEEE<br>
ワインレッド　#633142<br>
カーマイン　#960018<br>
ココブラウン　#35281E<br>
イエロー　#FFF200<br>
チェリー　#CC252C<br>
ダークオレンジ　#FF8C00<br>
シルバー　#C0C0C0<br>
メタリック　#EEEEEE<br>
カッパー　#B87333<br>
プラチナ　#E5E4E2<br>
キャンディー　#E0A2B4<br>
ブライトゴールド　#FFDB51<br>
</details>
Matplotlibの使い方は公式チュートリアルを参照しました。

https://matplotlib.org/stable/tutorials/index.html

<details><summary>daydream1.py／クリックで展開</summary>

```python:daydream1.py
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

scarletx, scarlety = np.random.randn(2, 50) 
grassgreenx, grassgreeny = np.random.randn(2, 50)
violetx, violety = np.random.randn(2, 50)
shockpinkx, shockpinky = np.random.randn(2, 50)
rosegreyx, rosegreyy = np.random.randn(2, 50)
palebluex, palebluey = np.random.randn(2, 50)
wineredx, wineredy = np.random.randn(2, 50) 
carminex, carminey = np.random.randn(2, 50)
cocoabrownx, cocoabrowny = np.random.randn(2, 50)
yellowx, yellowy = np.random.randn(2, 50)
cherryx, cherryy = np.random.randn(2, 50)
darkorangex, darkorangey = np.random.randn(2, 50)
silverx, silvery = np.random.randn(2, 50) 
metalicx, metalicy = np.random.randn(2, 50)
copperx, coppery = np.random.randn(2, 50)
platinumx, platinumy = np.random.randn(2, 50)
candyx, candyy = np.random.randn(2, 50)
brightgoldx, brightgoldy = np.random.randn(2, 50)

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(5, 5)) 
ax1.scatter(scarletx,scarlety,facecolor='#FF2400')
ax1.scatter(grassgreenx,grassgreeny,facecolor='#228B22')
ax1.scatter(violetx,violety,facecolor='#EE82EE')
ax1.scatter(shockpinkx,shockpinky,facecolor='#FC0FC0')
ax1.scatter(rosegreyx,rosegreyy,facecolor='#8B6E6B')
ax1.scatter(palebluex,palebluey,facecolor='#AFEEEE')

ax2.scatter(wineredx,wineredy,facecolor='#633142')
ax2.scatter(carminex,carminey,facecolor='#FF0033')
ax2.scatter(cocoabrownx,cocoabrowny,facecolor='#35281E')
ax2.scatter(yellowx,yellowy,facecolor='#FFD500')
ax2.scatter(cherryx,cherryy,facecolor='#CC252C')
ax2.scatter(darkorangex,darkorangey,facecolor='#FF8C00')

ax3.scatter(silverx, silvery,facecolor='#C0C0C0')
ax3.scatter(metalicx, metalicy,facecolor='#EEEEEE')
ax3.scatter(copperx, coppery,facecolor='#B87333')
ax3.scatter(platinumx, platinumy,facecolor='#E5E4E2')
ax3.scatter(candyx, candyy,facecolor='#E0A2B4')
ax3.scatter(brightgoldx, brightgoldy,facecolor='#FFDF01')

plt.show()
```
</details>

 結果

![daydream_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513572/4106d509-7b1c-79fa-ec98-145851f24def.png)

左の図からそれぞれ１番、２番、３番の歌詞に登場する色で分かれています。


<details><summary>daydream2.py／クリックで展開</summary>

```python:daydream2.py
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

scarletx, scarlety = np.random.randn(2, 50)  
grassgreenx, grassgreeny = np.random.randn(2, 50)
violetx, violety = np.random.randn(2, 50)
shockpinkx, shockpinky = np.random.randn(2, 50)
rosegreyx, rosegreyy = np.random.randn(2, 50)
palebluex, palebluey = np.random.randn(2, 50)
wineredx, wineredy = np.random.randn(2, 50) 
carminex, carminey = np.random.randn(2, 50)
cocoabrownx, cocoabrowny = np.random.randn(2, 50)
yellowx, yellowy = np.random.randn(2, 50)
cherryx, cherryy = np.random.randn(2, 50)
darkorangex, darkorangey = np.random.randn(2, 50)
silverx, silvery = np.random.randn(2, 50) 
metalicx, metalicy = np.random.randn(2, 50)
copperx, coppery = np.random.randn(2, 50)
platinumx, platinumy = np.random.randn(2, 50)
candyx, candyy = np.random.randn(2, 50)
brightgoldx, brightgoldy = np.random.randn(2, 50)

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(5, 5), layout='constrained') 

ax1.plot(scarletx, scarlety, lw=1, c='#FF2400')
ax1.plot(grassgreenx,grassgreeny,lw=1,c='#228B22')
ax1.plot(violetx,violety,lw=1,c='#EE82EE')
ax1.plot(shockpinkx,shockpinky,lw=1,c='#FC0FC0')
ax1.plot(rosegreyx,rosegreyy,lw=1,c='#8B6E6B')
ax1.plot(palebluex,palebluey,lw=1,c='#AFEEEE')

ax2.plot(wineredx,wineredy,lw=1,c='#633142')
ax2.plot(carminex,carminey,lw=1,c='#FF0033')
ax2.plot(cocoabrownx,cocoabrowny,lw=1,c='#35281E')
ax2.plot(yellowx,yellowy,lw=1,c='#FFD500')
ax2.plot(cherryx,cherryy,lw=1,c='#CC252C')
ax2.plot(darkorangex,darkorangey,lw=1,c='#FF8C00')

ax3.plot(silverx, silvery,lw=1,c='#C0C0C0')
ax3.plot(metalicx, metalicy,lw=1,c='#EEEEEE')
ax3.plot(copperx, coppery,lw=1,c='#B87333')
ax3.plot(platinumx, platinumy,lw=1,c='#E5E4E2')
ax3.plot(candyx, candyy,lw=1,c='#E0A2B4')
ax3.plot(brightgoldx, brightgoldy,lw=1,c='#FFDF01')

plt.show()
```
</details>

結果

![daydream_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513572/efccab8d-9f38-359f-153b-874e0d6cd84a.png)

歌詞に倣って”細い糸”バージョン

<h1>気づいたこと</h1>

並べてみたところ、 ”歌詞が進むに連れて、暗→明”と言うより、
１番→寒色系　２番→暖色系　３番→白っぽい（明度が高い）
と言う傾向があるようでした。

これは、たまたま上記チュートリアル内のカラーバーを見て、気づいたことでした。

<details><summary>colorbar.py／クリックで展開</summary>

```python:colorbar.py
import matplotlib as mpl
import matplotlib.pyplot as plt

fig, axcb1 = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.cm.cool
norm1 = mpl.colors.Normalize(vmin=5, vmax=10)
fig.colorbar(mpl.cm.ScalarMappable(norm=norm1, cmap=cmap),
             cax=axcb1, orientation='horizontal', label='cool color')
             
fig, axcb2 = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)             
cmap_warm = mpl.cm.hot
norm2 = mpl.colors.Normalize(vmin=5, vmax=10)
fig.colorbar(mpl.cm.ScalarMappable(norm=norm2, cmap=cmap_warm),
             cax=axcb2, orientation='horizontal', label='warm color')

plt.show()
```
</details>

![colorbarcool.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513572/b4e63747-d181-92c4-07bf-adbd5611a089.png)
![colorbarhot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513572/b1f5fff4-9a99-0449-2410-0887f2c2c8da.png)

<h1>おわりに</h1>
まず、チュートリアルを参照しながら、なんとか目的を達成することができました。
今後、さらに自在に使いこなせるようになれば、更新したいと思っております。

そして歌詞の内容について、視覚化することで上記のような新たな発見はありましたが、歌詞内に登場する色と、曲を聞いて想像する色は必ずしも一致する必要も無いですし、イメージを限定してしまうおそれがあるかと思いましたので、もしこちらをご覧になってしまわれた方は、一度すべて忘れてしまうのがよろしいかと思います。

しかし絶対に忘れてほしくないのは、「DAYDREAM」と同じ山下達郎＝吉田美奈子コンビによる「Funky Flushin'」の、Juice=Juiceによるカバーが「プライド・ブライト」との両A面シングルで好評発売中ということです。

https://www.youtube.com/watch?v=Uks7Dyn8DAM

こちらも「DAYDREAM」同様、うだるようなこの夏に爽やかな風を吹かせるような、夏休みの行楽・アウトドアにもぴったりの楽曲に仕上がっております。（家の中でも聞いてね！！！）

どうぞ皆様、十分な食事と睡眠と「Funky Flushin'」で、健康にお過ごし下さい。