Seaborn/Matplotlib:如何访问 FacetGrid 中的线值? [英] Seaborn/Matplotlib: how to access line values in FacetGrid?
问题描述
我正在尝试对 Seaborn FacetGrid 中的两条线之间的区域进行着色.fill_between
方法将执行此操作,但我需要访问每个子图中每行的值以将它们传入.
I'm trying to shade the area between two lines in a Seaborn FacetGrid. The fill_between
method will do this, but I need to access the values of each line in each subplot to pass them in.
这是我的代码:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
data = [{'Change': 0.0, 'Language': 'Algonquin', 'Type': 'Mother tongue', 'Year': '2011'}, {'Change': 0.0, 'Language': 'Algonquin', 'Type': 'Spoken at home', 'Year': '2011'}, {'Change': -21.32, 'Language': 'Algonquin', 'Type': 'Mother tongue', 'Year': '2016'}, {'Change': -34.84, 'Language': 'Algonquin', 'Type': 'Spoken at home', 'Year': '2016'}, {'Change': 0.0, 'Language': 'Atikamekw', 'Type': 'Mother tongue', 'Year': '2011'}, {'Change': 0.0, 'Language': 'Atikamekw', 'Type': 'Spoken at home', 'Year': '2011'}, {'Change': 5.41, 'Language': 'Atikamekw', 'Type': 'Mother tongue', 'Year': '2016'}, {'Change': 19.15, 'Language': 'Atikamekw', 'Type': 'Spoken at home', 'Year': '2016'}, {'Change': 0.0, 'Language': 'Blackfoot', 'Type': 'Mother tongue', 'Year': '2011'}, {'Change': 0.0, 'Language': 'Blackfoot', 'Type': 'Spoken at home', 'Year': '2011'}, {'Change': -1.4, 'Language': 'Blackfoot', 'Type': 'Mother tongue', 'Year': '2016'}, {'Change': 61.42, 'Language': 'Blackfoot', 'Type': 'Spoken at home', 'Year': '2016'}, {'Change': 0.0, 'Language': 'Carrier', 'Type': 'Mother tongue', 'Year': '2011'}, {'Change': 0.0, 'Language': 'Carrier', 'Type': 'Spoken at home', 'Year': '2011'}, {'Change': -20.38, 'Language': 'Carrier', 'Type': 'Mother tongue', 'Year': '2016'}, {'Change': -18.91, 'Language': 'Carrier', 'Type': 'Spoken at home', 'Year': '2016'}, {'Change': 0.0, 'Language': 'Chilcotin', 'Type': 'Mother tongue', 'Year': '2011'}, {'Change': 0.0, 'Language': 'Chilcotin', 'Type': 'Spoken at home', 'Year': '2011'}, {'Change': -13.82, 'Language': 'Chilcotin', 'Type': 'Mother tongue', 'Year': '2016'}, {'Change': 7.41, 'Language': 'Chilcotin', 'Type': 'Spoken at home', 'Year': '2016'}, {'Change': 0.0, 'Language': 'Cree languages', 'Type': 'Mother tongue', 'Year': '2011'}, {'Change': 0.0, 'Language': 'Cree languages', 'Type': 'Spoken at home', 'Year': '2011'}, {'Change': -11.52, 'Language': 'Cree languages', 'Type': 'Mother tongue', 'Year': '2016'}, {'Change': 6.57, 'Language': 'Cree languages', 'Type': 'Spoken at home', 'Year': '2016'}]
langs = pd.DataFrame(data)
g = sns.FacetGrid(langs, col='Language', hue='Type', col_wrap = 4, size=2)
g.map(plt.plot, 'Year', 'Change').set_titles('{col_name}')
g.set(xticks=[2011, 2016], yticks = [-40, 0, 70] )
结果是这样的图表:
现在如何访问每一行的值?我正在猜测 g.axes
的东西,但是文档中没有任何帮助.
Now how do I access the values of each line? I'm guessing something with g.axes
, but nothing in the docs is helping.
推荐答案
FacetGrid 的平面轴数组然后通过 ax.lines
获取轴对象的所有行.通过调用 get_xdata,get_ydata
遍历这些行,以请求行数据,而不是使用这些数据.示例代码:
Flat axes array of FacetGrid then get all lines of an axis object by ax.lines
. Iterate over these lines with calls of get_xdata, get_ydata
to request data of a line than do what you want with these data.
Sample code:
...
for ax in g.axes.flat:
print (ax.lines)
for line in ax.lines:
print (line.get_xdata())
print (line.get_ydata())
您的代码数据的输出:
[<matplotlib.lines.Line2D object at 0x10c5facc0>, <matplotlib.lines.Line2D object at 0x10c5fa940>]
['2011' '2016']
[ 0. -21.32]
['2011' '2016']
[ 0. -34.84]
[<matplotlib.lines.Line2D object at 0x10c39a160>, <matplotlib.lines.Line2D object at 0x10c5a4828>]
['2011' '2016']
[ 0. 5.41]
['2011' '2016']
[ 0. 19.15]
[<matplotlib.lines.Line2D object at 0x10c5ff6d8>, <matplotlib.lines.Line2D object at 0x10c67c630>]
['2011' '2016']
[ 0. -1.4]
['2011' '2016']
[ 0. 61.42]
[<matplotlib.lines.Line2D object at 0x10c637358>, <matplotlib.lines.Line2D object at 0x10c65ada0>]
['2011' '2016']
[ 0. -20.38]
['2011' '2016']
[ 0. -18.91]
[<matplotlib.lines.Line2D object at 0x10c613668>, <matplotlib.lines.Line2D object at 0x10c6134e0>]
['2011' '2016']
[ 0. -13.82]
['2011' '2016']
[ 0. 7.41]
[<matplotlib.lines.Line2D object at 0x10c5ffd30>, <matplotlib.lines.Line2D object at 0x10c4f5dd8>]
['2011' '2016']
[ 0. -11.52]
['2011' '2016']
[ 0. 6.57]
这篇关于Seaborn/Matplotlib:如何访问 FacetGrid 中的线值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!