特定的x标签彼此不同?

时间:2018-01-10 19:14:32

标签: python matplotlib

我正在研究这个情节: Current plot

从概念上讲,想要更改x标签的位置: enter image description here

到此:

enter image description here

有功能吗? 我是否需要手动更改标签的位置,如果是这样的话?

我不想使用:

plt.margins(x=0.04)

因为它也改变了我的数据,而且我需要,只是2006年向右移动,而2018年左移了。

2 个答案:

答案 0 :(得分:1)

您可以通过使用面向对象的API深入挖掘matplotlib ticks的工作原理来实现这一目标。

首先,您可以使用xaxis.get_major_ticks()获取主要价格表的列表。这将返回matplotlib.axis.XTick个对象的列表。它们具有属性label1,它是刻度线的标签。这是一个文本实例,其属性为set_horizontalalignment(align)。哪个州:

  

set_horizontalalignment(align)

     

将水平对齐设置为

之一      

ACCEPTS:['center'| '对'| 'left']

然后,由于您只想修改第一个和最后一个刻度,只需使用列表中的第一个和最后一个条目设置特定刻度的对齐方式。

一个工作示例:

import matplotlib.pyplot as plt

x = [1,2,3]
y = [4,5,6]

labels = ["2004", "2006", "2008"]

fig, ax = plt.subplots()
ax.margins(0)
ax.plot(x,y)
ax.set_xticks(x)
ax.set_xticklabels(labels)
# above code recreates the issue

# get list of x tick objects
xTick_objects = ax.xaxis.get_major_ticks()

xTick_objects[0].label1.set_horizontalalignment('left')   # left align first tick 
xTick_objects[-1].label1.set_horizontalalignment('right') # right align last tick

plt.show() 

给出了:

enter image description here

答案 1 :(得分:-1)

如果您只有这3个值,则可以使用set_xlim()

X = [2006, 2012, 2018]
Y = [0, 15, 30]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(X, Y, color='r')
ax.set_xlim(2005, 2019)
plt.xticks([2006, 2012, 2018])
plt.yticks([0, 30])
plt.show()