はじめに
最近(2023年7月)、巷間を賑わせている山下達郎さんですが、 1980年発表のアルバム「RIDE ON TIME」所収の「DAYDREAM」という曲があります。(作詞:吉田美奈子 作曲;山下達郎)
作詞の際に、アクリルカラーチャートを見ながら、色の名前をメロディに当てはめていった、というエピソードが示す通り、実に色彩感覚に溢れた楽曲となっております。
私は以前にどこかで、この楽曲について「1番から3番へと歌詞に進むに従って、暗い色から明るい色へとグラデーションしている」という指摘をするコメントを読んで感心したのですが、曲を聞きしなに思い描いてみてはいたものの、実際にどのような色が登場しているのかが、少し気になっていたところでした。
そこで、甚だ不粋ではありますが、Matplotlibの練習を兼ねて、グラフィックで表現できないか、と思い立ち、チャレンジしました。
目的
matplotlibおよびpythonへの理解を深める「DAYDREAM」の色彩感を視覚化する
挑戦
そもそも”アクリルカラーチャート”とは何か?
色を掛け合わせた見本表のことを言うようで、私は勝手に統一のものがあると思い込んでいたところ、 そういうものでもなさそうで、つまり吉田美奈子さんが見ていたカラーチャートがわからない限り、完全に一致させることはできないということになり、早速行き詰まってしまいましたが、結局「歌詞中の色名+hexdigits」で検索し、ヒットしない色(ココブラウン、メタリックなど)も、強引に色を確定させました。色一覧/クリックで展開
スカーレット #FF2400グラスグリーン #228B22
バイオレット #EE82EE
ショックピンク #FC0FC0
ローズグレー #A78F8D
ペールブルー #AFEEEE
ワインレッド #633142
カーマイン #960018
ココブラウン #35281E
イエロー #FFF200
チェリー #CC252C
ダークオレンジ #FF8C00
シルバー #C0C0C0
メタリック #EEEEEE
カッパー #B87333
プラチナ #E5E4E2
キャンディー #E0A2B4
ブライトゴールド #FFDB51
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()
結果
左の図からそれぞれ1番、2番、3番の歌詞に登場する色で分かれています。
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()
結果
歌詞に倣って”細い糸”バージョン
気づいたこと
並べてみたところ、 ”歌詞が進むに連れて、暗→明”と言うより、
1番→寒色系 2番→暖色系 3番→白っぽい(明度が高い)
と言う傾向があるようでした。
これは、たまたま上記チュートリアル内のカラーバーを見て、気づいたことでした。
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()
おわりに
まず、チュートリアルを参照しながら、なんとか目的を達成することができました。 今後、さらに自在に使いこなせるようになれば、更新したいと思っております。そして歌詞の内容について、視覚化することで上記のような新たな発見はありましたが、歌詞内に登場する色と、曲を聞いて想像する色は必ずしも一致する必要も無いですし、イメージを限定してしまうおそれがあるかと思いましたので、もしこちらをご覧になってしまわれた方は、一度すべて忘れてしまうのがよろしいかと思います。
しかし絶対に忘れてほしくないのは、「DAYDREAM」と同じ山下達郎=吉田美奈子コンビによる「Funky Flushin'」の、Juice=Juiceによるカバーが「プライド・ブライト」との両A面シングルで好評発売中ということです。
こちらも「DAYDREAM」同様、うだるようなこの夏に爽やかな風を吹かせるような、夏休みの行楽・アウトドアにもぴったりの楽曲に仕上がっております。(家の中でも聞いてね!!!)
どうぞ皆様、十分な食事と睡眠と「Funky Flushin'」で、健康にお過ごし下さい。