matplotlib.pyplot

时间:2017-05-03 12:28:53

标签: python matplotlib

我只是试图为pyplot数字的x轴刻度标签设置不同的旋转。

让我们来看看这个例子:

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,5)
y=np.arange(0,5)

plt.xlim(0,4)
plt.ylim(0,4)

plt.plot(x,y)

plt.plot((1,1),(0,4),color='red',lw=1)
plt.plot((2,2),(0,4),color='red',lw=1)
plt.plot((2.98,2.98),(0,4),color='red',lw=1)
plt.plot((3,3),(0,4),color='red',lw=1)

lab_ticks=['Label 1','Label 2','Label 3','Label 4']
x_ticks=[1,2,2.98,3]

plt.xticks(x_ticks,lab_ticks,rotation=90)

plt.savefig('im1.png')

plt.show()

此代码给出了下图:

Image 1

我的问题是没有显示整个标签,我知道如何修复它。我的问题是Label 3Label 4附近太多而且彼此重叠。

我想将rotation Label 3设置为45,将90设置为lab_ticks,但是当我尝试将x_ticks和{{{{}}分开时1}},只显示最后一个plt.xticks()

lab_ticks=['Label 1','Label 2','Label 4']
x_ticks=[1,2,3]

lab_ticks2=['Label 3']
x_ticks2=[2.98]

plt.xticks(x_ticks,lab_ticks,rotation=90)
plt.xticks(x_ticks2,lab_ticks2,rotation=45,ha='right')

enter image description here

有没有人有办法解决这个问题?

提前致谢!

Smich

1 个答案:

答案 0 :(得分:1)

您可以为每个ticklabel单独设置旋转。为此,您需要获取标记ax.get_xticklabels()并通过.set_rotation(angle)对每个标记应用轮播。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1,2,3,4],[1,2,1,2])

labels=["Label {}".format(i+1) for i in range(4)]

ax.set_xticks(range(1,5))
ax.set_xticklabels(labels)
for i, t in enumerate(ax.get_xticklabels()):
    t.set_rotation(i*45)

plt.show()

enter image description here