Matplotlib 소개입니다
Matplotlib은 다양한 하드 카피 형식과 플랫폼 간 대화형 환경으로 출판 품질 수준의 그래픽을 생성하는 파이썬의 2D 그래픽 라이브러리입니다.Matplotlib 매핑 스타일은 MATLAB에 매우 가깝기 때문에 Matplotlib라고 합니다.
만약 여러분이 Matplotlib을 배워야 한다면, 아마도 다음과 같습니다: 1. Matplotlib은 매우 강력한 Python 그림 그리기 도구입니다. 2. 손에 많은 데이터가 있습니다. 하지만 이 데이터를 어떻게 표현해야 할지 모르겠습니다.
선 그래프, 산점도, 등고선도, 막대 그래프, 막대 그래프, 막대 그래프, 3D 그래픽, 심지어 그래픽 애니메이션 등을 그립니다.
기본 개념입니다
우리가 matplotlib를 조작할 때 일반적으로 캔버스라고 하는 Figure에서 시작하여 실제로 그림을 그릴 때 캔버스처럼 작동합니다.그림판에 우리는 한 폭과 여러 폭의 도형을 그릴 수 있는데,이 도형이 바로 axes입니다.
좌표축, 눈금선, 레이블, 선, 마커 등과 같은 모든 그래픽 요소는 그래픽 인스턴스 위에 있습니다.
axes 인스턴스가 하나만 있는 경우 matplotlib.pyplot을 사용하여 이러한 그래픽 요소를 조작하여 완전한 그림을 '구성'할 수 있습니다.
기본 그림입니다.
도면을 작성하기 전에 해당 패키지를 가져와야 합니다. 그래프 요소를 조작하기 위해 파이플롯을 사용하고 도면에 필요한 기본 데이터를 생성하는 데 numpy를 사용합니다
import numpy as np
import matplotlib.pyplot as plt
기본적인 그림도 볼 수 있습니다:
x = np.linspace(0.0, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="line plot")
plt.annotate("maximux", xy=(np.pi/2, 1), xytext=((np.pi/2)+1.0, 0.8), weight="bold", color="b",
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.text(3.10, 0.09, "y=sin(x)", weight="bold", color="b")
plt.axhline(y=0.0, c="r", ls="--", lw=2)
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.xlim(0, 11)
plt.title("y=sin(x)")
plt.legend(loc="upper right")
plt.show()
이 코드 문자열은 기본적으로 위의 대부분의 함수를 사용합니다
그림 개요
최종 그래서 코드입니다
#데이터 준비합니다
x = np.linspace(0.5, 3.5, 100)
y = np.sin(x)
np.random.seed(20)
y1 = np.random.randn(100)
#산점도요
plt.scatter(x, y1, c="0.25", label="scatter figure")
#선도표입니다
plt.plot(x, y, ls='--', lw=2, label="plot figure")
#위쪽과 오른쪽의 축을 숨깁니다
for spine in plt.gca().spines.keys():
if spine == "top" or spine == "right":
plt.gca().spines[spine].set_color("none")
#위쪽과 오른쪽의 좌표축 눈금을 숨깁니다
plt.gca().xaxis.set_ticks_position("bottom")
plt.gca().yaxis.set_ticks_position("left")
#좌표 가로 세로 범위입니다
plt.xlim(0.0, 4.0)
plt.ylim(-3.0, 3.0)
#좌표축 레이블을 설정합니다
plt.xlabel("x_axis")
plt.ylabel("y_axis")
#좌표 격자 설정하기
plt.grid(True, ls=":", color="r")
#수평선을 추가합니다.
plt.axhline(y=0.0, c="r", ls="--", lw=2)
#수직 영역을 추가합니다.
plt.axvspan(xmin=1.0, xmax=2.0, facecolor="y", alpha=.3)
#댓글 정보를 설정합니다
#최고점 주석입니다.
plt.annotate("maximum", xy=(np.pi/2, 1.0), xytext=((np.pi/2)+0.15, 1.8), weight="bold", color="r",
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
#spines 주석 오른쪽 화살표입니다
plt.annotate("spines", xy=(0.75, -3), xytext=(0.35, -2.25), weight="bold", color="r",
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
#spines 주석 왼쪽 화살표입니다
plt.annotate("", xy=(0, -2.78), xytext=(0.4, -2.32),
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
# tickline 주석 화살표입니다
plt.annotate("", xy=(3.5, -2.98), xytext=(3.6, -2.70),
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
#tickline 주석 문자입니다
plt.text(3.6, -2.70,"'|' is tickline", weight="bold", color="b")
plt.text(3.6, -2.95,"3.5 is ticklabel", weight="bold", color="b")
# 제목을 설정합니다.
plt.title("structure of matplotlib")
#grid 주석입니다
plt.annotate("grid()", xy=(0.22, 1), xytext=(0.36, 1.4), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
# 제목 설명입니다
plt.annotate("title()", xy=(2.1, 3.0), xytext=(1.2, 2.4), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
#수평선 주석입니다
plt.annotate("axhline()", xy=(0.4, 0), xytext=(0.1, -0.8), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
# 범례 주석입니다.
plt.annotate("legend()", xy=(3.5, 2), xytext=(3.9, 1.2), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
# 산점도 주석입니다.
plt.annotate("scatter()", xy=(3.49, 0.86), xytext=(3.9, 0.6), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
#선도 주석입니다.
plt.annotate("plot()", xy=(3.48, -0.31), xytext=(3.9, -0.5), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
#텍스트 주석입니다.
plt.annotate("text()", xy=(3.9, -2.5), xytext=(3.9, -1.8), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
#수직 영역 설명입니다
plt.annotate("axvspan()", xy=(1.2, 2.1), xytext=(0.3, 2.2), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
#화살표 주석이 달린 주석입니다.
plt.annotate("annotate()", xy=(0.4, -2.05), xytext=(0.18, -1.5), color='g',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
#횡좌표 텍스트 주석입니다.
plt.text(2.2, -3.85, "-->xlabel()",color='g')
# 가로 좌표 범위 설명입니다
plt.text(1.7, -4.4, "[0.0,4.0]: xlim()",color='g')
#바깥테두리 밑부분이요
plt.text(-0.7, -4.6, "----------------"*8, color="r")
#외곽 상단입니다
plt.text(-0.7, 4.2, "----------------"*8, color="r")
#바깥쪽 테두리 왼쪽
plt.text(-0.75, -4.4, '-----------'*8,color='r', rotation='vertical')
#바깥틀 오른쪽입니다
plt.text(4.76, -4.4, '-----------'*8,color='r', rotation='vertical')
#Figure 주석입니다.
plt.text(-0.65, 3.8, 'Figure', fontsize=16, color='r', weight='bold')
#axes 설명입니다
plt.text(0.03, 2.7, 'Axes', fontsize=16, color='r', weight='bold')
# 범례를 설정합니다.
plt.legend(loc="upper right")
plt.savefig(fname="./test_chao_2.png", dpi=300)
plt.show()
또 다른 화법은 Axes를 이용하는 거예요
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatter
np.random.seed(19680801)
# 동일한 seed() 값을 사용하면 매번 생성되는 난수가 동일합니다.이 값을 설정하지 않으면 매번 생성되는 난수가 다릅니다.
X = np.linspace (0.5, 3.5, 100) # 생성x입니다.
Y1 = 3+np.cos(X) # y1
Y2 = 1+np.cos(1+X/0.75)/2 # y2
Y3 = np.random.uniform(Y1, Y2, len(X))
# 균일한 분포[low, high]에서 무작위로 샘플링되며 정의 도메인은 왼쪽 닫힘과 오른쪽 열림, 즉 low를 포함하고 high를 포함하지 않습니다.
fig = plt.figure (figsize= (8, 8)) # 그림 크기입니다.
ax = fig.add_subplot(1, 1, 1, aspect=1) # 다중 서브그래프입니다.
def minor_tick(x, pos): # 작은 tick을 정의합니다.
if not x % 1.0:
return ""
return "%.2f" % x
ax.xaxis.set_major_locator(MultipleLocator(1.000))
ax.xaxis.set_minor_locator(AutoMinorLocator(4))
ax.yaxis.set_major_locator(MultipleLocator(1.000))
ax.yaxis.set_minor_locator(AutoMinorLocator(4) # 길이 tick 설정하기
ax.xaxis.set_minor_formatter(FuncFormatter(minor_tick)) # 형식입니다.
# ax.xaxis.set_major_locator의 방법으로 눈금 위치를 설정합니다
ax.set_xlim (0, 4) # x 표시 범위입니다
ax.set_ylim (0, 4) #y 표시 범위입니다.
ax.tick_params(which='major', width=1.0) # tick
ax.tick_params(which='major', length=10)
ax.tick_params(which='minor', width=1.0, labelsize=10)
ax.tick_params(which='minor', length=5, labelsize=10, labelcolor='0.25')
ax.grid (linestyle="--", linewidth=0.5, color=".25", zorder=-10) # 격자점선입니다.
ax.plot(X, Y1, c=(0.25, 0.25, 1.00), lw=2, label="Blue signal", zorder=10)
ax.plot(X, Y2, c=(1.00, 0.25, 0.25), lw=2, label="Red signal")
ax.plot(X, Y3, linewidth=0,
marker='o', markerfacecolor='w', markeredgecolor='k')
ax.set_title("Anatomy of a figure", fontsize=20, verticalalignment='bottom')
ax.set_xlabel("X axis label")
ax.set_ylabel("Yaxis label") #y 이름입니다.
ax.legend()
def circle(x, y, radius=0.15): # 함수를 정의합니다.
from matplotlib.patches import Circle
from matplotlib.patheffects import withStroke
circle = Circle((x, y), radius, clip_on=False, zorder=10, linewidth=1,
edgecolor='black', facecolor=(0, 0, 0, .0125),
path_effects=[withStroke(linewidth=5, foreground='w')])
ax.add_artist(circle)
def text(x, y, text):
ax.text(x, y, text, backgroundcolor="white",
ha='center', va='top', weight='bold', color='blue')
# # Minor tick
circle(0.50, -0.10)
text(0.50, -0.32, "Minor tick label")
# # Major tick
circle(-0.03, 4.00)
text(0.03, 3.80, "Major tick")
# # Minor tick
circle(0.00, 3.50)
text(0.00, 3.30, "Minor tick")
# # Major tick label
circle(-0.15, 3.00)
text(-0.15, 2.80, "Major tick label")
# # X Label
circle(1.80, -0.27)
text(1.80, -0.45, "X axis label")
# # Y Label
circle(-0.27, 1.80)
text(-0.27, 1.6, "Y axis label")
# # Title
circle(1.60, 4.13)
text(1.60, 3.93, "Title")
# # Blue plot
circle(1.75, 2.80)
text(1.75, 2.60, "Line\n(line plot)")
# # Red plot
circle(1.20, 0.60)
text(1.20, 0.40, "Line\n(line plot)")
# # Scatter plot
circle(3.20, 1.75)
text(3.20, 1.55, "Markers\n(scatter plot)")
# # Grid
circle(3.00, 3.00)
text(3.00, 2.80, "Grid")
# # Legend
circle(3.70, 3.80)
text(3.70, 3.60, "Legend")
# # Axes
circle(0.5, 0.5)
text(0.5, 0.3, "Axes")
# # Figure
circle(-0.3, 0.65)
text(-0.3, 0.45, "Figure")
# 화살표, 글꼴 치수입니다
color = 'blue'
ax.annotate('Spines', xy=(4.0, 0.35), xycoords='data',
xytext=(3.3, 0.5), textcoords='data',
weight='bold', color=color,
arrowprops=dict(arrowstyle='->',
connectionstyle="arc3",
color=color))
ax.annotate('', xy=(3.15, 0.0), xycoords='data',
xytext=(3.45, 0.45), textcoords='data',
weight='bold', color=color,
arrowprops=dict(arrowstyle='->',
connectionstyle="arc3",
color=color))
ax.text(4.0, -0.4, "Made with http://matplotlib.org", # text
fontsize=10, ha="right", color='.5')
plt.savefig(fname="./test.png", dpi=300)
plt.show()
'개발 꿀팁 > PYTHON' 카테고리의 다른 글
파이썬으로 크리스마스 트리를 만들어요 (0) | 2023.01.03 |
---|---|
python이 matplotlib의 savefig를 사용하여 그림을 저장할 때 불완전한 문제가 있습니다 (0) | 2022.12.15 |
Python 그림 그리기, 점선 그림입니다 (0) | 2022.12.15 |
파이썬 그림 애플릿입니다 (0) | 2022.12.15 |
파이썬이 그림을 그릴 때 사용하는 색상입니다 (0) | 2022.12.15 |