在seaborn中定制facetgrid xticks和标签

时间:2016-11-23 14:26:31

标签: python numpy matplotlib seaborn

如何在seaborn的FacetGrid内定制ticklabels的属性?在下面的例子中,我想改变只有x轴ticklabels的字体大小:

import matplotlib.pylab as plt
import seaborn as sns
df1 = pandas.DataFrame({"x": np.random.rand(100),
                        "y": np.random.rand(100)})
df1["row"] = "A"
df1["col"] = "1"
df2 = pandas.DataFrame({"x": np.random.rand(100),
                       "y": np.random.rand(100) + 1})
df2["row"] = "A"
df2["col"] = "2"
df = pandas.concat([df1, df2])
g = sns.FacetGrid(df, row="row", col="col", hue="col")
g.map(plt.scatter, "x", "y")
print g.axes
row, col = g.axes.shape
for i in range(row):
    for j in range(col):
        ax = g.axes[i, j]
        print "ax: ", ax.get_xticklabels()
        ax.set_xticklabels(ax.get_xticklabels(), fontsize=6)

我的解决方案遍历axes对象的FacetGrid数组,这似乎不必要地复杂化。我知道fontscale可以全局设置,但我只想更改x轴ticklabel字体。有一个更好的方法吗?还有一种方法可以将标签的样式定制为科学记数法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用flatten方法简化循环。我还添加了一种用科学记法格式化的方法。 .0e表示带小数为0的科学记数法。

import matplotlib.ticker as tkr

for ax in g.axes.flatten():
    ax.set_xticklabels(ax.get_xticklabels(), fontsize=6)
    ax.xaxis.set_major_formatter(
        tkr.FuncFormatter(lambda x, p: "{:.0e}".format(x)))