Python 叠加盒形图和线形图seaborn

Python 叠加盒形图和线形图seaborn,python,data-visualization,seaborn,boxplot,line-plot,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','

我试图在同一个方框图上覆盖一个方框图(基于另一个变量的一系列方框图)和该变量中间点的一个线条图。下面这样一个简单的代码可以很好地工作

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

然而,当我从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之前还是之后,都只显示boxplot。只有在注释掉箱线图线时,我才能看到该线

我不明白我从csv中读到的内容有什么不同,我无法覆盖行和框

注:我知道一个简单的解决方法是用matplotlib line命令替换seaborn lineplot线

ax.plot(m.values,'r-o',linewidth=4)
它给出了期望的结果:


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

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

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

我也面临着类似的问题,我通过将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()

在第一种情况下,x数据是字符串,在第二种情况下是数字。所以在第二种情况下,盒子被定位在位置0,1,2,。。。该生产线位于2013、2014、2015等位置@最重要的是感谢,这是有意义的。我该如何解决这个问题?问题的P.s.部分的解决方案有什么问题吗?@importanceofbeingerest实际上没有什么问题。我只是将其用于关注seaborn的课程,这个解决方案需要一些额外的解释,说明为什么seaborn不用于线图,并有可能将其与另一种线图技术混淆。我认为,如果没有向学生展示最基本的
plt.plot
命令,就不应该教授seaborn。毕竟,seaborn只是一个用于打印类型子集的伟大工具。在第一种情况下,x数据是字符串,在第二种情况下,它们是数字。所以在第二种情况下,盒子被定位在位置0,1,2,。。。该生产线位于2013、2014、2015等位置@最重要的是感谢,这是有意义的。我该如何解决这个问题?问题的P.s.部分的解决方案有什么问题吗?@importanceofbeingerest实际上没有什么问题。我只是将其用于关注seaborn的课程,这个解决方案需要一些额外的解释,说明为什么seaborn不用于线图,并有可能将其与另一种线图技术混淆。我认为,如果没有向学生展示最基本的
plt.plot
命令,就不应该教授seaborn。毕竟,seaborn只是一个用于打印类型子集的伟大工具。