카테고리 없음
pyplot: ticklabels, grid, major/minor ticks
vincenthanna
2020. 12. 31. 08:30
tick에 배정되는 tick label의 문자열 변경은 get_yticklabels() / set_yticklabels() 함수를 이용하여 할 수 있다.
yticks = ax.get_yticks()
ax.set_yticks(yticks)
yticklabels = ax.get_yticklabels()
ax.set_yticklabels([f'{y:.0f} Value' for y in yticks], fontdict={"fontsize":16, "color":"black", "ha":"right", "va":"center"})
pyplot 그래프 출력 시 기존 tick과는 별도로 보조 tick을 출력할 수 있다.
major/minor tick의 간격은 set_major_locator()/set_minor_locator()함수를 사용한다.
주/부 구분은 tick 설정 시 minor 속성을 True/False로 지정해서 한다.
# yticks major/minor 설정
ax.yaxis.set_major_locator(MultipleLocator(2))
ax.yaxis.set_major_formatter('{x:.0f}')
ax.yaxis.set_minor_locator(MultipleLocator(1))
ax.yaxis.set_minor_formatter('{x:.0f}')
# yticks : major
yticks = ax.get_yticks()
ax.set_yticks(yticks)
yticklabels = ax.get_yticklabels()
ax.set_yticklabels([f'{y:.0f} Value' for y in yticks], fontdict={"fontsize":16, "color":"black", "ha":"right", "va":"center"})
# yticks : minor
yticks = ax.get_yticks(minor=True)
ax.set_yticks(yticks, minor=True)
yticklabels = ax.get_yticklabels(minor=True)
ax.set_yticklabels([f'{y:.0f} val' for y in yticks], fontdict={"fontsize":12, "color":"black", "ha":"right", "va":"center"}, minor=True)
Sample Code:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import (MultipleLocator, AutoMinorLocator)
import seaborn as sns
sns.set_style("white")
a = np.arange(-np.math.pi, np.math.pi, step=0.02)
b = np.sin(a)
c = a * b
fig, ax = plt.subplots(figsize=(16, 6))
ax.plot(a, label="A")
ax.plot(b, label="B")
ax.plot(c, label="C")
# x,y 축 범위
ax.set_xlim(0, a.shape[0])
ax.set_ylim(-3.5, 3.5)
# ticks 출력 변경
xticks = ax.get_xticks()
ax.set_xticks(xticks)
xticklabels = [f'{x:.0f} Steps' for x in xticks]
ax.set_xticklabels(xticklabels, rotation=0)
# yticks major/minor 설정
ax.yaxis.set_major_locator(MultipleLocator(2))
ax.yaxis.set_major_formatter('{x:.0f}')
ax.yaxis.set_minor_locator(MultipleLocator(1))
ax.yaxis.set_minor_formatter('{x:.0f}')
# Grid
ax.grid(axis='y', which="major", color="0.2", alpha=0.5) # major
ax.grid(axis='y', which="minor", color="0.2", alpha=0.5, ls=":")# minor
# yticks : major
yticks = ax.get_yticks()
ax.set_yticks(yticks)
yticklabels = ax.get_yticklabels()
ax.set_yticklabels([f'{y:.0f} Value' for y in yticks], fontdict={"fontsize":16, "color":"black", "ha":"right", "va":"center"})
# yticks : minor
yticks = ax.get_yticks(minor=True)
ax.set_yticks(yticks, minor=True)
yticklabels = ax.get_yticklabels(minor=True)
ax.set_yticklabels([f'{y:.0f} val' for y in yticks], fontdict={"fontsize":12, "color":"black", "ha":"right", "va":"center"}, minor=True)
handles, labels = ax.get_legend_handles_labels()
l0 = ax.legend(handles=handles[:3], labels=["A cat", "B cat", "C cat"], ncol=2, loc="upper left", bbox_to_anchor=(0.0, 1.0))