如何将单独的 vlines 添加到 seaborn FacetGrid 的每个子图中
How to add individual vlines to every subplot of seaborn FacetGrid
我想在每个子图中添加一条垂直线来标记每个产品的单独发布日期。每条垂直线都应显示日期。但是我太初学者了,无法弄清楚这一点。我以 .axvline
为例:
代码如下:
g = sns.FacetGrid(df2, col='Product', hue='Vendor', col_wrap=4, height=3.5)
g = g.map(plt.plot, 'Date', 'Volumes')
g = g.map(plt.fill_between, 'Date', 'Volumes', alpha=0.2).set_titles("{col_name} Product")
g = g.set_titles("{col_name}")
g = g.set(xticks=[0, 12, 23])
g = g.set(xlabel='')
plt.axvline(x='Apr 19', color='r', linestyle=':')
我发现了以下方法,但我无法真正理解它,也无法将其应用于我自己的目的:
我创建了两个包含产品名称和相应发布日期的列表:
product_names = ['Product A', 'Product B','Product C', 'Product D','Product E', 'Product F',
'Product G', 'Product H','Product I', 'Product J',]
launch_dates = ['2019-02-01', '2019-09-01', '2019-12-01', '2019-12-01',
'2020-02-01', '2020-05-01', '2020-07-01', '2020-07-01',
'2020-08-01', '2020-07-15']
launch_dates = [datetime.strptime(d, "%Y-%m-%d") for d in launch_dates]
那么,我如何遍历所有方面以添加提到的垂直线?
您可以使用 g.axes.flat
访问 FacetGrid
的 axes
对象,并在给定的 x 位置或从列表中为每个对象添加一行个人方面:
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="sex")
g.map_dataframe(sns.histplot, x="total_bill", binwidth=2)
g.set_axis_labels("Total bill", "Count")
line_position = [14, 23, 11, 39]
for ax, pos in zip(g.axes.flat, line_position):
ax.axvline(x=pos, color='r', linestyle=':')
plt.tight_layout()
plt.show()
示例输出:
我想在每个子图中添加一条垂直线来标记每个产品的单独发布日期。每条垂直线都应显示日期。但是我太初学者了,无法弄清楚这一点。我以 .axvline
为例:
代码如下:
g = sns.FacetGrid(df2, col='Product', hue='Vendor', col_wrap=4, height=3.5)
g = g.map(plt.plot, 'Date', 'Volumes')
g = g.map(plt.fill_between, 'Date', 'Volumes', alpha=0.2).set_titles("{col_name} Product")
g = g.set_titles("{col_name}")
g = g.set(xticks=[0, 12, 23])
g = g.set(xlabel='')
plt.axvline(x='Apr 19', color='r', linestyle=':')
我发现了以下方法,但我无法真正理解它,也无法将其应用于我自己的目的:
我创建了两个包含产品名称和相应发布日期的列表:
product_names = ['Product A', 'Product B','Product C', 'Product D','Product E', 'Product F',
'Product G', 'Product H','Product I', 'Product J',]
launch_dates = ['2019-02-01', '2019-09-01', '2019-12-01', '2019-12-01',
'2020-02-01', '2020-05-01', '2020-07-01', '2020-07-01',
'2020-08-01', '2020-07-15']
launch_dates = [datetime.strptime(d, "%Y-%m-%d") for d in launch_dates]
那么,我如何遍历所有方面以添加提到的垂直线?
您可以使用 g.axes.flat
访问 FacetGrid
的 axes
对象,并在给定的 x 位置或从列表中为每个对象添加一行个人方面:
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="sex")
g.map_dataframe(sns.histplot, x="total_bill", binwidth=2)
g.set_axis_labels("Total bill", "Count")
line_position = [14, 23, 11, 39]
for ax, pos in zip(g.axes.flat, line_position):
ax.axvline(x=pos, color='r', linestyle=':')
plt.tight_layout()
plt.show()
示例输出: