Python绘图x轴显示只选择项目

时间:2016-02-29 22:12:03

标签: python matplotlib

我有一个python matplotlib图,显示如下。

X轴上有超过100个项目,我想要全部绘制它们,但是只需要大约25个左右(可能是自动的),这样就可以清楚地看到它。

你能帮忙吗?

由于

我的代码如下:

l1 = plt.plot(b)
plt.setp(l1, linewidth=4, color='r')
l2 = plt.plot(c)
plt.setp(l2, linewidth=4, color='k')
l3 = plt.plot(d)
plt.setp(l3, linewidth=4, color='g')
plt.xticks(range(len(a)), a)
plt.xticks(rotation=30)
plt.show()
plt.savefig('a.png')

注意:我还有

形式的数据列a(X轴变量)
u' 2016-02-29T00:01:30.000Z CHEPSTLC0007143 CDC-R114-DK'

会抛出此错误invalid literal for float()。这就是我使用plt.xticks(range(len(a)), a)的原因。

3 个答案:

答案 0 :(得分:2)

这是一个mpl正在按照你所说的去做的情况,但是你告诉它要做的事情有点不方便。

plt.xticks(range(len(a)), a)

告诉mpl在每个整数上打勾,并使用a中的字符串来标记刻度(它正确地做了)。我认为你想做的事情就像

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

# synthetic data
a = list(range(45))
d = ['the label {}'.format(i) for i in range(45)]

# make figure + axes
fig, ax = plt.subplots(tight_layout=True)
ax.set_xlabel('x label')
ax.set_ylabel('y label')

# draw one line
ln1, = ax.plot(range(45), lw=4, color='r')


# helper function for the formatter
def listifed_formatter(x, pos=None):
    try:
        return d[int(x)]
    except IndexError:
        return ''

# make and use the formatter
mt = mticker.FuncFormatter(listifed_formatter)
ax.xaxis.set_major_formatter(mt)

# set the default ticker to only put ticks on the integers
loc = ax.xaxis.get_major_locator()
loc.set_params(integer=True)

# rotate the labels
[lab.set_rotation(30) for lab in ax.get_xticklabels()]

example output

如果您平移/缩放,则标记标记将是正确的,并且mpl将选择合理数量的标记以显示。

[旁注,此输出来自2.x分支并显示一些新的默认样式]

答案 1 :(得分:0)

只需将 plt.xticks(range(len(a)), a) 替换为 plt.xticks(np.arange(0, len(a) + 1, 5)),您就会减少显示的 x 轴标签的数量。

答案 2 :(得分:0)

如果您只想显示 3 个刻度,请使用以下代码:

axes = plt.axes()
x_values = axes.get_xticks()
y_values = axes.get_yticks()

x_len = len(x_values)
y_len = len(y_values)
print(x_len)
print(y_len)

new_x = [x_values[i] for i in [0, x_len // 2, -1]]
new_y = [y_values[i] for i in [0, y_len // 2, -1]]

axes.set_xticks(new_x)
axes.set_yticks(new_y)

同样,如果您只想显示 25 个刻度,只需从 get_xticks() 中选取等距的 25 个值