在 seaborn 小提琴图中使用拆分时显示两个箱线图
Showing both boxplots when using split in seaborn violinplots
我想制作拆分小提琴图,它也显示两个数据集的箱线图,就像问题图中的 一样,问题是当使用 split seaborn 时只显示其中一个(而且它是我什至不清楚它指的是哪个数据集)正如你在答案中看到的那样,有没有办法克服这个问题或者我应该使用不同的包?
这里是一个人工数据集示例,展示了默认 inner='box'
如何为组合数据集显示一个简单的 boxplot-like 框。
第二个图显示了 inner='quartile'
的样子。
最右边的图显示了一种明确绘制单独箱线图的方法(使用 width=
将它们放在靠近中心的位置)。
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
data = pd.DataFrame({'Value': (np.random.randn(4, 100).cumsum(axis=0) + np.array([[15], [5], [12], [7]])).ravel(),
'Set': np.repeat(['A', 'B', 'A', 'B'], 100),
'x': np.repeat([1, 2], 200)})
fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(15, 4))
palette = ['paleturquoise', 'yellow']
sns.violinplot(data=data, x='x', y='Value', hue='Set', split=True, inner='box', palette=palette, ax=ax1)
ax1.set_title('Default, inner="box"')
sns.violinplot(data=data, x='x', y='Value', hue='Set', split=True, inner='quartiles', palette=palette, ax=ax2)
ax2.set_title('Using inner="quartiles"')
sns.violinplot(data=data, x='x', y='Value', hue='Set', split=True, inner=None, palette=palette, ax=ax3)
sns.boxplot(data=data, x='x', y='Value', hue='Set', color='white', width=0.3, boxprops={'zorder': 2}, ax=ax3)
ax3.set_title('Explicitely drawing boxplots')
handles, labels = ax3.get_legend_handles_labels()
ax3.legend(handles[:2], labels[:2], title='Set')
plt.tight_layout()
plt.show()
我想制作拆分小提琴图,它也显示两个数据集的箱线图,就像问题图中的
这里是一个人工数据集示例,展示了默认 inner='box'
如何为组合数据集显示一个简单的 boxplot-like 框。
第二个图显示了 inner='quartile'
的样子。
最右边的图显示了一种明确绘制单独箱线图的方法(使用 width=
将它们放在靠近中心的位置)。
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
data = pd.DataFrame({'Value': (np.random.randn(4, 100).cumsum(axis=0) + np.array([[15], [5], [12], [7]])).ravel(),
'Set': np.repeat(['A', 'B', 'A', 'B'], 100),
'x': np.repeat([1, 2], 200)})
fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(15, 4))
palette = ['paleturquoise', 'yellow']
sns.violinplot(data=data, x='x', y='Value', hue='Set', split=True, inner='box', palette=palette, ax=ax1)
ax1.set_title('Default, inner="box"')
sns.violinplot(data=data, x='x', y='Value', hue='Set', split=True, inner='quartiles', palette=palette, ax=ax2)
ax2.set_title('Using inner="quartiles"')
sns.violinplot(data=data, x='x', y='Value', hue='Set', split=True, inner=None, palette=palette, ax=ax3)
sns.boxplot(data=data, x='x', y='Value', hue='Set', color='white', width=0.3, boxprops={'zorder': 2}, ax=ax3)
ax3.set_title('Explicitely drawing boxplots')
handles, labels = ax3.get_legend_handles_labels()
ax3.legend(handles[:2], labels[:2], title='Set')
plt.tight_layout()
plt.show()