【发布时间】:2020-11-22 21:11:37
【问题描述】:
对 python 和一般编程很陌生,所以请多多包涵。我有一个从 .csv 文件导入的数据集,我试图在 1 年内按日期(x 轴)绘制一列值(y 轴),但问题是日期太密集了,我我一生都无法弄清楚如何将它们隔开或修改它们的定义方式。这是我正在使用的代码:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy import stats
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
df = pd.read_csv('Vanuatu Earthquakes 2018-2019.csv')
这是线图代码:
plt.figure(figsize=(15, 7))
ax = sns.lineplot(x='date', y='mag', data=df).set_title("Earthquake magnitude May 2018-2019")
plt.xlabel('Date')
plt.ylabel('Magnitude (Mw)')
plt.savefig('EQ mag time')
目前这给了我这个线图:
目前我想通过每天的小勾号和每周开始的较大的勾号+标签来做到这一点。不必完全如此,但我主要是希望降低密度。我在这里查看了大量帖子,但似乎没有一个适合我的情况,因此我们将不胜感激。
[更新]
按照 Konqui 的建议确定日期,现在我的代码如下所示:
time = pd.date_range(start = '01-05-2018',
end = '01-05-2019',
freq = 'D')
df = pd.DataFrame({'date': list(map(lambda x: str(x), time)),
'mag': np.random.random(len(time))})
plt.figure(figsize=(15, 7))
df['date'] = pd.to_datetime(df['date'], format = '%Y-%m')
ax = sns.lineplot(x='date', y='mag', data=df).set_title("Earthquake magnitude May 2018-2019")
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday = 1))
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
plt.setp(ax.xaxis.get_majorticklabels(), rotation = 90)
ax.xaxis.set_minor_locator(md.DayLocator(interval = 1))
plt.xlabel('Date')
plt.ylabel('Magnitude (Mw)')
这给了我一条错误消息:AttributeError: 'Text' object has no attribute 'xaxis'。有什么想法吗?
【问题讨论】:
标签: python date datetime matplotlib seaborn