본문 바로가기

혼자 파이썬

matplotlib 그래프 그리기

이번에 내가 PM 현황 정리를 하면서 가격 비교를 그냥 간단하게 그래프로 보여주고 싶었는데

기본요금따로 있고, 추가요금이 따로 있다보니까 어떻게 보여줘야할지 몰라서 파이썬을 써봤다

처음에는 블로그 이것저것 보면서 이런식으로 짜봤다.

그런데 The truth value of an array with more than one element is ambiguous. Use a.any() of a.all()

이라는 오류가 떴고 보니까 t가 array 형태로 되서 안된다는 것이었다. 

(다시 질문해본 결과 배열 자체를 3과 대소 비교할 수 없다 > ([1,2,3,4,5] 가 3보다 크냐? 라고 물어보면 몇개는 크고 몇개는 작다. 이렇게 딱 True False로 나올 수 없음 > 근데 if 뒤에는 True 아니면 False가 와야하니까 에러가 뜨는 것임)

빈셀에 t<3 을 쳐보니 True True True False False False False.....

t값을 하나씩 꺼내서 3과의 대소비교를 하고싶은거니까 for문을 쓰라는 조언을 들었다.

그래서 이렇게 한 후 밑에 t 범위를 np.linspace로 정의를 해줬음에도 오류가 났다

문제는 저렇게 return을 하면 저 값이 나오면 바로 함수가 종료가 된다! return의 특징 (return을 만나면 함 종료)

그래서 taxi(t)를 print해보면 2800만 나오고 끝이다

그래서 taxi를 list로 만들어야 하는데...... 이거를 위해서 점투파 예제를 보다가 해결방법이 떠올랐고, 오픈채팅에도 비슷한 답을 주셔서 응용을 해봤다.

(input 이 list일때 output도 list로 만들고 싶다면 for 문의 각 결과들을 list에 저장해줘야한다! by 괴발자 님)

이런 식으로 result = [] 라는 빈 리스트를 만들어놓고 for문을 돌리면서 .append를 하나씩 넣어준다

그리고 이후에 return 값으로 result를 뽑아주면 된다 (처음에 return을 안써줘서 엄청 고생했다ㅜㅜ)

그래서 위와같은 훌륭한 결과값이 나왔고 이거를 각각 taxi, 지쿠터, 어울링, 고고씽에 적용을 해서 그래프를 그렸다.

아 생각해보니 글꼴때문에도 엄청 고생했다. 그래프 범례를 추가하는데 한글이 깨지는 문제가 발생해서 

import matplotlib.font_manager as fm

from matplotlib import font_manager

font_fname = '폰트저장경로\폰트명.ttf'

font_family = font_manager.FontProperties(fname=font_fname).get_name()

이거를 해주니 괜찮았다! 다른 여러 방법을 써봤는데 이게 가장 잘 먹혔다 ㅎㅎㅎㅎ

 

'혼자 파이썬' 카테고리의 다른 글

[파이썬 기초] class, instance  (0) 2021.11.16
[파이썬 기초] map, lambda 함수  (0) 2021.11.16
[opencv] 이미지를 회색으로 바꾸기  (0) 2020.09.22