Programing

별도의 Pandas DataFrame을 서브 플롯으로 플로팅하려면 어떻게해야합니까?

lottogame 2020. 8. 29. 11:49
반응형

별도의 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=Trueplt.subplots.


e.gs를 볼 수 있습니다. joris 대답을 보여주는 문서 에서 . 또한 문서에서, 당신은 또한 설정할 수 subplots=Truelayout=(,)팬더의 내부 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

반응형