Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从两个系列创建长方体打印_Python_Pandas_Seaborn_Boxplot - Fatal编程技术网

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)