我正在 seaborn.objects 中创建一个绘图。这个图有一个图例,我也想改变它的大小。
这可以使用
.theme()
方法来完成,该方法会影响 matplotlib rcParams
:
import matplotlib.pyplot as plt
import seaborn.objects as so
import pandas as pd
dat = pd.DataFrame({'group':['a','a','b','b'],
'x': [1, 2, 1, 2],
'y': [4, 3, 2, 1]})
# Choosing a very distorted figure size here so you can see when it works
(so.Plot(dat, x = 'x', y = 'y', color = 'group')
.add(so.Line())
.theme({'figure.figsize': (8,2)}))
但是,为了解决这篇文章中概述的问题,我需要创建一个matplotlib图形对象,然后绘制
.on()
该对象。当我这样做时,'figure.figsize'
中的.theme()
设置将被忽略(其他一些.theme()
设置仍然有效,但不是这个或我尝试过的其他几个设置)。另外,如果仔细观察,您可以看到图例的右边缘被推离图像的边缘。
(另请注意,无论有或没有
'legend.loc'
,rcParam
.on(fig)
都会被忽略:我认为seaborn.objects有自己的图例放置系统。)
fig = plt.figure()
# Choosing a very distorted figure size here so you can see when it works
(so.Plot(dat, x = 'x', y = 'y', color = 'group')
.on(fig)
.add(so.Line())
.theme({'figure.figsize': (8,2)}))
但是,我现在可以在
figsize
函数中设置 plt.figure()
。但当我这样做时,图例的定位就变得更加混乱,并且基本上被切断了。
fig = plt.figure(figsize = (8,2))
# Choosing a very distorted figure size here so you can see when it works
(so.Plot(dat, x = 'x', y = 'y', color = 'group')
.on(fig)
.add(so.Line()))
如何将
.on(fig)
包含在图例中而不将图例推开?正如这个other question中所指出的,为常规matplotlib/seaborn中的图例移动而设计的标准工具对于seaborn.objects的工作方式不同。虽然需要明确的是,我的问题并不是真正关于如何移动图例(虽然这将是解决此问题的一种方法) - seaborn.objects 已经知道如何正确放置调整大小的图形的图例(如果通过) .theme()
,理想情况下我也希望能够解决plt.figure()
。
(编辑:发布后,我立即尝试使用
figsize
但从 matplotlib内部更改
rcParams
,但这并不重要:import matplotlib as mpl; mpl.rcParams['figure.figsize'] = (8,2)
产生与 fig = plt.figure(figsize = (8,2))
尝试相同的结果)