Seaborn boxplot定制标签放在旁边的盒子

我有下面给出的代码段,它生成了提供的箱线图。我想知道如何在每个框旁边添加自定义标签,以使框图对我的结果的读者更易消化。还提供了预期的图表。我认为应该有一个简单的方法可以在Seaborn / Matplotlib中完成此任务。

我真正想要的是在每个框中添加以下标签(如提供的示例所示,在左侧)

代码用于生成箱线图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as MaxNLocator
from matplotlib import rcParams
from matplotlib.ticker import ScalarFormatter,FuncFormatter,FormatStrFormatter,EngFormatter#,mticker
%matplotlib inline
import seaborn as sns

range_stats = pd.read_csv(f'{snappy_data_dir}range_searcg_snappy_stats.csv')
data_stats_rs_txt = range_stats[range_stats['category'] == "t"]
data_stats_rs_seq = range_stats[range_stats['category'] == "s"]

fig,ax =plt.subplots(1,2)
rcParams['figure.figsize'] =8,6
flierprops = dict(marker='x')
labels1 = ['R1','R2','R3','R4','R5']
sns.boxplot(x='Interval',y='Total',data=data_stats_rs_txt,palette='rainbow',ax=ax[0])

sns.boxplot(x='Interval',data=data_stats_rs_seq,ax=ax[1])
ax[0].set(xlabel='Interval (s)',ylabel='query execution time (s)',title='Text format',ylim=(0,290))
ax[1].set(xlabel='Interval (s)',ylabel='',title='Proposed format',290),yticklabels=[])
plt.savefig("range-query-corrected.svg")
plt.savefig('snappy_compressed_rangesearch.pdf')

结果图:

Seaborn boxplot定制标签放在旁边的盒子

带标签的预期数字

Seaborn boxplot定制标签放在旁边的盒子

jiangyao112 回答:Seaborn boxplot定制标签放在旁边的盒子

这可能对您有所帮助,尽管这不是完全正确的方法,也不是完整的解决方案。

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

tips = sns.load_dataset('tips')

fig,axes = plt.subplots(1,2,figsize=(12,4))
sns.set_context('poster',font_scale=0.5)

sns.boxplot(x="day",y="total_bill",data=tips,palette='rainbow',ax=axes[0],zorder=0)

axes[0].text(0,45,r"$B1$",fontsize=20,color="blue")
axes[0].text(0.9,r"$B2$",color="blue")
axes[0].text(2.2,r"$B3$",color="blue")
axes[0].text(3.1,r"$B4$",color="blue");

sns.boxplot(x="day",y="tip",ax=axes[1],zorder=10)

Sample plot

,
iris = sns.load_dataset("iris")
x_var = 'species'
y_var = 'sepal_width'
x_order = ['setosa','versicolor','virginica']
labels = ['R1','R2','R3']
max_vals = iris.groupby(x_var).max()[y_var].reindex(x_order)
ax = sns.boxplot(x=x_var,y=y_var,data=iris)

for x,y,l in zip(range(len(x_order)),max_vals,labels):
    ax.annotate(l,xy=[x,y],xytext=[0,5],textcoords='offset pixels',ha='center',va='bottom')

enter image description here

本文链接:https://www.f2er.com/3111115.html

大家都在问