Python 从两个系列创建长方体打印
我有两个熊猫系列的数字不一定是相同的大小。 我可以为这两个系列创建一个并排的方框图吗Python 从两个系列创建长方体打印,python,pandas,seaborn,boxplot,Python,Pandas,Seaborn,Boxplot,我有两个熊猫系列的数字不一定是相同的大小。 我可以为这两个系列创建一个并排的方框图吗 我没有找到从一个系列而不是从2个系列创建箱线图的方法。对于我生成的2个不同大小的测试系列: np.random.seed(0) s1 = pd.Series(np.random.randn(10)) s2 = pd.Series(np.random.randn(14)) 第一个处理步骤是将它们连接到单个数据帧中 并设置一些有意义的列名,这些列名将包含在图片中: df = pd.concat([s1, s2],
我没有找到从一个系列而不是从2个系列创建箱线图的方法。对于我生成的2个不同大小的测试系列:
np.random.seed(0)
s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(14))
第一个处理步骤是将它们连接到单个数据帧中
并设置一些有意义的列名,这些列名将包含在图片中:
df = pd.concat([s1, s2], axis=1)
df.columns = ['A', 'B']
要创建图片以及标题,您可以运行:
ax = df.boxplot()
ax.get_figure().suptitle(t='My Boxplot', fontsize=16);
对于我的源数据,结果是:
试试这个:
import numpy as np
ser1 = pd.Series(np.random.randn(10))
ser2 = pd.Series(np.random.randn(10))
## solution
pd.concat([ser1, ser2], axis=1).plot.box()
我们可以尝试使用示例数据集、两个系列、不等长度和定义的颜色
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(100)
S1 = pd.Series(np.random.normal(0,1,10))
S2 = pd.Series(np.random.normal(0,1,14))
colors = ['#aacfcf', '#d291bc']
一个选项是在一列中创建包含两个系列的data.frame,并为该系列提供标签:
fig, ax = plt.subplots(1, 1,figsize=(6,4))
import seaborn as sns
sns.boxplot(x='series',y='values',
data=pd.DataFrame({'values':pd.concat([S1,S2],axis=0),
'series':np.repeat(["S1","S2"],[len(S1),len(S2)])}),
ax = ax,palette=colors,width=0.5
)
另一种方法是直接使用matplotlib,正如其他解决方案所建议的那样。但是,不需要按列合并它们并创建一定数量的NAs。可以直接使用matplotlib中的plt.boxplot来绘制值数组。缺点是,调整颜色等需要一些努力,如下所示:
fig, ax = plt.subplots(1, 1,figsize=(6,4))
bplot = ax.boxplot([S1,S2],patch_artist=True,widths=0.5,
medianprops=dict(color="black"),labels =['S1','S2'])
plt.setp(bplot['boxes'], color='black')
for patch, color in zip(bplot['boxes'], colors):
patch.set_facecolor(color)