我试图修复python如何绘制我的数据。 说:
x = [0,5,9,10,15]
y = [0,1,2,3,4]
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
x轴的刻度以5为间隔绘制。有没有办法让它显示1的间隔?
我试图修复python如何绘制我的数据。 说:
x = [0,5,9,10,15]
y = [0,1,2,3,4]
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
x轴的刻度以5为间隔绘制。有没有办法让它显示1的间隔?
当前回答
这是一个老话题了,但我偶尔会遇到这个问题,然后做了这个功能。非常方便:
import matplotlib.pyplot as pp
import numpy as np
def resadjust(ax, xres=None, yres=None):
"""
Send in an axis and I fix the resolution as desired.
"""
if xres:
start, stop = ax.get_xlim()
ticks = np.arange(start, stop + xres, xres)
ax.set_xticks(ticks)
if yres:
start, stop = ax.get_ylim()
ticks = np.arange(start, stop + yres, yres)
ax.set_yticks(ticks)
像这样控制刻度的一个警告是,一个人不再享受在添加一行后最大刻度的交互式自动更新。然后做
gca().set_ylim(top=new_top) # for example
并再次运行resadjust函数。
其他回答
纯Python实现
下面是所需功能的纯python实现,它可以处理任何具有正、负或混合值的数值序列(int或float),并允许用户指定所需的步长:
import math
def computeTicks (x, step = 5):
"""
Computes domain with given step encompassing series x
@ params
x - Required - A list-like object of integers or floats
step - Optional - Tick frequency
"""
xMax, xMin = math.ceil(max(x)), math.floor(min(x))
dMax, dMin = xMax + abs((xMax % step) - step) + (step if (xMax % step != 0) else 0), xMin - abs((xMin % step))
return range(dMin, dMax, step)
样例输出
# Negative to Positive
series = [-2, 18, 24, 29, 43]
print(list(computeTicks(series)))
[-5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
# Negative to 0
series = [-30, -14, -10, -9, -3, 0]
print(list(computeTicks(series)))
[-30, -25, -20, -15, -10, -5, 0]
# 0 to Positive
series = [19, 23, 24, 27]
print(list(computeTicks(series)))
[15, 20, 25, 30]
# Floats
series = [1.8, 12.0, 21.2]
print(list(computeTicks(series)))
[0, 5, 10, 15, 20, 25]
# Step – 100
series = [118.3, 293.2, 768.1]
print(list(computeTicks(series, step = 100)))
[100, 200, 300, 400, 500, 600, 700, 800]
示例使用
import matplotlib.pyplot as plt
x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(computeTicks(x))
plt.show()
注意,x轴的整数值之间均匀间隔为5,而y轴的间隔不同(matplotlib的默认行为,因为没有指定刻度)。
你可以使用plt.xticks显式地设置你想要标记的位置:
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
例如,
import numpy as np
import matplotlib.pyplot as plt
x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()
(np。使用arange而不是Python的range函数,以防min(x)和max(x)是浮点数而不是整数。)
plt。Plot(或ax.plot)函数将自动设置默认的x和y限制。如果希望保留这些限制,而只是改变标记的步长,那么可以使用ax.get_xlim()来发现Matplotlib已经设置了哪些限制。
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))
默认的刻度格式化器应该能很好地将刻度值舍入为合理的有效数字。但是,如果希望对格式有更多的控制,可以定义自己的格式化程序。例如,
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
下面是一个可运行的例子:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()
另一种方法是设置轴定位器:
import matplotlib.ticker as plticker
loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)
根据您的需要,有几种不同类型的定位器。
下面是一个完整的例子:
import matplotlib.pyplot as plt
import matplotlib.ticker as plticker
x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)
plt.show()
如果你只是想把间距设置为一个简单的一行和最小的样板:
plt.gca().xaxis.set_major_locator(plt.MultipleLocator(1))
对小蜱虫也很有效:
plt.gca().xaxis.set_minor_locator(plt.MultipleLocator(1))
有点满口,但很紧凑
一般化的一行程序,只导入Numpy:
ax.set_xticks(np.arange(min(x),max(x),1))
在问题的背景下设置:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = [0,5,9,10,15]
y = [0,1,2,3,4]
ax.plot(x,y)
ax.set_xticks(np.arange(min(x),max(x),1))
plt.show()
工作原理:
图中,ax = plt.subplots()给出了包含坐标轴的ax对象。 np.arange(min(x),max(x),1)给出了一个区间为1的数组,从x的最小值到x的最大值。这是我们想要的新x刻度。 ax.set_xticks()改变ax对象上的刻度。