叠加箱形图和线形图

时间:2019-07-12 16:26:56

标签: python data-visualization seaborn boxplot line-plot

我试图在同一箱形图上叠加一个箱形图(一系列基于另一个变量的箱形图)和该变量的中位数的线形图。像下面这样的简单代码可以很好地工作。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

dfx=pd.DataFrame({'S':np.random.randint(10,100,9)*10,'C': 
['X','X','X','Y','Y','Y','Z','Z','Z']})

fig,ax=plt.subplots()
mx=dfx.groupby('C')['S'].median()
sns.boxplot(y='S',x='C',data=dfx,ax=ax)
sns.lineplot(y=mx.values,x=mx.index,ax=ax)
plt.show()

给出

enter image description here

但是,当我从csv文件中读取此data时使用相同的代码时,我只是无法使线图与盒形图一起出现。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df=pd.read_csv('test.csv')
fig,ax=plt.subplots()
m=df.groupby('Start Date')['Score'].median()
sns.boxplot(y='Score',x='Start Date',data=df,ax=ax)
sns.lineplot(y=m.values,x=m.index,ax=ax)
plt.show()

给出了 enter image description here

lineplot命令在boxplot之前还是之后都没有关系,仅显示box plot。仅当注释掉boxplot行时,我才看到该行。

我不了解this data与csv有什么区别,我无法覆盖行和框

P.S:我知道一个简单的解决方法是用matplotlib line命令替换seaborn lineplot行

ax.plot(m.values,'r-o',linewidth=4)

并给出期望的结果:

enter image description here

我很好奇为什么seaborn线图的行为方式如此。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我通过将datetime列转换为字符串来“解决了”。

df_median.date = df_median.date.astype(str)
df_aux.date = df_aux.date.astype(str)

sns.set()


ax = sns.stripplot('date',
                  'value',
                  data=df_aux)

ax = sns.lineplot('date',
                  'value',
                  data=df_median,
                  ax=ax)
plt.xlabel("month")
plt.ylabel("values")
labels = ax.axes.get_xticklabels()
ax.axes.set_xticklabels(labels, rotation=45)

plt.show()

enter image description here