通常我会通过编辑matplotlib.rcParams来增加matplotlib的全局线宽。这似乎直接适用于SciPy's dendrogram实现,但不适用于Seaborn's clustermap(使用SciPy的树形图)。任何人都可以建议一种工作方法吗?
import matplotlib
matplotlib.rcParams['lines.linewidth'] = 10
import seaborn as sns; sns.set()
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
g = sns.clustermap(flights)
答案 0 :(得分:2)
可能有一种更简单的方法,但这似乎有效:
import matplotlib
import seaborn as sns; sns.set()
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
g = sns.clustermap(flights)
for l in g.ax_row_dendrogram.lines:
l.set_linewidth(10)
for l in g.ax_col_dendrogram.lines:
l.set_linewidth(10)
编辑这不再适用于Seaborn v.7.1.1(也可能是某些早期版本); g.ax_col_dendrogram.lines
现在返回一个空列表。我无法找到增加线宽的方法,最后我暂时修改了Seaborn模块。在文件matrix.py
中,函数class _DendrogramPlotter
,线宽被硬编码为0.5;我把它修改为1.5:
line_kwargs = dict(linewidths=1.5, colors='k')
这很有效,但显然不是一种非常可持续的方法。
答案 1 :(得分:2)
现在,以下合并的拉取请求https://github.com/mwaskom/seaborn/pull/1935以更可靠的方式解决了这一问题。我假设它将在v0.9.0之后的版本中包含。
您可以使用LineCollection
参数来控制树状图的tree_kws
属性。
例如:
>>> import seaborn as sns
>>> iris = sns.load_dataset("iris")
>>> species = iris.pop("species")
>>> g = sns.clustermap(iris, tree_kws=dict(linewidths=1.5, colors=(0.2, 0.2, 0.4))
将使用另一种深紫色为树创建1.5磅粗线的簇图。
答案 2 :(得分:0)
对于较新版本的seaborn(经0.7.1、0.9.0测试),这些行位于LineCollection中,而不是单独存在。因此,它们的宽度可以如下更改:
import seaborn as sns
import matplotlib.pyplot as plt
# load data and make clustermap
df = sns.load_dataset('iris')
g = sns.clustermap(df[['sepal_length', 'sepal_width']])
for a in g.ax_row_dendrogram.collections:
a.set_linewidth(10)
for a in g.ax_col_dendrogram.collections:
a.set_linewidth(10)