【问题标题】:How to set seaborn styles on existing matplotlib axes如何在现有的 matplotlib 轴上设置 seaborn 样式
【发布时间】:2016-02-01 10:06:23
【问题描述】:

我正在尝试使用 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.7, matplotlib.__version__=1.5 如果这很重要。

【问题讨论】:

    标签: python-3.x matplotlib seaborn


    【解决方案1】:

    我遇到了类似的问题,是这样解决的:

    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()
    

    【讨论】:

      【解决方案2】:

      不,这是不可能的。创建坐标区时应用坐标区样式。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多