我试图在同一个箱形图上叠加一个箱形图(基于另一个变量的一系列箱形图)和该变量的中值线图。像下面这样的简单代码工作得很好。
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 的行为是这样的。
我遇到了类似的问题,我通过将我的日期时间列转换为字符串来“解决它”。
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()