별도의 Pandas DataFrame을 서브 플롯으로 플로팅하려면 어떻게해야합니까?
동일한 값 척도를 공유하지만 열과 인덱스가 다른 Pandas DataFrame이 몇 개 있습니다. 을 호출 할 때 df.plot()
별도의 플롯 이미지를 얻습니다. 내가 정말로 원하는 것은 그것들을 모두 서브 플롯과 동일한 플롯에 두는 것이지만, 불행히도 나는 어떻게 도움이 될지에 대한 해결책을 찾지 못하고 있습니다.
matplotlib를 사용하여 수동으로 서브 플롯을 생성 한 다음 ax
키워드를 사용하여 특정 서브 플롯에 데이터 프레임을 플로팅 할 수 있습니다 . 예를 들어 4 개의 서브 플롯 (2x2)의 경우 :
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
df1.plot(ax=axes[0,0])
df2.plot(ax=axes[0,1])
...
다음 axes
은 서로 다른 서브 플롯 축을 보유하는 배열이며 인덱싱만으로 액세스 할 수 있습니다 axes
.
당신이 공유 x 축을 원하는 경우에, 당신은 제공 할 수 있습니다 sharex=True
로 plt.subplots
.
e.gs를 볼 수 있습니다. joris 대답을 보여주는 문서 에서 . 또한 문서에서, 당신은 또한 설정할 수 subplots=True
와 layout=(,)
팬더의 내부 plot
기능 :
df.plot(subplots=True, layout=(1,2))
여기fig.add_subplot()
게시물에 설명 된대로 221, 222, 223, 224 등과 같은 서브 플롯 그리드 매개 변수를 사용 하는 것도 사용할 수 있습니다 . 서브 플롯을 포함하여 팬더 데이터 프레임에 대한 플롯의 좋은 예는 이 ipython 노트북 에서 볼 수 있습니다 .
당신은 전화 익숙한하기 matplotlib 스타일을 사용 figure
하고 subplot
있지만, 당신은 단순히 사용하여 현재 축을 지정해야합니다 plt.gca()
. 예 :
plt.figure(1)
plt.subplot(2,2,1)
df.A.plot() #no need to specify for first axis
plt.subplot(2,2,2)
df.B.plot(ax=plt.gca())
plt.subplot(2,2,3)
df.C.plot(ax=plt.gca())
기타...
이것을 사용할 수 있습니다 :
fig = plt.figure()
ax = fig.add_subplot(221)
plt.plot(x,y)
ax = fig.add_subplot(222)
plt.plot(x,z)
...
plt.show()
Pandas를 전혀 사용할 필요가 없을 수도 있습니다. 다음은 고양이 주파수의 matplotlib 플롯입니다.
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
f, axes = plt.subplots(2, 1)
for c, i in enumerate(axes):
axes[c].plot(x, y)
axes[c].set_title('cats')
plt.tight_layout()
위의 @joris 응답을 기반으로 이미 서브 플롯에 대한 참조를 설정 한 경우 참조도 사용할 수 있습니다. 예를 들면
ax1 = plt.subplot2grid((50,100), (0, 0), colspan=20, rowspan=10)
...
df.plot.barh(ax=ax1, stacked=True)
모든 데이터 프레임의 목록을 만드는 간단한 트릭과 함께 matplotlib를 사용하여 여러 팬더 데이터 프레임의 여러 서브 플롯을 플로팅 할 수 있습니다. 그런 다음 for 루프를 사용하여 서브 플롯을 플로팅합니다.
작동 코드 :
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# dataframe sample data
df1 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df2 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df3 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df4 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df5 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df6 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
#define number of rows and columns for subplots
nrow=3
ncol=2
# make a list of all dataframes
df_list = [df1 ,df2, df3, df4, df5, df6]
fig, axes = plt.subplots(nrow, ncol)
# plot counter
count=0
for r in range(nrow):
for c in range(ncol):
df_list[count].plot(ax=axes[r,c])
count=+1
이 코드를 사용하면 모든 구성에서 서브 플롯을 그릴 수 있습니다. 행 nrow
수와 열 수를 정의하기 만하면 ncol
됩니다. 또한 df_list
플롯하려는 데이터 프레임의 목록을 만들어야합니다 .
참고 URL : https://stackoverflow.com/questions/22483588/how-can-i-plot-separate-pandas-dataframes-as-subplots
'Programing' 카테고리의 다른 글
awk 내에서 작은 따옴표를 이스케이프하는 방법 (0) | 2020.08.29 |
---|---|
`string.split is not a function` 오류의 원인은 무엇입니까? (0) | 2020.08.29 |
문자열을 DateTime으로 변환 (0) | 2020.08.29 |
프로그램 설치에 대한 "예"응답을 어떻게 스크립팅합니까? (0) | 2020.08.29 |
커밋하는 동안 거북이 svn의 작업 복사본 잠김 오류 (0) | 2020.08.29 |