我使用python中的seaborn
库编写了下面的代码,它根据seaborn
库中的数据绘制了一个直方图网格:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns, numpy as np
from pylab import *
penguins = sns.load_dataset('penguins')
sns.displot(penguins, x='bill_length_mm', col='species', row='island', hue='island',height=3,
aspect=2,facet_kws=dict(margin_titles=True, sharex=False, sharey=False),kind='hist', palette='viridis')
plt.show()
这将生成以下直方图网格:
因此,我们有每个物种-岛屿组合的直方图,这些直方图显示了不同企鹅喙长度的频率分布,它们被组织成一个直方图“网格”,其中直方图网格的列是按物种组织的,网格的行是按岛屿组织的,因此,我看到seaborn自动将每个列标签命名为“物种”,其参数为:col= species
。然后,我看到seaborn将每行标记为“Count”,各行按岛屿组织,并使用参数中不同的代表性“色调”:色调= island
。
我试图做的是覆盖这些默认的自动标签来添加我自己的定制。具体来说,我想做的是在“物种”标题下面只用“A”、“B”和“C”替换顶部的轴标签,在左侧的轴上,用每个岛屿的名称替换每个“计数”示例,但所有这些标签的字体都要大得多。
这就是我想要创造的:
我想弄明白的是,如何“覆盖”上述海运参数中的自动标记,以便我可以打印我的自定义直方图网格标签,但要以动态方式完成,这样,如果有可能存在另一个包含更多岛屿和更多物种的数据集,仍将生成预期的标记组织?
1条答案
按热度按时间nbewdwxp1#
sns.displot
函数返回一个FacetGrid
对象。这个对象允许你用set_titles()
set_axis_labels()
方法自定义行和列的标题。但是,对于你想要实现的自定义图形,恐怕你必须直接通过FacetGrid.axes
覆盖标签和标题,FacetGrid.axes
允许你访问matplotlib.Axis
的ndarray
。非常定制,但应该能给予你理想的身材