Matplotlib는 Python의 가장 유명한 그리기 라이브러리로 matlab과 유사한 명령 API 세트를 제공하며 이는 대화형 그리기에 매우 적합합니다. 또한 그리기 컨트롤로 쉽게 사용하고 GUI 애플리케이션에 내장할 수도 있습니다. 문서는 매우 완벽하며 갤러리 페이지에는 수백 개의 썸네일이 있으며 모두 열면 소스 프로그램이 있습니다. 따라서 특정 유형의 다이어그램을 그려야 하는 경우 이 페이지에서 찾아보기/복사/붙여넣기만 하면 기본적으로 완료됩니다.
이 기사에서는 matplotlib를 사용하여 가장 간단한 막대를 복잡한 막대까지 단계별로 구성합니다. 가장 간단한 바는 무엇인가요? 다음 문장을 읽어보면 얼마나 간단한지 알 수 있습니다.
import matplotlib.pyplot as plt plt.bar(left = 0,height = 1) plt.show()
실행 효과:
네, 셋 그냥요. 한 문장, 내가 본 것 중 가장 간단한 그림 문장. 먼저 matplotlib.pyplot을 가져온 다음 bar 메서드를 직접 호출하고 마지막으로 show를 사용하여 이미지를 표시했습니다. bar의 두 매개변수에 대해 설명하겠습니다.
left: 열의 왼쪽 가장자리 위치입니다. 1을 지정하면 현재 열의 왼쪽 가장자리의 x 값은 1.0입니다.
height : 컬럼의 높이로, Y축 left의 값으로, 별도의 값(컬럼임)을 사용하는 것 외에 height를 다음과 같이 대체할 수도 있습니다. 튜플(여러 직사각형을 나타냄) 예를 들어 다음 예에서는import matplotlib.pyplot as plt plt.bar(left = (0,1),height = (1,0.5)) plt.show()left = (0,1)은 총 두 개의 직사각형이 있음을 의미하고 왼쪽 가장자리는 첫 번째 것은 0이고, 두 번째 것의 왼쪽 가장자리는 1입니다. 높이 매개변수는 동일합니다. 물론 여전히 이 두 직사각형이 '너무 뚱뚱하다'고 생각할 수도 있습니다. 이 시점에서 막대의 너비 매개변수를 지정하여 너비를 설정할 수 있습니다.
import matplotlib.pyplot as plt plt.bar(left = (0,1),height = (1,0.5),width = 0.35) plt.show()이때 또 다른 요구사항이 있는데, x축과 y축에 대한 설명을 표기해 주어야 합니다. 예를 들어 x축은 성별이고 y축은 인원수입니다. 구현도 매우 간단합니다. 코드를 살펴보세요.
import matplotlib.pyplot as plt plt.xlabel(u'性别') plt.ylabel(u'人数') plt.bar(left = (0,1),height = (1,0.5),width = 0.35) plt.show()여기서는 중국어에 u를 사용해야 합니다(3.0 이상에서는 사용되지 않는 것 같습니다). , 저는 2.7을 사용합니다. matplotlib는 유니코드만 지원하기 때문입니다. 다음으로 x축의 각 막대를 살펴보겠습니다. 예를 들어, 첫 번째는 "남성"이고 두 번째는 "여성"입니다.
import matplotlib.pyplot as plt plt.xlabel(u'性别') plt.ylabel(u'人数') plt.xticks((0,1),(u'男',u'女')) plt.bar(left = (0,1),height = (1,0.5),width = 0.35) plt.show()plt.xticks의 사용법은 앞서 언급한 left 및 height의 사용법과 유사합니다. 막대가 여러 개인 경우 여러 차원의 튜플입니다. 첫 번째는 텍스트의 위치이고 두 번째는 특정 텍스트 설명입니다. 그러나 여기에는 문제가 있습니다. 분명히 우리가 지정한 위치는 다소 "오프셋"되어 있으며 이상적인 상태는 각 직사각형의 중앙에 있어야 합니다. (0,1)=>((0+0.35)/2, (1+0.35)/2)를 변경할 수 있지만 이것이 더 번거롭습니다. bar 메소드
import matplotlib.pyplot as plt plt.xlabel(u'性别') plt.ylabel(u'人数') plt.xticks((0,1),(u'男',u'女')) plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center") plt.show()에서 align="center"를 직접 지정하여 텍스트를 중앙에 배치할 수 있습니다. 다음으로 아이콘에 제목을 추가할 수도 있습니다.
plt.title(u"性别比例分析")물론 전설도 빼놓을 수 없습니다.
import matplotlib.pyplot as plt plt.xlabel(u'性别') plt.ylabel(u'人数') plt.title(u"性别比例分析") plt.xticks((0,1),(u'男',u'女')) rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center") plt.legend((rect,),(u"图例",)) plt.show()전설에 주목하세요 여기서 메서드 내부의 매개변수는 튜플이어야 합니다. 범례가 하나만 있어도 올바르게 표시되지 않습니다. 다음으로 각 직사각형에 특정 지점의 Y 값을 표시할 수도 있습니다. 여기서는 일반적인 방법을 사용해야 합니다.
def autolabel(rects): for rect in rects: height = rect.get_height() plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))plt.text의 매개변수는 x 좌표, y 좌표 및 표시할 텍스트입니다. 따라서 호출 코드는 다음과 같습니다.
import matplotlib.pyplot as plt def autolabel(rects): for rect in rects: height = rect.get_height() plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height)) plt.xlabel(u'性别') plt.ylabel(u'人数') plt.title(u"性别比例分析") plt.xticks((0,1),(u'男',u'女')) rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center") plt.legend((rect,),(u"图例",)) autolabel(rect) plt.show()이 시점에서 기본적으로 그래픽은 완성되었으나 상단 가까이에 직사각형이 생긴 것을 알 수 있습니다. , 별로 좋지 않습니다. 좀 거리를 두고 나오는 게 좋을 것 같아요. 이 설정에 대한 특정 속성을 찾지 못했습니다. 그러나 나는 약간의 트릭을 사용하여 해냈습니다. bar 속성의 yerr 매개변수입니다. 이 매개변수가 설정되면 해당 직사각형에 수직선이 표시됩니다. 그런데 이 값을 아주 작은 값으로 설정하면 위의 공간은 자동으로 비워지게 됩니다. 그림에 표시된 대로:
direct = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center",yerr=0.000001 )