我正试图用Python中的Seaborn模块定制一些图形,但是我没有成功地创建自定义标签或注释。我有一些生成下图的代码:
plot = sns.FacetGrid(data = data, col = 'bot', margin_titles = True).set_titles('Human', 'Bot')
bins = np.linspace(0, 2000, 15)
plot = plot.map(plt.hist, 'friends_count', color = 'black', lw = 0, bins = bins)
plot.set_axis_labels('Number Following', 'Count')
sns.despine(left = True, bottom = True)
我想做两件事:1。用有意义的文本和2替换默认因子标签,例如“bot=0.0”。在每个类别后面的平均数处绘制垂直线。
下面是一个独立的示例:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
fake = pd.DataFrame({'val': [1, 2, 2, 3, 3, 2, 1, 1, 2, 3], 'group': [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]})
plot = sns.FacetGrid(data = fake, col = 'group', margin_titles = True).set_titles('zero', 'one')
plot = plot.map(plt.hist, 'val', color = 'black', lw = 0)
sns.despine(left = True, bottom = True)
有人知道如何定制FacetGrids吗?
关于
set_titles
的一些事情。首先,默认标题是在
FacetGrid.map
方法中绘制的,因此如果要更改标题,必须在绘制之后调用set_titles
,否则它们将被覆盖。第二,如果您查看方法的docstring,它不只是获取标题的任意列表。它提供了一种使用列变量名称和值更改标题呈现方式的方法:
所以拥有“有意义的文本”最简单的方法就是在数据框中使用有意义的数据。以随机数据为例:
如果您希望“group”是
zero
和one
,您应该更改该列,或者创建一个新列:如果您不想在标题中包含变量名,那么使用
FacetGrid.set_titles
的正确方法是如果不想更改正在打印的数据,则必须直接在matplotlib轴上设置属性,如下所示:
请注意,这比上面的方法更不可取,因为您必须非常小心地确保列表的顺序是正确的,并且列表不会改变,而从数据帧本身获取信息将更加可靠。
要绘制平均值,需要创建一个可以传递给
FacetGrid.map
的小函数。在教程中有multiple examples关于如何做到这一点。在这种情况下,很容易:然后你只需要重新绘制:
相关问题 更多 >
编程相关推荐