Ted*_*rou 28 python matplotlib seaborn
我试图从使用seaborn的统计学习简介一书中重新创建以下情节 
我特别想用seaborn lmplot来创建前两个图并boxplot创建第二个图.主要问题是lmplot facetgrid根据这个答案创建了一个强制我为盒子图添加另一个matplotlib轴.我想知道是否有更简单的方法来实现这一目标.下面,我必须进行相当多的手动操作才能获得所需的情节.
seaborn_grid = sns.lmplot('value', 'wage', col='variable', hue='education', data=df_melt, sharex=False)
seaborn_grid.fig.set_figwidth(8)
left, bottom, width, height = seaborn_grid.fig.axes[0]._position.bounds
left2, bottom2, width2, height2 = seaborn_grid.fig.axes[1]._position.bounds
left_diff = left2 - left
seaborn_grid.fig.add_axes((left2 + left_diff, bottom, width, height))
sns.boxplot('education', 'wage', data=df_wage, ax = seaborn_grid.fig.axes[2])
ax2 = seaborn_grid.fig.axes[2]
ax2.set_yticklabels([])
ax2.set_xticklabels(ax2.get_xmajorticklabels(), rotation=30)
ax2.set_ylabel('')
ax2.set_xlabel('');
leg = seaborn_grid.fig.legends[0]
leg.set_bbox_to_anchor([0, .1, 1.5,1])
Run Code Online (Sandbox Code Playgroud)
DataFrames的示例数据:
df_melt = {'education': {0: '1. < HS Grad',
1: '4. College Grad',
2: '3. Some College',
3: '4. College Grad',
4: '2. HS Grad'},
'value': {0: 18, 1: 24, 2: 45, 3: 43, 4: 50},
'variable': {0: 'age', 1: 'age', 2: 'age', 3: 'age', 4: 'age'},
'wage': {0: 75.043154017351497,
1: 70.476019646944508,
2: 130.982177377461,
3: 154.68529299562999,
4: 75.043154017351497}}
df_wage={'education': {0: '1. < HS Grad',
1: '4. College Grad',
2: '3. Some College',
3: '4. College Grad',
4: '2. HS Grad'},
'wage': {0: 75.043154017351497,
1: 70.476019646944508,
2: 130.982177377461,
3: 154.68529299562999,
4: 75.043154017351497}}
Run Code Online (Sandbox Code Playgroud)
Diz*_*ahi 51
一种可能性是不使用lmplot(),而是直接使用regplot().regplot()您作为参数传递的轴上的绘图ax=.
您无法根据某个变量自动拆分数据集,但如果您事先知道要生成的图,则不应该是一个问题.
像这样的东西:
fig, axs = plt.subplots(ncols=3)
sns.regplot(x='value', y='wage', data=df_melt, ax=axs[0])
sns.regplot(x='value', y='wage', data=df_melt, ax=axs[1])
sns.boxplot(x='education',y='wage', data=df_melt, ax=axs[2])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50703 次 |
| 最近记录: |