파이썬 Matplotlib 수평 막대 그래프 히스토그램 시각화
Matplotlib는 파이썬에서 데이터 시각화를 할 때 가장 많이 사용되는 라이브러리입니다. 이번 글에서는 Matplotlib를 이용하여 수평 막대 그래프를 그리는 방법에 대해 알아보도록 하겠습니다. 수평 막대 그래프는 데이터를 수직으로 표시하는 그래프로, 데이터의 갯수나 비율 등을 빠르게 파악할 수 있는 그래프 중 하나입니다.
우리는 plt.barh() 함수를 이용하여 수평 막대 그래프를 그릴 수 있습니다. 이 함수는 y축에 해당하는 값과 x축에 해당하는 값을 인자로 받습니다. 그리고 크기를 조절하려면 figsize() 함수를 이용하여 그래프의 크기를 조절할 수 있습니다.
파이썬 히스토그램 시각화
여러 가지 방법이 있지만 가장 일반적인 방법은 matplotlib 라이브러리를 사용하는 것입니다. 아래는 히스토그램 시각화 예제 코드입니다.
import matplotlib.pyplot as plt
data = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]
plt.hist(data)
plt.show()
위 코드는 data 리스트를 사용하여 히스토그램을 생성합니다. plt.show() 를 호출하면 생성된 히스토그램이 화면에 나타납니다.
다른 히스토그램 시각화 방법으로는 seaborn 라이브러리를 사용하는 것도 있습니다. seaborn은 matplotlib을 기반으로 하고 있지만, 스타일이나 시각화 기능이 좀 더 향상되어 있습니다.
import seaborn as sns
data = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]
sns.distplot(data)
seaborn의 distplot 함수를 사용하면 히스토그램과 커널 밀도 추정(kernel density estimate)을 함께 그릴 수 있습니다. Pandas 역시 matplotlib를 기반으로 시각화 기능을 제공합니다.
import pandas as pd
data = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]
df = pd.DataFrame(data,columns=["data"])
df.plot.hist()
Pandas의 DataFrame 객체에 히스토그램 시각화를 제공하는 plot.hist() 메서드를 사용하면 히스토그램을 쉽게 그릴 수 있습니다. 어떤 방법을 사용하든 일반적으로 여러 옵션을 설정하여 히스토그램을 더욱 세부적으로 조절 할 수 있습니다.
막대그래프 시각화
막대 그래프를 시각화하는 방법으로는 matplotlib, seaborn, pandas 등을 사용할 수 있습니다.
matplotlib을 사용한다면, 아래와 같은 코드를 사용할 수 있습니다:
import matplotlib.pyplot as plt
data = {'A':10,'B':20,'C':30}
plt.bar(data.keys(), data.values())
plt.show()
seaborn을 사용한다면, 아래와 같은 코드를 사용할 수 있습니다:
import seaborn as sns
import pandas as pd
data = {'A':10,'B':20,'C':30}
df = pd.DataFrame.from_dict(data,orient='index',columns=['value'])
sns.barplot(data=df, x=df.index, y='value')
pandas를 사용한다면, 아래와 같은 코드를 사용할 수 있습니다. 막대 그래프를 시각화 할 때 여러 옵션을 설정하여 더욱 세부적으로 조절 할 수 있습니다.
import pandas as pd
data = {'A':10,'B':20,'C':30}
df = pd.DataFrame(list(data.items()),columns = ['keys','value'])
df.plot(kind='bar',x='keys',y='value',legend=False)
파이썬 에러 해결
KeyError Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
3360 try:
-> 3361 return self._engine.get_loc(casted_key)
3362 except KeyError as err:
~\anaconda3\lib\site-packages\pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
~\anaconda3\lib\site-packages\pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: '행정구역명'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_23452/3000728996.py in <module>
12 #sns.barplot(data=kyungki_academy_cnt, x=kyungki_academy_cnt.index, y='count')
13
---> 14 plt.bar(kyungki_academy_cnt['행정구역명'], kyungki_academy_cnt['count'])
~\anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
3456 if self.columns.nlevels > 1:
3457 return self._getitem_multilevel(key)
-> 3458 indexer = self.columns.get_loc(key)
3459 if is_integer(indexer):
3460 indexer = [indexer]
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
3361 return self._engine.get_loc(casted_key)
3362 except KeyError as err:
-> 3363 raise KeyError(key) from err
3364
3365 if is_scalar(key) and isna(key) and not self.hasnans:
KeyError: '행정구역명'
이 에러는 프로그램이 찾으려는 '행정구역명' 컬럼이 DataFrame에 존재하지 않음을 의미합니다. 행정구역명 컬럼이 포함된 DataFrame을 사용하거나, plt.bar() 함수의 첫 번째 인자를 정확한 컬럼 이름으로 바꿔주면 해결될 것입니다.
예를들면 이런식으로 해결 할 수 있습니다.
plt.bar(kyungki_academy_cnt.index, kyungki_academy_cnt['count'])
파이썬 수평 막대 그래프 시각화
수평 막대 그래프를 시각화하려면, 다음과 같이 matplotlib 또는 seaborn 라이브러리를 사용할 수 있습니다.
import matplotlib.pyplot as plt
data = {'도시': ['서울', '부산', '대전', '광주', '대구'],
'인구': [10000, 20000, 15000, 25000, 30000]}
df = pd.DataFrame(data)
plt.barh(df['도시'], df['인구'])
plt.xlabel('인구')
plt.ylabel('도시')
plt.title('도시별 인구')
plt.show()
import seaborn as sns
data = {'도시': ['서울', '부산', '대전', '광주', '대구'],
'인구': [10000, 20000, 15000, 25000, 30000]}
df = pd.DataFrame(data)
sns.barplot(x='인구', y='도시', data=df)
plt.xlabel('인구')
plt.ylabel('도시')
plt.title('도시별 인구')
plt.show()
위 코드는 수평 막대 그래프를 그리는 것이고, x,y축을 설정하면서 그리고 있습니다.
plt.barh(df.index, df['학원지정번호']) 여기 이미지를 좀 더 크게 만드는 방법
아래와 같이 plt.figure() 함수를 사용하여 그래프의 크기를 조절할 수 있습니다.
plt.figure(figsize=(10,8))
plt.barh(df.index, df['학원지정번호'])
figsize 인자를 사용하여 그래프의 크기를 조절할 수 있습니다. 첫번째 인자는 가로 크기, 두번째 인자는 세로 크기를 의미합니다. 위의 예시에서는 가로 크기를 10, 세로 크기를 8로 설정하였습니다.
아래의 파이썬 코드 내용 설명
아래의 파이썬 코드 에러 설명
C:\Users\user\anaconda3\lib\site-packages\IPython\core\interactiveshell.py:3444: DtypeWarning: Columns (10,20) have mixed types.Specify dtype option on import or set low_memory=False. exec(code_obj, self.user_global_ns, self.user_ns)
답변:
이 코드는 경고 메시지를 출력하는 것으로 보입니다. 이 경고는 데이터 프레임에서 열 10과 20의 유형이 섞여 있다는 것을 알려주며, 데이터를 읽어들일 때 dtype 옵션을 지정하거나 low_memory 옵션을 False로 설정하라는 것입니다.
아래 파이썬 코드를 실행시 개설월 컬럼에 따른 히스토그램 시각화가 안되고, 에러가 나옴. 에러 원인 분석해줘
summary = df_register.groupby("개설월").count()[["학원지정번호"]] #import matplotlib.pyplot as plt #%matplotlib inline #plt.hist(summary['개설월'])
답변:
코드를 분석해보면, 개설월 컬럼에 따라 df_register 데이터프레임을 그룹핑하여 학원지정번호 컬럼의 count를 구한 결과를 summary 변수에 할당하고 있습니다. 그리고 plt.hist() 함수를 이용해 summary['개설월']를 시각화하려 하지만, 에러가 나는 것 같습니다.
이 에러의 원인은 summary 변수가 개설월 컬럼과 학원지정번호 컬럼을 갖는 데이터프레임이라서, plt.hist() 함수는 summary['개설월']에 있는 데이터를 히스토그램으로 시각화 할 수 없기 때문입니다. 해결방법으로는 summary 데이터프레임에서 개설월 컬럼만 가져와 히스토그램으로 시각화하는 것이 좋겠습니다.
plt.hist(summary.index)
이렇게 하면 개설월 컬럼만 가져와 히스토그램으로 시각화 할 수 있습니다.
댓글