我在Python中有以下数据格式(实际的dataframe要大得多,只是提供了一个小示例):
A B C D E F
0 0.43 0.52 0.96 1.17 1.17 2.85
1 0.43 0.52 1.17 2.72 2.75 2.94
2 0.43 0.53 1.48 2.85 2.83
3 0.47 0.59 1.58 3.14
4 0.49 0.80 我使用df.values将dataframe转换为numpy,然后将其传递给boxplot。
当我试图用这个熊猫数据绘制一个盒子图时,从每一列中选择的值的数量被限制在一列中的最少值(在这种情况下,是F列)。是否有任何方法可以对每个列的所有值进行框式绘制?
注意:我使用df.dropna删除每列中缺少值的行。但是,这是将数据大小调整到列长度的最低公共分母,并扰乱绘图。
import prettyplotlib as ppl
import numpy as np
import pandas
import matplotlib as mpl
from matplotlib import pyplot
df = pandas.DataFrame.from_csv(csv_data,index_col=False)
df = df.dropna()
labels = ['A', 'B', 'C', 'D', 'E', 'F']
fig, ax = pyplot.subplots()
ppl.boxplot(ax, df.values, xticklabels=labels)
pyplot.show()发布于 2014-04-18 17:39:44
为了避免重新发明车轮,正确的方法是在pandas中使用pandas中的nan,其中nan正确地处理:
In [31]:
print df
A B C D E F
0 0.43 0.52 0.96 1.17 1.17 2.85
1 0.43 0.52 1.17 2.72 2.75 2.94
2 0.43 0.53 1.48 2.85 2.83 NaN
3 0.47 0.59 1.58 NaN 3.14 NaN
4 0.49 0.80 NaN NaN NaN NaN
[5 rows x 6 columns]
In [32]:
_=plt.boxplot(df.values)
_=plt.xticks(range(1,7),labels)
plt.savefig('1.png') #keeping the nan's and plot by plt

In [33]:
_=df.boxplot()
plt.savefig('2.png') #keeping the nan's and plot by pandas

In [34]:
_=plt.boxplot(df.dropna().values)
_=plt.xticks(range(1,7),labels)
plt.savefig('3.png') #dropping the nan's and plot by plt

https://stackoverflow.com/questions/23144071
复制相似问题