如何向seaborn FacetGrid的每个子图添加单独的vlines [英] How to add individual vlines to every subplot of seaborn FacetGrid

查看:74
本文介绍了如何向seaborn FacetGrid的每个子图添加单独的vlines的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在每个子图中添加一条垂直线来标记每个产品的单独发布日期.每条垂直线都应显示日期.但我太初学者了,无法弄清楚这一点.我以 .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=':')

我发现了以下方法,但我无法真正理解它,或将其应用于我自己的目的:

I want to add a vertical line to every subplot to mark the individual launch date of each product. Every vertical line should display the date. But i am too beginner to figure this out. I tried .axvline as an example:

Here is the code:

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=':')

I found the following apporaches, but i can't really make sense of it, or apply it to my own purposes:

Marking specific dates when visualizing a time series

Add vertical lines to Seaborn Facet Grid plots based on the occurrence of an event

I've created two lists with product names and corresponding launch dates:

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]

So, how can I iterate through all facets to add the mentioned vertical line?

解决方案

You could access the axes objects of the FacetGrid with g.axes.flat and add a line to each of them either at a given x-position or collected from a list for each individual facet:

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()

Sample output:

这篇关于如何向seaborn FacetGrid的每个子图添加单独的vlines的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆