如何在小提琴图后插入正则图

问题描述 投票:0回答:1

当我尝试组合

regplot
violinplot
时,它们被绘制在不同的位置。

df = pd.DataFrame({'Magnitudes': magnitudes, 'Lengths': np.log10(lengths), 'Widths': np.log10(widths)})

# Colors for violins
palette = sns.color_palette("Set2", len(fullpaths))
sns.set_style("darkgrid", {"grid.color": ".6", "grid.linestyle": ":"})
# Crear gráficos de violín con regresión lineal y personalización de color
plt.figure()

plt.subplot(2, 1, 1)
sns.regplot(x='Magnitudes', y='Lengths', data=df,scatter_kws={"alpha" : 0.0})
sns.violinplot(x='Magnitudes', y='Lengths', data=df, palette=palette, alpha=0.5,hue='Magnitudes',legend=False)
plt.title('Violin Plot of Lengths vs Magnitude')
plt.xlabel('Magnitude')
plt.ylabel('Lengths')
plt.subplot(2, 1, 2)
sns.regplot(x='Magnitudes', y='Widths', data=df,scatter_kws={"alpha" : 0.0})
sns.violinplot(x='Magnitudes', y='Widths', data=df, palette=palette, alpha=0.5,hue='Magnitudes',legend=False)
plt.title('Violin Plot of Widths vs Magnitude')
plt.xlabel('Magnitude')
plt.ylabel('Widths')

combined regplot and violinplot

python seaborn
1个回答
0
投票

默认情况下,seaborn 绘制分类图,例如带有分类 x 轴的小提琴图(或箱线图、条形图……)。在内部,它们位于位置

0, 1, 2, ...
。从 Seaborn 0.13 开始,这些函数接受参数
native_scale=True
,它将小提琴定位在其真实的数字位置(这只适用于数字 x 轴)。如果这些位置不能很好地以相同的距离递增,则使用两把小提琴之间的最小距离作为其宽度的参考。

这是一个示例,包括虚拟测试数据,并使用 matplotlib 的“现代”面向对象的界面(当有多个子图时强烈推荐)。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

# create some dummy test data
magnitudes = np.repeat(np.arange(8.1, 9.3001, 0.1), 50)
unique_magnitudes = np.unique(magnitudes)
lengths = 10 ** np.random.normal(0.1, 1, size=len(magnitudes)).cumsum()
widths = 10 ** np.random.normal(0.1, 1, size=len(magnitudes)).cumsum()

df = pd.DataFrame({'Magnitudes': magnitudes, 'Lengths': np.log10(lengths), 'Widths': np.log10(widths)})

# Colors for violins
palette = sns.color_palette("Set2", len(unique_magnitudes))
sns.set_style("darkgrid", {"grid.color": ".6", "grid.linestyle": ":"})
fig, (ax1, ax2) = plt.subplots(ncols=1, nrows=2, figsize=(10, 7))

sns.regplot(x='Magnitudes', y='Lengths', data=df, scatter_kws={"alpha": 0.0}, ax=ax1)
sns.violinplot(x='Magnitudes', y='Lengths', data=df, palette=palette, alpha=0.5, hue='Magnitudes', legend=False,
               native_scale=True, ax=ax1)
ax1.set_title('Violin Plot of Lengths vs Magnitude')
ax1.set_xticks(unique_magnitudes)  # make sure each x-position is labeled

sns.regplot(x='Magnitudes', y='Widths', data=df, scatter_kws={"alpha": 0.0}, ax=ax2)
sns.violinplot(x='Magnitudes', y='Widths', data=df, palette=palette, alpha=0.5, hue='Magnitudes', legend=False,
               native_scale=True, ax=ax2)
ax2.set_title('Violin Plot of Widths vs Magnitude')
ax2.set_xticks(unique_magnitudes)

plt.tight_layout()  # spacing for titles and labels
plt.show()

combining seaborn regplot and violinplot

© www.soinside.com 2019 - 2024. All rights reserved.