Matplotlib xticks为天

时间:2017-04-20 17:07:46

标签: python matplotlib

所以我确实有一个简单的问题。我有一个模拟商店生活周/月的程序。现在它需要处理cashdesks(我不知道我是否从我的语言中正确地翻译了那个),因为它们有时会失败,而且有些专家必须到商店去修理它们。在模拟结束时,程序绘制一个如下图:

enter image description here

当cashdesk出现一些错误/损坏时会发生1.0状态,然后它等待技术人员修复它,然后它回到工作状态0

我或者说我的项目人更愿意在x轴上看到除了分钟以外的其他内容。我该怎么做?我的意思是,我希望它像Day 1,然后是间隔,Day 2等。

我知道pyplot.xticks()方法,但它将标签分配给第一个参数列表中的刻度,所以我必须制作2000个标签,分钟,我只想要7个,写上了几天。

2 个答案:

答案 0 :(得分:1)

你可以使用ax的matplotlib set_ticks和get_xticklabels()方法,灵感来自thisthis个问题。

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

minutes_in_day = 24 * 60

test = pd.Series(np.random.binomial(1, 0.002, 7 * minutes_in_day))

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

start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, minutes_in_day))

labels = ['Day\n %d'%(int(item.get_text())/minutes_in_day+ 1) for item in ax.get_xticklabels()]
ax.set_xticklabels(labels)

我得到的结果如下图所示。

enter image description here

答案 1 :(得分:1)

您与plt.xticks()走在正确的轨道上。试试这个:

import matplotlib.pyplot as plt

# Generate dummy data
x_minutes = range(1, 2001)
y = [i*2 for i in x_minutes]

# Convert minutes to days
x_days = [i/1440.0 for i in x_minutes]

# Plot the data over the newly created days list
plt.plot(x_days, y)

# Create labels using some string formatting
labels = ['Day %d' % (item) for item in range(int(min(x_days)), int(max(x_days)+1))]

# Set the tick strings
plt.xticks(range(len(labels)), labels)

# Show the plot
plt.show()