[英]Overlaying box plot and line plot seaborn
我試圖在同一個箱線圖上疊加一個箱線圖(一系列基於另一個變量的箱線圖)和一個該變量中位數的線圖。 像下面這樣的簡單代碼工作得很好。
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 之后並不重要,只顯示 box plot。 僅當 boxplot 行被注釋掉時,我才會看到該行。
我不明白我從 csv 讀取的數據有什么不同,我無法覆蓋線和框
PS:我知道一個簡單的解決方法是用 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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.