2014-09-11 6 views
4

하나의 그림에서 하나의 축에 여러 상자 플롯을 플롯하고자합니다. 그러나 boxplots에 사용하는 데이터는 너무 커서 한꺼번에 메모리에 읽을 수 없습니다. 그래서 나는 판다 read_csv()를 사용하여 청크로 그것을 읽었다. 내가하고 싶은 것은 각 반복에서 상자 플롯을 만들고 반복 플롯에서 새로운 박스 플롯을 반복 i-1의 박스 플롯과 동일한 그림으로 추가하는 것입니다. 반복 플롯 i-1의 데이터를 유지하지 않아도됩니다.matplotlib - 루프에서 박스 플롯 생성하기

나는 기존 상자 플롯에 대한 데이터를 업데이트 할 필요가 없다는 점을 강조하고 싶습니다. 각 반복마다 새 데이터 열을 얻는 것과 마찬가지로 기존 상자 플롯 옆에 해당 열의 boxplot을 표시하려고합니다.

예 :은 : 내가

df = pd.DataFrame(np.random.rand(100,2)) 

내가 다른 후 하나를 열을 읽을 수 있다고 가정 말해봐. ax.boxplot (df.values)와 동일한 결과를 얻으려면 첫 번째 열의 기존 상자 플롯에 두 번째 열의 boxplot을 어떻게 추가합니까?

+0

당신은 (...)'를 호출 플롯 할 수 있습니다 '(또는 다른 어떤 음모를 꾸미고 사용중인 기능) matplotlib''에서 여러 번하고는 그것을 계속 추가 할 것이다 : 여기

는 일부 코드입니다 당신이 그것을 바꿀 때까지 동일한 그림/서브 플롯. 특별한 일을 할 필요는 없습니다. 그래도 매우 많은 수의 데이터 포인트가있는 경우 matplotlib가 불만족하거나 느려질 수 있습니다. – will

+0

제안에 따라 xrange (2)에서 plt.figure()를 시도했습니다. plt.boxplot (df.ix [:, i] .values)'. 그러나 boxplots은 서로의 ontop으로 표시됩니다. Korem의 답을 고려해 볼 때 위치 인수를'plt.boxplot (df.ix [:, i] .values, positions = [i + 1])'로 추가했지만 두 번째 boxplot은 첫 번째 boxplot을 대체합니다. – user3820991

+0

@ user3820991 내 컴퓨터에서 작동하는 몇 가지 샘플 코드를 추가했습니다. – Korem

답변

4

boxplot 메서드의 인수는 positions입니다. 이를 사용하면 각 boxplot (또는 여러 상자)이 그 위치에 고정되도록 루프에서 보장 할 수 있습니다.

In [17]: x = pds.DataFrame(np.random.randn(10, 10)) 
In [18]: fig = plt.figure() 
In [19]: ax = plt.subplot(111) 
In [20]: for i in range(10): 
    ...:  ax.boxplot(x.ix[:,i].values, positions = [i]) 
    ...:  
In [21]: ax.set_xlim(-0.5, 9.5) 
In [22]: plt.show() 
+1

괜찮 았던가, 비밀은'ax.set_xlim()'이었다. 그것이 없다면, 다른 위치는 (위에서 쓴 것처럼) 후속 위치로 대체되지는 않았지만 단순히 그림에 표시되지 않았습니다. 감사! – user3820991

+0

@ user3820991 그래, 나는 그것이라고 생각했다. – Korem