到此:
有功能吗? 我是否需要手动更改标签的位置,如果是这样的话?
我不想使用:
plt.margins(x=0.04)
因为它也改变了我的数据,而且我需要,只是2006年向右移动,而2018年左移了。
答案 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()
给出了:
答案 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()