2013-04-18 89 views
2

輸入我有一個熊貓數據幀,看起來像這樣:熊貓據幀作爲matplotlib.pyplot.boxplot

[('1975801_m', 1  0.203244 
10 -0.159756 
16 -0.172756 
19 -0.089756 
20 -0.033756 
23 -0.011756 
24  0.177244 
32  0.138244 
35 -0.104756 
36  0.157244 
40  0.108244 
41  0.032244 
42  0.063244 
45  0.362244 
59 -0.093756 
62 -0.070756 
65 -0.030756 
66 -0.100756 
73 -0.140756 
77 -0.110756 
81 -0.100756 
84 -0.090756 
86 -0.180756 
87  0.119244 
88  0.709244 
102 -0.030756 
105 -0.000756 
107 -0.010756 
109 0.039244 
111 0.059244 
Name: RTdiff), ('3878418_m', 1637 0.13811 
1638 -0.21489 
1644 -0.15989 
1657 -0.11189 
1662 -0.03289 
1666 -0.09489 
1669 0.03411 
1675 -0.00489 
1676 0.03511 
1677 0.39711 
1678 -0.02289 
1679 -0.05489 
1681 -0.01989 
1691 0.14411 
1697 -0.10589 
1699 0.09411 
1705 0.01411 
1711 -0.12589 
1713 0.04411 
1715 0.04411 
1716 0.01411 
1731 0.06411 
1738 -0.25589 
1741 -0.21589 
1745 0.39411 
1746 -0.13589 
1747 -0.10589 
1748 0.08411 
Name: RTdiff) 

我想用它作爲輸入的mtplotlib.pyplot.boxplot功能。

我從matplotlib.pyplot.boxplot(mydataframe)得到的錯誤是ValueError: cannot set an array element with a sequence

我試圖用list(mydataframe)而不是mydataframe。這失敗了同樣的錯誤。

我也試過matplotlib.pyplot.boxplot(np.fromiter(mydataframe, np.float)) - 失敗與ValueError: setting an array element with a sequence.

+0

大熊貓dataframes有自己的箱線圖法(即'mydataframe.boxplot()')。這是否讓你在需要的地方? –

+0

我想將它們與其他東西一起繪製,熊貓boxplot函數爲每個boxplot集合創建一個新圖形。另外,顯然它不會讓我定製顏色或位置。 – TheChymera

+0

這很棘手,但你可以做到。看我的反應 –

回答

10

目前尚不清楚你的數據在數據幀。它似乎是一個Series對象列表。

一旦它真的在DataFrame中,這裏的訣竅就是提前創建您的圖形和座標軸,並使用**kwargs,您通常會在matplotlib.axes.boxplot上使用它。您還需要確保您的數據是數據框,而不是一個系列

import numpy as np 
import matplotlib.pyplot as plt 
import pandas 

fig, ax = plt.subplots() 
df = pandas.DataFrame(np.random.normal(size=(37,5)), columns=list('ABCDE')) 
df.boxplot(ax=ax, positions=[2,3,4,6,8], notch=True, bootstrap=5000) 
ax.set_xticks(range(10)) 
ax.set_xticklabels(range(10)) 
plt.show() 

這給了我:boxplots

如果做不到這一點,你可以採取類似的方法,通過你想列循環直接使用您的ax對象繪圖。

import numpy as np 
import matplotlib.pyplot as plt 
import pandas 

df = pandas.DataFrame(np.random.normal(size=(37,5)), columns=list('ABCDE')) 
fig, ax = plt.subplots() 
for n, col in enumerate(df.columns): 
    ax.boxplot(df[col], positions=[n+1], notch=True) 

ax.set_xticks(range(10)) 
ax.set_xticklabels(range(10)) 
plt.show() 

其中給出: more boxplots