繁体   English   中英

在Seaborn Bar Plot中对X轴进行排序和格式化日期

[英]Ordering and Formatting Dates on X-Axis in Seaborn Bar Plot

这看起来很简单,但对于我的生活,我无法弄明白。

我是Python和Seaborn的新手,我在PythonAnywhere在线完成所有这些工作。

我所要做的就是在seaborn中创建一个简单的条形图,在x轴上正确排序日期(即从左到右上升)。

当我尝试这个:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
import pandas as pd
import seaborn as sns

emp = pd.DataFrame([[32, "5/31/2018"], [3, "2/28/2018"], [40, "11/30/2017"], [50, "8/31/2017"], [51, "5/31/2017"]], 
               columns=["jobs", "12monthsEnding"])

fig = plt.figure(figsize = (10,7))

sns.barplot(x = "12monthsEnding", y = "uniqueClientExits", data = emp, 
estimator = sum, ci = None)

fig.autofmt_xdate()
plt.show()

我明白了:

看起来不错的条形图,但日期从左到右依次递减

然后当我尝试将对象转换为datetime时:

(注意:我正在使用下面的pd.to_datetime()来尝试重新创建当我在pd.read_csv()中使用parse_dates时会发生什么,这就是我实际创建数据帧的方式。)

emp = pd.DataFrame([[32, pd.to_datetime("5/31/2018")], [3, pd.to_datetime("2/28/2018")], [40, pd.to_datetime("11/30/2017")], [50, pd.to_datetime("8/31/2017")], [51, pd.to_datetime("5/31/2017")]], 
               columns=["jobs", "12monthsEnding"])

fig = plt.figure(figsize = (10,7))

sns.barplot(x = "12monthsEnding", y = "uniqueClientExits", data = emp, 
estimator = sum, ci = None)

fig.autofmt_xdate()

plt.show()

我明白了:

条形图,日期顺序正确,但格式错误

我得到了相同的条形图,日期排序正确,但是以完整,长日期时间格式,时间等等。但我想要的只是日/月/年。

我已经扫描了stackoverflow两天了,没有任何工作。 我开始想知道部分原因是因为我正在使用PythonAnywhere。 但我也找不到任何理由。

这让我疯了。 期待任何帮助。 谢谢。

使用第二种方法,只需将日期时间值排序并重新格式化为YYYY-MM-DD ,并将值传递给set_xticklabels 下面用随机的种子数据进行演示:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

# RANDOM DATA
np.random.seed(62918)
emp = pd.DataFrame({'uniqueClientExits': [np.random.randint(15) for _ in range(50)],
                    '12monthsEnding': pd.to_datetime(
                                          np.random.choice(
                                              pd.date_range('2018-01-01', periods=50), 
                                          50)
                                      )
                   }, columns = ['uniqueClientExits','12monthsEnding'])

# PLOTTING
fig, ax = plt.subplots(figsize = (12,6))    
fig = sns.barplot(x = "12monthsEnding", y = "uniqueClientExits", data = emp, 
                  estimator = sum, ci = None, ax=ax)

x_dates = emp['12monthsEnding'].dt.strftime('%Y-%m-%d').sort_values().unique()
ax.set_xticklabels(labels=x_dates, rotation=45, ha='right')

绘图输出

要检查图形输出,请运行groupby().sum()

print(emp.groupby('12monthsEnding').sum().head())

#                 uniqueClientExits
# 12monthsEnding                   
# 2018-01-01                     12
# 2018-01-02                      4
# 2018-01-04                     11
# 2018-01-06                     13
# 2018-01-08                     10
# 2018-01-11                     11
# 2018-01-14                      9
# 2018-01-15                      0
# 2018-01-16                      4
# 2018-01-17                      5
# ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM