Search
Duplicate

Matplotlib Visualization 팁

Created
3/12/2021, 8:04:00 AM
Tags
Empty

여러 Visualization 테크닉 소개

r로 시작하면서, $$으로 string을 감쌓으면 된다. Matplotlib는 자체적으로 tex문법을 rendering할 수 있다.
plt.title(r'$\alpha > \beta$')
Python

Matplotlib 에서 한글 font로 출력하기

1. 한글 폰트를 다운받고 압축을 푼다.
wget http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip unzip NanumFont_TTF_ALL.zip -d NanumFont
Python
2. 위에서 압축을 푼 경로로 matplotlib font를 설정해준다.
import matplotlib.font_manager as fm font_list = fm.findSystemFonts(fontpaths='/home/user/NanumFont', fontext='ttf') print(font_list) fontprop = fm.FontProperties(fname=font_list[3], size=10) plt.title(tmp.columns.values[-start_idx + i], fontproperties=fontprop)
Python

legend에 font 적용하기

이상하게 legend에는 다른방식으로 font를 적용해야한다.
import matplotlib.font_manager as fm font_path='/home/imcomking/NanumFont' font_name = fm.FontProperties(fname=font_path+'/NanumGothic.ttf').get_name() plt.legend(loc=1, fontsize="xx-large", prop={'family':font_name, 'size':20})
Python

Default Font 사용하기

잘안되는데?
from matplotlib import rcParams rcParams['font.family'] = 'sans-serif' rcParams['font.sans-serif'] = ['Tahoma'] matplotlib.matplotlib_fname() matplotlib.get_cachedir() # rm -r "matplotlib.get_cachedir()"해야함
Python
설치가 잘안되는건가? 경로를 못찾나봄
sudo apt-get install msttcorefonts -qq sudo apt install font-manager sudo rm ~/.cache/matplotlib -fr
Bash

Heatmap 그리기

공식 예제

다양한 예제

ColorMap 고르기

확률 Heatmap 그리기

plt.imshow() 함수를 사용해서 그린다.
vmin과 vmax를 활용해서 범위를 0~1로 제한한다.
import matplotlib.pyplot as plt import numpy as np from scipy.special import softmax logit_matrix = np.random.rand(5,7)*3.5 prob = scipy.special.softmax(logit_matrix, 1) plt.imshow(prob, cmap="YlOrRd", interpolation='nearest', vmin=0, vmax=1, extent=[-4,4,-1,1], aspect=2) plt.show()
Python

Jupyter에서 Matplotlib를 이용한 Dynamic plotting

거의 몇시간의 검색 끝에 working하는 예제를 찾을 수 있었다.
핵심은 %matplotlib notebook 을 쓴다는 것과, fig1.canvas.draw()를 호출해주는 것이었다.
그러나 이 방법의 한계는 매번 새로 drawing을 해서 속도가 느리다는 것이다.
그래서 아래의 방법으로 set_xdata를 사용하도록 수정해보았다.
%matplotlib notebook import matplotlib.pyplot as plt fig1 = plt.figure(figsize=(15,5)) ax1 = fig1.add_subplot(111) ax1.set_xlabel('Time') line1, = ax1.plot([], []) def update_graph(t=0, width=5, gap=540, y_len=0.4): W = (width*WIN_SIZE)//2 cur_i = t*WIN_SIZE sample_rate = fs y_len=0.7 data_1_plot = data_1[gap:] data_2_plot = data_2[:-gap] if gap > 0 else output_data data_1_plot = data_1_plot[cur_i-W : cur_i+W] data_2_plot = data_2_plot[cur_i-W : cur_i+W] time = np.linspace(0, len(data_1_plot) / fs, num=len(data_1_plot)) line1.set_xdata(time) line1.set_ydata(data_1_plot-data_2_plot) fig1.canvas.draw()
Python
TOP