为了账号安全,请及时绑定邮箱和手机立即绑定

仅在频率变化时绘制日期

仅在频率变化时绘制日期

MMTTMM 2021-11-16 16:10:56
我一直在尝试根据频率绘制日期。这是我的数据集的样子:2017-07-04,132018-04-11,132017-08-17,132017-08-30,132018-04-26,122018-01-03,122017-07-05,112017-06-21,11这是我试过的代码:with open('test.csv', 'w') as f:    writer = csv.writer(f)    writer.writerows(temp)### Extract data from CSV ###with open('test.csv', 'r') as n:    reader = csv.reader(n)    dates = []    freq = []    for row in reader:        dates.append(row[0])        freq.append(row[1])fig = plt.figure()graph = fig.add_subplot(111)# Plot the data as a red line with round markersgraph.plot(dates, freq, 'r-o')graph.set_xticks(dates)graph.set_xticklabels(    [dates])plt.show()这是我得到的结果:xlabels 非常混乱。我希望标签中的日期仅在值发生变化时显示。我不知道该怎么做。帮助表示赞赏。谢谢!
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

首先,我强烈建议您使用该pandas库及其DataFrame对象来处理您的数据。它有一些非常有用的功能,例如read_csv,可以为您节省一些工作。


为了让 matplotlib 空间更合理,您需要将日期转换为datetime对象(而不是将日期存储为字符串)。


在这里,我将使用 Pandas 读取您的数据,解析日期并按日期排序:


import pandas as pd

import matplotlib.pyplot as plt

import numpy as np


# Read data

df = pd.read_csv('/path/to/test.csv', names=['date', 'freq'], parse_dates=['date'])

# Sort by date

df.sort_values(by='date', inplace=True)

然后您可以继续绘制数据(您需要最新版本的熊猫来自动处理日期):


fig, ax = plt.subplots(1, 1)


# Plot date against frequency

ax.plot(df['date'], df['freq'], 'r-o')


# Rotate the tick labels

ax.tick_params(axis='x', rotation=45)


fig.tight_layout()

如果你只是想显示的日期时的频率变化,下面将工作


ax.set_xticks(df.loc[np.diff(df['freq']) != 0, 'date'])

虽然我不会推荐它(不等间距看起来很乱)


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信