Python - MatPlotLib - 如何在x轴上设置两个刻度,一个在最左边,一个在最右边?

问题描述 投票:2回答:2

所以我试图在我的python web-app中显示一些分析。我想显示x轴上第一个和最后一个条目的日期时间。

我试图将刻度设置为两个条目列表,但它给出了一个糟糕的结果。

plt.scatter(x_data, y_data)
    plt.grid(True)
    plt.xticks(x_data, [x_data[0], x_data[-1]])
    fig = plt.gcf()

x_data的位置是:

['10:59:44 27-03-2019', '11:00:07 27-03-2019', '11:00:09 27-03-2019', '11:00:12 27-03-2019', '11:30:23 27-03-2019', '11:30:29 27-03-2019', '11:30:30 27-03-2019', '11:30:31 27-03-2019', '11:30:32 27-03-2019', '11:32:44 27-03-2019', '11:33:21 27-03-2019', '11:35:50 27-03-2019', '12:16:12 27-03-2019', '12:16:39 27-03-2019', '12:17:36 27-03-2019', '12:19:40 27-03-2019', '12:23:50 27-03-2019']

我期望输出在最左边放置一个,在最右边放置另一个。相反,前两个刻度只显示时间重叠。

我不确定这样做的正确方法是什么。

python matplotlib
2个回答
2
投票

这是一个使用一些随机数据的解决方案,因为你没有指定y_data是什么。我们的想法是遍历现有的默认刻度标签,然后用空字符串替换所有刻度标签,除了第一个和最后一个。

fig, ax = plt.subplots()

plt.scatter(x_data, range(len(x_data)))
plt.grid(True)

fig.canvas.draw()
xticks = ax.get_xticklabels()
labels_new = [lab.get_text() if i in [0, len(xticks)-1] else "" 
          for i, lab in enumerate(xticks) ]

ax.set_xticklabels(labels_new)

plt.show()

enter image description here


1
投票

我怀疑你的问题是你正在定义一个刻度矢量然后分配两个标签(位置0和1)。

import numpy as np
import matplotlib.pyplot as plt

x_data=np.array([1,2,3,4,5,6,7,8])
y_data=np.random.normal(0, 1, (8, 1))

# create an array for your labels 
new_labels=[''] * (len(x_data)-2)
new_labels.insert(0,x_data[0])
new_labels.append(x_data[-1])

plt.scatter(x_data, y_data)
plt.grid(True)
plt.xticks(x_data, new_labels) #use the new tick labels
fig = plt.gcf()
© www.soinside.com 2019 - 2024. All rights reserved.