레이블이 matplotlib인 게시물을 표시합니다. 모든 게시물 표시
레이블이 matplotlib인 게시물을 표시합니다. 모든 게시물 표시

2019년 8월 25일 일요일

비중이 있는 막대 그래프


https://blog.naver.com/yoojchul/221620077238 에 소개된 스트레스 지수 계산에 이용된  4개의 카테고리는  비중이 있습니다. 



이 비중의 의미를 살리기 위하여  막대 그래프를 4개로 나누고 비중에 따라  폭을 조정합니다.  스트레스 지수 계산에 사용된 척도의 비중이 높을수록 해당 그래프의 폭이 넓습니다.   

전체 프로그램은 깃허브  https://github.com/yoojchul/bar-with-ratio/ 에 있습니다. 


ticks x 축에 이름을 붙이는 사용하고 top10seoul는 막대 그래프에 표시할 데이터입니다.



행은 하나고 열이 4개의 subplot으로 나눕니다.    gridspec_kw 를 통해 subplot의 폭을 조정합니다.  subplot의 크기는 ratio에 비례합니다.


 막대 그래프의 막대 폭은 0.3으로 합니다폭이 작아 막대 0.3도 표시하기 어려우면 막대는 자동적으로 0.3보다 작아집니다.


subplot마다  bar()를 호출해서 막대 그래프를 그립니다.  가장  왼쪽의 subplottick를 표시하고 나머지는 나중에 붙일 것에 대비하여 tick를 그리지 않습니다.   tick_parms(…, rotation=70)70도 기울여 tick 문자를 출력합니다.


wspace=0subplot 간의 간격을 없애 4개의 graph 하나로 보이기 합니다.

2019년 5월 6일 월요일

지도 그리기


지도에 정보를 표시하는 파이썬 패키지로 folium 만한 것이 없지만 때로는 folium 제공하는 지도보다 단순한 형태가 필요한 때가 있습니다. 행정 구역의 경계 위치를 알려 주는 데이터는 South Korea administrative division geodata (https://github.com/southkorea/southkorea-maps) 에서 구할 있습니다. 데이터로 단순한 지도를 파이썬에서 그릴려고 합니다.
파이썬에서 이용하기에 가장 좋은 지리 정보 형식은 geojson입니다. 점의 위도와 경도만 추출해서 함수 개만 사용하면 바로 그림을 있습니다.
여기에서 사용한 geojson 데이터는 https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2018/json/skorea-provinces-2018-geo.json입니다. 데이터는 PC 다운로드해서 저장해 놓습니다. 파일을 읽고 json.loads() 호출하면 딕셔너리형 데이터로 변환할 있습니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import json
with open("c:/Users/rcjcyoo/Downloads/skorea-provinces-2018-geo.json", encoding='utf-8') as json_file:
    jdata = json_file.read()
    geoJSON = json.loads(jdata)

pts=[]
for  feature in geoJSON['features']:
    if feature['geometry']['type']=='Polygon':
        pts.extend(feature['geometry']['coordinates'][0])    
        pts.append([None, None])
        
    elif feature['geometry']['type']=='MultiPolygon':
        for polyg in feature['geometry']['coordinates']:
            pts.extend(polyg[0])
            pts.append([None, None])
    else: raise ValueError("geometry type irrelevant for map")  

import matplotlib.pyplot as plt
x = [i for i,j in pts]
y = [j for i,j in pts]
fig = plt.figure(figsize=(12, 12))
ax = fig.gca()
ax.plot(x,y)
plt.show()

파이썬 프로그램으로 위도와 경도만 추출하고 추출한 위도와 경도를 x, y 나누어 저장한 다음 matplotlib plot() 함수를 이용해서 지도를 표시합니다.