繁体   English   中英

如何在现有的matplotlib轴上设置seaborn样式

[英]How to set seaborn styles on existing matplotlib axes

我正在尝试使用seaborn为(可能很大)数量的matplotlib图设置轴属性。 我想要做的是通过一次调用plt.subplots生成所有绘图,然后在生成每个实际绘图时设置子绘图样式。 不幸的是,似乎sns样式仅在生成子图时才有意义。

下面的代码是最小(非)工作示例。 理想情况下,这两个子图将有两种不同的样式,但它们没有。

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

def makeplt(sub, dat):
    sub.contour(dat)

def makepltwith(sub, dat, style):
    with sns.axes_style(style) as sty:
        sub.contour(dat)

dat = np.arange(100).reshape(10, 10)
with sns.axes_style('ticks'):
    fig, subs = plt.subplots(ncols=2)
makeplt(subs[0], dat)
makepltwith(subs[1], dat, 'darkgrid')
plt.show()

有没有办法确保第二个绘图具有我希望它具有的格式? 我自己最好的想法就是使用sty对象来手动重新格式化sub对象,但是我无法想出一种简单的格式化方法。

seaborn.__version__=0.7matplotlib.__version__=1.5如果重要的话。

我遇到了类似的问题并解决了这个问题:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

def add_sp_default(fig,pos):
    ax = fig.add_subplot(pos)
    return ax

def add_sp_image(fig,pos):
    ax = fig.add_subplot(pos)
    img=mpimg.imread('http://static.wixstatic.com/media/4afb41_998a1c7c0835c6eae5e159be3c2cfc07.png_1024')
    ax.imshow(img)
    ax.set_axis_off()
    return ax

def add_sp_polar(fig,pos):
    ax = fig.add_subplot(pos,projection='polar')
    return ax

def add_sp_xkcd(fig,pos):
    with plt.xkcd():
        ax = fig.add_subplot(pos)
    return ax

fig = plt.figure(figsize=(10,7))
ax1 = add_sp_default(fig,221)
ax2 = add_sp_image(fig,222)
ax3 = add_sp_polar(fig,223)
ax4 = add_sp_xkcd(fig,224)

plt.show()

输出

不,这是不可能的。 创建轴时应用轴样式。

当然,还有其他方法可以设置子图,而不涉及将它们全部放在一行代码中,这对于特定于子图的样式更为合适。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM