【问题标题】:Line Graph with equidistant x-axis values python具有等距x轴值python的线图
【发布时间】:2018-12-19 14:39:35
【问题描述】:

我有一组由时间和数值组成的数据。

使用此代码我得到:

time=['07:45','8:15','8:45','9:35','10:15','15:05','16:05']
value=[3,8,12,54,23,12,5]
plt.plot(time,value)
plt.show()

如您所见,10:15 和 15:15 之间有很大的差距。我想要一个 x 轴,它也反映一个记录和另一个记录之间的时间差。换句话说,我需要 10:15 和 15:15 之间的差距大于 07:45 和 8:15 之间的差距。有没有办法做到这一点?

谢谢!

【问题讨论】:

  • 是的,你问的是默认值。但当然你需要实际绘制时间值,而不是字符串。

标签: python pandas matplotlib axis linegraph


【解决方案1】:

显然其他回答者没有看到我的评论。我所说的“实际绘制时间值”的意思是将时间转换为datetime 对象。然后将它们绘制成默认的等距标签。如果需要,可以通过指定 H:M 格式来美化它们。

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime

time=['07:45','8:15','8:45','9:35','10:15','15:05','16:05']
truetime = [datetime.strptime(t, "%H:%M") for t in time]
value=[3,8,12,54,23,12,5]

plt.plot(truetime,value)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
plt.show()

【讨论】:

  • 是的,我是手动完成的,因为我不知道该包的存在。我建议提问者遵循您的解决方案@CXB
【解决方案2】:

第一步是将字符串转换为时间的数值:

time=['07:45','8:15','8:45','9:35','10:15','15:05','16:05']
d=[]
for i in time:
    c=i.split(':')
    d.append((float(c[0])-7)*60+float(c[1]))

print d

我们已将每次与 7 点钟相隔的分钟数关联起来。 然后我们可以制作情节:

value=[3,8,12,54,23,12,5] 
import matplotlib.pyplot as plt
plt.plot(d,value)

并更改刻度:

value=[3,8,12,54,23,12,5] 
import matplotlib.pyplot as plt
plt.plot(d,value)
plt.xticks(d,time)
plt.show()

如果你想有不同的x-ticks,你只需手动将它们写在一个列表中,例如:

time2=['8:00','10:00','12:00','14:00','16:00']

然后你像我们之前所做的那样转换列表:

d2=[]
for i in time2:
    c=i.split(':')
    d2.append((float(c[0])-7)*60+float(c[1]))

print d2

然后您相应地更改刻度:

plt.xticks(d2,time2)

【讨论】:

  • 但这只会改变标签。我需要做的是更改 x 轴(一个值与另一个值之间的间距)。我编辑了原始问题,希望现在更清楚。
  • @CXB 我用我认为您正在寻找的内容编辑了我的答案。
猜你喜欢
  • 2017-03-26
  • 2021-09-07
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多