一般来说,python和编程都是新手,请耐心听我说。我有一个从.csv文件导入的数据集,我试图在一年内按日期(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'
。有什么想法吗
假设
我假设您从一个类似于保存在
Vanuatu Earthquakes 2018-2019.csv
文件中的数据帧开始:输出:
绘图:
答复
你应该做一系列的事情:
首先,由于
'date'
值是str
类型,因此需要将它们转换为datetime
这样,您的x轴是
datetime
类型,上面的图将变成:然后你必须调整滴答声;对于主刻度,应设置:
对于小刻度:
(可选)可以使用以下选项编辑记号的长度:
因此,最终的情节将是:
完整代码
注释
如果注意我的图中的y轴,您会看到
'mag'
值落在范围(0-1)
内。这是因为我用'mag': np.random.random(len(time))
生成了这个伪数据。如果从文件Vanuatu Earthquakes 2018-2019.csv
读取您的数据,您将在y轴上获得正确的值。尝试简单地复制完整代码部分中的代码相关问题 更多 >
编程相关推荐