如何在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字体。有一个更好的方法吗?还有一种方法可以将标签的样式定制为科学记数法吗?
答案 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)))