matplotlib에서 그래프의 색상을 연속적으로 변경하고 플롯하고 legend를 쉽게 많이 정렬하는 방법
17769 단어 legend파이썬matplotlib
matplotlib로 색상을 변경하고 legend를 많이 표시하고 싶습니다.
사용소
matplotlib 를 사용해, 그래프를 많이 표시하고 싶지만, 디폴트의 색의 설정이라면 유한개의 색 밖에 낼 수 없다. 이것을 쉽게 해결하는 방법을 소개하고 싶습니다. 그러한 경우, legend도 많이 표시하고 싶은 것이 많다고 생각하지만, 옛날의 matplotlib에서는 어려웠지만, 지금은 매우 간단하게 할 수 있으므로, 덤으로 그 방법도 소개한다.
샘플
개요
y = arctan((n+1)x) 와 y = x^n 의 2 개의 함수에 대해, n 을 20 개 어긋난 그래프를 겹쳐쓰는 예를 소개한다.
colormap 포인트
usercmap = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=num)
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=usercmap)
이제 colormap에서 jet을 선택하고 0에서 num (20) 개의 데이터 수로 색상을 선언하여 cm.ScalarMappable에서 scalarMap을 생성합니다. for loop 중,
c = scalarMap.to_rgba(i) 로 색상을 선택합니다.
legend을 많이 표시하는 포인트
plt.legend(bbox_to_anchor=(0., 1.01, 1., 0.01), loc='lower left',ncol=10, mode="expand", borderaxespad=0.,fontsize=8)
bbox_to_anchor=(X좌표, Y좌표, X사이즈, Y사이즈)로 두는 장소를 지정해, ncol로 접는 칼럼수를 조절한다.
샘플 코드
qiita_legend_sample.py
#!/usr/bin/env python
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'serif'
import optparse
import matplotlib.pylab as plab
from matplotlib.colors import LogNorm
import matplotlib.colors as colors
### plot 1D plot : shifted
F = plt.figure(figsize=(12,8.))
plt.subplots_adjust(wspace=0.3, hspace=0.6)
ax = plt.subplot(2,1,1)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.figtext(0.02,0.02,"[matplotlib legend test]")
plt.xscale('linear')
plt.yscale('linear')
plt.grid(linestyle='dotted',alpha=0.5)
plt.xlabel(r'x-axis (a.u.)')
plt.ylabel(r'y-axis')
x = np.arange(-1,1,0.1)
num=20
y = []
for j in range(num):
y.append(np.arctan(x*(j+1)))
usercmap = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=num)
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=usercmap)
for i,oney in enumerate(y):
c = scalarMap.to_rgba(i)
plt.errorbar(x, oney, fmt="o-", color = c, alpha = 0.8, linewidth = 1, label=str(i))
plt.legend(bbox_to_anchor=(0., 1.01, 1., 0.01), loc='lower left',ncol=10, mode="expand", borderaxespad=0.,fontsize=8)
ax = plt.subplot(2,1,2)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.xscale('linear')
plt.yscale('linear')
plt.grid(linestyle='dotted',alpha=0.5)
plt.xlabel(r'x-axis (a.u.)')
plt.ylabel(r'y-axis')
x = np.arange(-1,1,0.1)
num=20
y = []
for j in range(num):
y.append(np.power(x,j+1))
usercmap = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=num)
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=usercmap)
for i,oney in enumerate(y):
c = scalarMap.to_rgba(i)
plt.errorbar(x, oney, fmt="o-", color = c, alpha = 0.8, linewidth = 1, label=str(i))
plt.legend(bbox_to_anchor=(-0.1, 1.0, 1.2, 0.01), loc='lower left',ncol=10, mode="expand", borderaxespad=0.,fontsize=8)
plt.savefig("qiita_legend_sample.png")
plt.show()
생성되는 그림은 이쪽.
주의사항
이와 같이 legend 를 옆으로 펼쳐서 그래프 밖에 표시하는 것은 간단해졌지만, expand라는 옵션은 횡방향으로만 대응하고 있어 세로에는 대응하지 않는다(2019.1.8 현재). 시간이 해결해 줄 거라고 생각하지만.
Reference
이 문제에 관하여(matplotlib에서 그래프의 색상을 연속적으로 변경하고 플롯하고 legend를 쉽게 많이 정렬하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamadasuzaku/items/ee4a1dbdb609a07a4b97
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
usercmap = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=num)
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=usercmap)
plt.legend(bbox_to_anchor=(0., 1.01, 1., 0.01), loc='lower left',ncol=10, mode="expand", borderaxespad=0.,fontsize=8)
#!/usr/bin/env python
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'serif'
import optparse
import matplotlib.pylab as plab
from matplotlib.colors import LogNorm
import matplotlib.colors as colors
### plot 1D plot : shifted
F = plt.figure(figsize=(12,8.))
plt.subplots_adjust(wspace=0.3, hspace=0.6)
ax = plt.subplot(2,1,1)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.figtext(0.02,0.02,"[matplotlib legend test]")
plt.xscale('linear')
plt.yscale('linear')
plt.grid(linestyle='dotted',alpha=0.5)
plt.xlabel(r'x-axis (a.u.)')
plt.ylabel(r'y-axis')
x = np.arange(-1,1,0.1)
num=20
y = []
for j in range(num):
y.append(np.arctan(x*(j+1)))
usercmap = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=num)
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=usercmap)
for i,oney in enumerate(y):
c = scalarMap.to_rgba(i)
plt.errorbar(x, oney, fmt="o-", color = c, alpha = 0.8, linewidth = 1, label=str(i))
plt.legend(bbox_to_anchor=(0., 1.01, 1., 0.01), loc='lower left',ncol=10, mode="expand", borderaxespad=0.,fontsize=8)
ax = plt.subplot(2,1,2)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.xscale('linear')
plt.yscale('linear')
plt.grid(linestyle='dotted',alpha=0.5)
plt.xlabel(r'x-axis (a.u.)')
plt.ylabel(r'y-axis')
x = np.arange(-1,1,0.1)
num=20
y = []
for j in range(num):
y.append(np.power(x,j+1))
usercmap = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=num)
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=usercmap)
for i,oney in enumerate(y):
c = scalarMap.to_rgba(i)
plt.errorbar(x, oney, fmt="o-", color = c, alpha = 0.8, linewidth = 1, label=str(i))
plt.legend(bbox_to_anchor=(-0.1, 1.0, 1.2, 0.01), loc='lower left',ncol=10, mode="expand", borderaxespad=0.,fontsize=8)
plt.savefig("qiita_legend_sample.png")
plt.show()
Reference
이 문제에 관하여(matplotlib에서 그래프의 색상을 연속적으로 변경하고 플롯하고 legend를 쉽게 많이 정렬하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamadasuzaku/items/ee4a1dbdb609a07a4b97텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)