【问题标题】:Problem when using datetime data to draw graphic使用日期时间数据绘制图形时出现问题
【发布时间】:2018-09-17 09:11:46
【问题描述】:

我想用日期时间格式的数据作为 xaxis 来绘制图形,但是这个过程持续了非常非常长的时间,超过 30 分钟仍然没有图形。但是一旦我在另一列中应用数据,图形很快就会出现。所有数据的格式都是“列表”。 我对此感到困惑,因为它们都采用相同的格式,为什么我不能使用日期时间格式作为 xaxis 绘制图形? 这是我的代码,我珍惜你所有的时间和帮助!

from matplotlib import pyplot as plt
import csv

names = []
x = []
y = []
names=[]
with open('all.csv','r') as csvfile: #this csv file contains over 16000 datas
    plots= csv.reader(csvfile,delimiter=',')
    for row in plots:
        x.append(row[1]) #row1 is the datetime format data
        y.append(row[2])
    print(x,y)
plt.plot(x,y)
plt.show()

我的 csv 文件的行看起来像:

2016/05/02 10:47:45,14.1,20.1,N.C.,170.7,518.3,-1259,-12.61,375.8,44.92,13.76,92.74,132.6,38.86,165.3,170.9,311.5,252.3,501.2,447.2,378.4,35.48,7.868,181.2,

我希望第一列作为 xaxis,以下列作为 yaxis...

无论我如何更改 y 轴限制,y 轴都不会改变。

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

df = pd.read_csv('all.csv')
x = df.iloc[:,1]
y = df.iloc[:,3]
x = pd.to_datetime(x)
plt.figure(num=3, figsize=(15, 5))
plt.plot(x,y)
my_y_ticks = np.arange(0, 40, 10)
plt.xticks(rotation = 90)
plt.show()

【问题讨论】:

  • 您需要edit您的问题并添加输入 csv 文件内容的示例。
  • 好的。我现在就去做

标签: python python-3.x csv matplotlib graphics


【解决方案1】:

我还没有完全理解你对all the datas' format are list 的意思,但我认为你可以使用这样的东西:

import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('all.csv')
x = df.iloc[:,0]
y = df.iloc[:,1]
x = pd.to_datetime(x)
plt.plot(x,y)
plt.show()

也许显示一些行会很有用

编辑:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
df = pd.read_csv('all.csv')
x = df.iloc[:,0] 
y = df.iloc[:,1]

x = pd.to_datetime(x, format="%Y/%m/%d %H/%M/%S") #if the format is different, change here
fig, ax = plt.subplots()
ax.plot(x, y)
xfmt = mdates.DateFormatter("%Y/%m/%d %H:%M:%S")
ax.xaxis.set_major_formatter(xfmt)
plt.xticks(rotation=70)
plt.show()

【讨论】:

  • 非常感谢,这行得通!!!但是 xaxis 只显示年和月,实际上我在 csv 文件中的日期时间格式是:'年/月/日小时/分钟/秒',但是图形显示!
  • 不客气!您希望如何显示 xaxis?
  • :))) 其实我想要一个更具体的 xaxis 时间尺度,例如:2016/05/02 10:47:45,但现在在图中是:2016-05。跨度>
  • @It'sNele 我已经更新了答案。如果解决方案有效,请考虑接受答案:)
  • 当然可以,但是在我想改变y轴刻度的时候还是有一些问题,你大概知道怎么改变y轴刻度吗?无论我如何设置 yaxis 的限制,图形都不会改变...我在问题中添加了新代码..
猜你喜欢
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2012-09-06
  • 2020-12-29
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多