猿问

仅在频率变化时绘制日期

我一直在尝试根据频率绘制日期。这是我的数据集的样子:


2017-07-04,13

2018-04-11,13

2017-08-17,13

2017-08-30,13

2018-04-26,12

2018-01-03,12

2017-07-05,11

2017-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 markers

graph.plot(dates, freq, 'r-o')

graph.set_xticks(dates)


graph.set_xticklabels(

    [dates]

)


plt.show()

这是我得到的结果:

xlabels 非常混乱。我希望标签中的日期仅在值发生变化时显示。我不知道该怎么做。帮助表示赞赏。谢谢!


MMTTMM
浏览 196回答 1
1回答

素胚勾勒不出你

首先,我强烈建议您使用该pandas库及其DataFrame对象来处理您的数据。它有一些非常有用的功能,例如read_csv,可以为您节省一些工作。为了让 matplotlib 空间更合理,您需要将日期转换为datetime对象(而不是将日期存储为字符串)。在这里,我将使用 Pandas 读取您的数据,解析日期并按日期排序:import pandas as pdimport matplotlib.pyplot as pltimport numpy as np# Read datadf = pd.read_csv('/path/to/test.csv', names=['date', 'freq'], parse_dates=['date'])# Sort by datedf.sort_values(by='date', inplace=True)然后您可以继续绘制数据(您需要最新版本的熊猫来自动处理日期):fig, ax = plt.subplots(1, 1)# Plot date against frequencyax.plot(df['date'], df['freq'], 'r-o')# Rotate the tick labelsax.tick_params(axis='x', rotation=45)fig.tight_layout()如果你只是想显示的日期时的频率变化,下面将工作ax.set_xticks(df.loc[np.diff(df['freq']) != 0, 'date'])虽然我不会推荐它(不等间距看起来很乱)
随时随地看视频慕课网APP

相关分类

Python
我要回答