Seaborn - 审美选择
Seaborn - aesthetic options
我正在使用 seaborn 因子图绘制 pandas 数据。代码如下:
import seaborn
import numpy as np
import pandas as pd
seaborn.set_style("white")
fg = seaborn.factorplot(x='Group', y='val', hue='Mean',
col='Sex', data=data, kind='bar', ci=68, row='Split', x_order=['Group 1', 'Group 2'],
row_order=['Poor','Good'], col_order=['Male', 'Female'], sharex=False, sharey=False,
palette='deep', legend_out=False
)
(fg.set_axis_labels("", "val")
.set_titles("{row_name} - {col_name}")
.set(ylim=(0, 300))
.despine(left=True)
)
这是一个示例数据框:
groups = ('Group 1', 'Group 2')
sexes = ('Male', 'Female')
means = ('Low', 'High')
split = ('Poor', 'Good')
index = pd.MultiIndex.from_product(
[groups, sexes, means, split],
names=['Group', 'Sex', 'Mean', 'Split']
)
values = np.random.randint(low=20, high=100, size=len(index))
data = pd.DataFrame(data={'val': values}, index=index).reset_index()
我查看了 seaborn 有哪些美学选项,但有一些我找不到参考:
这将创建一个包含 4 个地块的 2x2 网格。如何调整每个图之间的间距?现在,一切都靠得太近了
如何单独设置单独标签的字体大小?我希望某些 axis/categorical 标签比其他标签大
如何彻底删除图例标题?
对于 2x2 的地块网格,是否可以将同一行中的 2 个地块放在同一个地块上?即连接 x 轴,删除右图上的 y 轴
是否可以将绘图保存为基于矢量的文件格式?
fg = seaborn.factorplot(x='Group', y='val', hue='Mean',
col='Sex', data=data, kind='bar',
ci=68, row='Split',
order=['Group 1', 'Group 2'],
row_order=['Poor','Good'],
col_order=['Male', 'Female'],
sharex=False, sharey="row",
palette='deep', legend_out=False
)
(fg.set_axis_labels("", "val")
.set_titles("{row_name} - {col_name}")
.set(ylim=(0, 300))
.despine(left=True)
)
# Increase space between rows and remove space between cols
fg.fig.subplots_adjust(hspace=.4, wspace=0)
# Change some label sizes
fg.axes[0, 0].title.set(size=16)
fg.axes[1, 0].yaxis.label.set(size=16)
plt.setp(fg.axes[0, 1].get_xticklabels(), size=16)
# Remove the legend title
fg.axes[0, 0].legend()
# Save to a vector format
fg.savefig("figure.svg")
请注意,除了额外的行外,我还在对 factorplot
的调用中添加了 sharey="row"
,这会删除 y 轴刻度
我正在使用 seaborn 因子图绘制 pandas 数据。代码如下:
import seaborn
import numpy as np
import pandas as pd
seaborn.set_style("white")
fg = seaborn.factorplot(x='Group', y='val', hue='Mean',
col='Sex', data=data, kind='bar', ci=68, row='Split', x_order=['Group 1', 'Group 2'],
row_order=['Poor','Good'], col_order=['Male', 'Female'], sharex=False, sharey=False,
palette='deep', legend_out=False
)
(fg.set_axis_labels("", "val")
.set_titles("{row_name} - {col_name}")
.set(ylim=(0, 300))
.despine(left=True)
)
这是一个示例数据框:
groups = ('Group 1', 'Group 2')
sexes = ('Male', 'Female')
means = ('Low', 'High')
split = ('Poor', 'Good')
index = pd.MultiIndex.from_product(
[groups, sexes, means, split],
names=['Group', 'Sex', 'Mean', 'Split']
)
values = np.random.randint(low=20, high=100, size=len(index))
data = pd.DataFrame(data={'val': values}, index=index).reset_index()
我查看了 seaborn 有哪些美学选项,但有一些我找不到参考:
这将创建一个包含 4 个地块的 2x2 网格。如何调整每个图之间的间距?现在,一切都靠得太近了
如何单独设置单独标签的字体大小?我希望某些 axis/categorical 标签比其他标签大
如何彻底删除图例标题?
对于 2x2 的地块网格,是否可以将同一行中的 2 个地块放在同一个地块上?即连接 x 轴,删除右图上的 y 轴
是否可以将绘图保存为基于矢量的文件格式?
fg = seaborn.factorplot(x='Group', y='val', hue='Mean',
col='Sex', data=data, kind='bar',
ci=68, row='Split',
order=['Group 1', 'Group 2'],
row_order=['Poor','Good'],
col_order=['Male', 'Female'],
sharex=False, sharey="row",
palette='deep', legend_out=False
)
(fg.set_axis_labels("", "val")
.set_titles("{row_name} - {col_name}")
.set(ylim=(0, 300))
.despine(left=True)
)
# Increase space between rows and remove space between cols
fg.fig.subplots_adjust(hspace=.4, wspace=0)
# Change some label sizes
fg.axes[0, 0].title.set(size=16)
fg.axes[1, 0].yaxis.label.set(size=16)
plt.setp(fg.axes[0, 1].get_xticklabels(), size=16)
# Remove the legend title
fg.axes[0, 0].legend()
# Save to a vector format
fg.savefig("figure.svg")
请注意,除了额外的行外,我还在对 factorplot
的调用中添加了 sharey="row"
,这会删除 y 轴刻度