代码之家  ›  专栏  ›  技术社区  ›  IVR

Seaborn:标题和副标题位置

  •  1
  • IVR  · 技术社区  · 6 年前

    H均,

    我想创建一个散点图,标题,副标题,颜色对应一个特定的变量,大小对应另一个变量。我要显示颜色的图例,但不显示尺寸。这是我目前为止所拥有的:

    导入 将Seaborn导入为sns 导入Matplotlib 从Matplotlib导入样式 将matplotlib.pyplot导入为plt γ参数 matplotlib.rcparams['font.family']=“机器人” style.use('fivethirtyeight') 负荷数据 iris=sns.load_dataset('iris') γ图 ax=sns.relplot( “SePall长度”, “SePall宽度”, 色相=“物种”, size='花瓣宽度', α=0.75, 种类=“散布”, 传说=虚伪, 数据=虹膜 ) #进行调整 ax.设置_轴_标签(x_var='sepal length',y_var='sepal width') plt.text(x=4.7,y=4.7,s='sepal length vs width',fontsize=16,weight='bold') plt.text(x=4.7,y=4.6,s='每个点的大小对应于sepal宽度',fontsize=8,alpha=0.75) 显示() < /代码>

    输出:

    以下是我的问题:

    1)是否有更好的方式设置副标题?我用 ax.suptitle(“blah”,y=1.05) 尝试了这个方法,但结果它不在图的范围内。我不喜欢这样,我必须为我的标题/副标题设置x和y坐标。

    2)是否有方法显示颜色图例而不显示尺寸图例?我也希望能够显示这个图例下面的绘图(或外面)。 如果您可以回答该问题,我将更改此文章的标题,将您的答案标记为完成,并创建关于标题和副标题的另一个问题

    非常感谢!
    # imports
    import seaborn as sns
    import matplotlib
    from matplotlib import style
    import matplotlib.pyplot as plt
    
    # parameters
    matplotlib.rcParams['font.family'] = "roboto"
    style.use('fivethirtyeight')
    
    # load data
    iris = sns.load_dataset('iris')
    
    # plot
    ax = sns.relplot(
        'sepal_length',
        'sepal_width',
        hue='species',
        size='petal_width',
        alpha=0.75,
        kind="scatter",
        legend=False,
        data=iris
    )
    
    # make adjustments
    ax.set_axis_labels(x_var='Sepal Length', y_var='Sepal Width')
    plt.text(x=4.7, y=4.7, s='Sepal Length vs Width', fontsize=16, weight='bold')
    plt.text(x=4.7, y=4.6, s='The size of each point corresponds to sepal width', fontsize=8, alpha=0.75)
    plt.show()
    

    输出:

    scatterplot

    以下是我的问题:

    1)是否有更好的方式设置副标题?我用 ax.suptitle("blah", y=1.05) 但最终却超出了这个数字的范围。我不喜欢这样,我必须为我的标题/副标题设置X和Y坐标。

    2)是否有方法显示颜色图例而不显示尺寸图例?我也希望能够显示这个图例下面的绘图(或外面)。 如果你能回答这个问题,我会修改这篇文章的标题,将你的答案标记为完整,并创建关于标题和副标题的另一个问题。

    多谢!

    1 回复  |  直到 6 年前
        1
  •  3
  •   Diziet Asahi    6 年前

    使用 scatterPlot()使操作图例更容易。如果您使用 legend='brief->code>则会得到此图例:

    您可以使用以下方式获取用于创建此图例的艺术家和标签:

    h,l=ax.get_legend_handles_labels()。
    < /代码> 
    
    

    因为您只需要颜色信息,而不是尺寸,所以解决方案只是使用前一半的艺术家重新创建图例。

    ax.legend(h[:4],l[:4])
    < /代码> 
    
    

    完整代码:

    matplotlib.style.use('fivethirtyeight')
    负荷数据
    iris=sns.load_dataset('iris')
    
    γ图
    Fig,ax=plt.子批次(FigSize=(7,5))。
    散射图(
    “SePall长度”,
    “SePall宽度”,
    色相=“物种”,
    size='花瓣宽度',
    α=0.75,
    图例=“简短”,
    数据=虹膜,
    斧子
    )
    
    #进行调整
    ax.set xlabel('sepal length')
    ax.set伊拉贝尔(sepal width)
    
    ax.text(x=0.5,y=1.1,s='sepal length vs width',fontsize=16,weight='bold',ha='center',va='bottom',transform=ax.transaxs)
    ax.text(x=0.5,y=1.05,s='每个点的大小对应于sepal宽度',fontsize=8,alpha=0.75,ha='中心',va='底部',transform=ax.transaxs)
    
    h,l=ax.get_legend_handles_labels()。
    ax.图例(h[:4],l[:4],bbox_to_anchor=(1.05,1),loc=2)
    
    图紧密布局
    显示()
    < /代码> 
    
    

    enter image description here

    您可以使用以下方法获取用于创建此图例的艺术家和标签:

    h,l = ax.get_legend_handles_labels()
    

    因为您只需要颜色信息,而不是尺寸,所以解决方案只是使用前一半的艺术家重新创建图例。

    ax.legend(h[:4],l[:4])
    

    完整代码:

    matplotlib.style.use('fivethirtyeight')
    # load data
    iris = sns.load_dataset('iris')
    
    # plot
    fig, ax = plt.subplots(figsize=(7,5))
    sns.scatterplot(
        'sepal_length',
        'sepal_width',
        hue='species',
        size='petal_width',
        alpha=0.75,
        legend='brief',
        data=iris,
        ax=ax
    )
    
    # make adjustments
    ax.set_xlabel('Sepal Length')
    ax.set_ylabel('Sepal Width')
    
    ax.text(x=0.5, y=1.1, s='Sepal Length vs Width', fontsize=16, weight='bold', ha='center', va='bottom', transform=ax.transAxes)
    ax.text(x=0.5, y=1.05, s='The size of each point corresponds to sepal width', fontsize=8, alpha=0.75, ha='center', va='bottom', transform=ax.transAxes)
    
    h,l = ax.get_legend_handles_labels()
    ax.legend(h[:4],l[:4], bbox_to_anchor=(1.05, 1), loc=2)
    
    fig.tight_layout()
    plt.show()
    

    enter image description here