微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas Boxplot ,还包括带有标记的最新值

如何解决Pandas Boxplot ,还包括带有标记的最新值

我有一个箱线图,我想从具有 5 个不同分类变量(不同类型的油)的时间序列中显示

如何使用标记显示最新值,显示在相关箱形图上。在我的示例中,我使用变量 maxDate 来显示每种油类型的最新值。

import pandas as pd
import seaborn as sns

# read Data Files,create data frame for all products
dfBr = pd.read_excel (r'\filepath.xlsx',skiprows=1,usecols=(0,1,13,14))
dfCb = pd.read_excel (r'\filepath.xlsx',14))
sns.set_style('whitegrid')
total = [dfBr,dfCb]
df = pd.concat(total)

df.columns =['commodity','Date','mmLong','mmShort']
df.tail() 

df['Net_OI']=df['mmLong']-df['mmShort']
df['LS_Ratio']=df['mmLong']/df['mmShort']

df=df[df['Date'] > 180600]

df['commodity'] = df['commodity'].replace(['CRUDE OIL,LIGHT SWEET - NEW YORK MERCANTILE EXCHANGE','ICE Brent Crude Futures - ICE Futures Europe','CRUDE OIL,LIGHT SWEET-WTI - ICE FUTURES EUROPE','GASOLINE BLENDSTOCK (RBOB)  - NEW YORK MERCANTILE EXCHANGE','#2 HEATING OIL- NY HARBOR-ULSD - NEW YORK MERCANTILE EXCHANGE'],['WTI','BRN','ICE','RBOB','HO'])
maxDate = df.Date.iloc[-1]

currentWTI = df.loc[ (df['commodity'] == 'WTI') & (df['Date'] == maxDate)]
currentBrn = df.loc[ (df['commodity'] == 'BRN') & (df['Date'] == maxDate)]
currentIce = df.loc[ (df['commodity'] == 'ICE') & (df['Date'] == maxDate)]
currentRb = df.loc[ (df['commodity'] == 'RBOB') & (df['Date'] == maxDate)]
currentHo = df.loc[ (df['commodity'] == 'HO') & (df['Date'] == maxDate)]


fig,ax = plt.subplots(figsize=(8,8))
#sns.Boxplot(x='Net_OI',y='Market_and_Exchange_Names',data=three_yr_df);
sns.Boxplot(x=df.LS_Ratio,y=df.commodity);

plt.scatter(currentBrn.LS_Ratio,marker='*',s=350,color='orange');

目前最终结果如下所示,但我想显示所有 5 个项目的箱线图,并在 5 个项目中的每个项目上使用 Star 标记

任何帮助将不胜感激。

Boxplot with 1 marker

解决方法

由于没有提供数据,我以官方参考中的箱线图为例对您的作业进行编码。关键是使用每个类别变量中的最大值作为放置星星的数组。

import seaborn as sns
import matplotlib.pyplot as plt

sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")

fig,ax = plt.subplots()
ax = sns.boxplot(x="day",y="total_bill",data=tips)
star = tips[['day','total_bill']].groupby('day').max()
ax.scatter(star.index,star.total_bill,marker='*',s=350,color='orange')
plt.show()

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。