在子图中改变海洋风格 - python

我正在尝试更改同一图中两个图的样式:

import numpy as np
from numpy.random import randn
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns

fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(15,6))
data = randn(7500);

sns.set_style("whitegrid");
ax1.hist(data, bins=8);

sns.set_style("darkgrid");
ax2.hist(data, bins=8);

这不起作用,两个图最终都具有"darkgrid"背景。我也尝试尝试修改axes_style(),但没有成功。

python大神给出的解决方案

matplotlib Axes的工作方式是,样式参数在创建时即成为Axes对象的属性,而不是在其上绘制内容时变为。因此,虽然无法使用plt.subplots制作具有不同子图样式的图形,但是可以使用独立创建轴的一种方法来实现:

fig = plt.figure()
with sns.axes_style("whitegrid"):
    ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

还要注意,我正在使用上下文管理器来设置第一个轴的样式,因此第二个轴将具有默认样式。可以像在问题中一样在每个sns.set_style命令之前使用add_subplot,但是使用上下文管理器创建非默认图会感觉有点Pythonic。