【问题标题】:Formatting Date labels using Seaborn FacetGrid使用 Seaborn FacetGrid 格式化日期标签
【发布时间】:2020-08-15 01:51:15
【问题描述】:

我想做一个分面网格,变量名作为列,部门作为行,每个小图表都是y=value和x=date的散点图

我的数据是这样的:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.dates as mdates
import random

datelist = pd.date_range(start="march 1 2020", end="may 20 2020", freq="w").tolist()
varlist = ["x", "y", "z", "x", "y", "z", "x", "y", "z", "x", "y", "z"]
deptlist = ["a", "a", "b", "a", "a", "b", "a", "a", "b", "a", "a", "b"]
vallist =  random.sample(range(10, 30), 12)
df = pd.DataFrame({'date': datelist, 'value': vallist, 'variable': varlist, 'department': deptlist})

我想做一个分面网格,变量名作为列,部门作为行,每个小图表都是y=value和x=date的散点图

这是我目前所拥有的。它几乎可以工作,除了我想看到底部没有挤在一起的日期,所以我想看到“3/1 4/1 5/1”而不是完整日期。但我不知道如何格式化它。

plt.style.use('seaborn-darkgrid')
xformatter = mdates.DateFormatter("%m-%d")
g = sns.FacetGrid(df2, row="department", col="variable", sharey='row')
g = g.map(plt.plot, "date", "value", marker='o', markersize=0.7)
datelist = pd.date_range(start="march 1 2020", end="june 1 2020", freq="MS").tolist()
g.set(xticks=datelist)

这非常接近,但请注意底部 x 轴上的日期。他们都挤在一起。这就是为什么我尝试使用特殊的日期格式化程序但无法使其工作的原因。我真正想要的是每个日期都显示为 mon-dd 并且我可以控制那里出现多少刻度线。

【问题讨论】:

    标签: pandas seaborn


    【解决方案1】:

    您可以以g.axes(二维数组)的形式访问 FacetGrid 的 Axes 对象。您可以遍历此数组并更改所有轴的属性,但在您的情况下,您有 sharex=True(默认值),这意味着更改其中一个子图的 xaxis 将同时更改所有子图.

    g = sns.FacetGrid(df, row="department", col="variable", sharey='row')
    g = g.map(plt.plot, "date", "value", marker='o', markersize=0.7)
    
    xformatter = mdates.DateFormatter("%m/%d")
    g.axes[0,0].xaxis.set_major_formatter(xformatter)
    

    【讨论】:

    • 谢谢!天才:)
    • 顺便说一句,我收到了我一直忽略的这条消息,但它是什么意思? “/usr/local/lib/python3.7/site-packages/pandas/plotting/_matplotlib/converter.py:103:FutureWarning:对matplotlib绘图方法使用隐式注册的日期时间转换器。转换器在导入时由pandas注册. 未来版本的 pandas 将要求您显式注册 matplotlib 转换器。要注册转换器: >>> from pandas.plotting import register_matplotlib_converters >>> register_matplotlib_converters() warnings.warn(msg, FutureWarning)"
    猜你喜欢
    • 2020-12-21
    • 2018-02-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多