Overlaying box plot and line plot seaborn

问题描述 投票:0回答:1

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

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()

这给

但是,当我为这个data使用相同的代码时,我正在从csv文件中读取,我只是不能将线图与箱线图一起出现。

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()

给这个

lineplot命令在boxplot之前还是之后都没有关系,只显示箱线图。仅当箱线图线被注释掉时,我才会看到该线。

我不明白这个数据有什么不同我正在从 csv 读取我无法覆盖线和框

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

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

它给出了想要的结果:

我很好奇为什么 seaborn lineplot 的行为是这样的。

python data-visualization seaborn boxplot line-plot
1个回答
0
投票

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

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()

© www.soinside.com 2019 - 2024. All rights reserved.