仅显示 x 轴图表的第一个和最后一个刻度标签

4

我正在解析一个日志文件并创建一个图表。

我不需要 X 轴上的所有标签。我只想显示第一个和最后一个或一些特定步长的标签,比如每 100 个。

我该怎么做?我可以只显示第一个或只显示最后一个,但不能同时显示两者。

我的代码:

import numpy as np
import pylab as pl
import matplotlib.pyplot as plt

with open('file.log') as f:
    lines = f.readlines()
    x = [int(line.split(',')[0]) for line in lines]
    my_xticks = [line.split(',')[1] for line in lines]
    y = [int(line.split(',')[2]) for line in lines]
    z = [int(line.split(',')[3]) for line in lines]

plt.xticks(x, my_xticks[0], visible=True, rotation="horizontal")
plt.xticks(x, my_xticks[-1], visible=True, rotation="horizontal")

plt.plot (x,z)
plt.plot (x,z)
plt.plot(x, y)


plt.show()

谢谢!

plt.xticks([x.min(), x.max()]) 这样做符合你的需求吗? - Jarad
它给我一个错误AttributeError: 'list'对象没有'min'属性 - tyon
1个回答

6

通过 x-ticks,您可以提供一个列表。因此,您可以执行以下操作:

plt.xticks([my_xticks[0], my_xticks[-1]], visible=True, rotation="horizontal")

顺便提一下,您可以使用以下方法获取原始刻度:

my_xticks = ax.get_xticks()

其中ax是您的Axes实例。您甚至可以提供自己的值:

plt.xticks(
          [my_xticks[0], my_xticks[-1]], 
          ['{:.2}'.format(my_xticks[0]), '{:.2}'.format(my_xticks[-1])]
           visible=True, rotation="horizontal")

等等。您可以看到这个例子很容易推广到其他情况...

请记住,刻度标签指的是图形中特定的Axes。因此,最好这样做:

`ax.set_xticks(..)`

我的xticks实际上是字符串,它们看起来像:9/5/2017 8:47:15 AM 因此,如果我尝试lt.xticks([my_xticks[0], my_xticks[-1]], visible=True, rotation="horizontal"),我会得到错误self._points[:, 0] = interval ValueError: invalid literal for float(): 9/5/2017 8:47:15 AM - tyon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接