Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以独立于数据集长度和缩放更改pyplot上的刻度频率?_Python_Matplotlib - Fatal编程技术网

Python 是否可以独立于数据集长度和缩放更改pyplot上的刻度频率?

Python 是否可以独立于数据集长度和缩放更改pyplot上的刻度频率?,python,matplotlib,Python,Matplotlib,使用matplotlib打印数据时,x轴上始终有5-9个记号,与我打印的范围无关,如果在x轴上缩放,记号间距将减小,因此我仍然可以看到5-9个记号 但是,我希望我的x轴上有20-30个刻度 我可以通过以下方式实现这一目标: 从matplotlib导入pyplot作为plt 将numpy作为np导入 x=[5,10,15,20,25,30,35,40,45,50] y=[1,4,3,2,7,6,9,8,10,5] x轴上的刻度数=20 平面图(x,y) plt.xticks(np.arange(最

使用matplotlib打印数据时,x轴上始终有5-9个记号,与我打印的范围无关,如果在x轴上缩放,记号间距将减小,因此我仍然可以看到5-9个记号

但是,我希望我的x轴上有20-30个刻度

我可以通过以下方式实现这一目标:

从matplotlib导入pyplot作为plt
将numpy作为np导入
x=[5,10,15,20,25,30,35,40,45,50]
y=[1,4,3,2,7,6,9,8,10,5]
x轴上的刻度数=20
平面图(x,y)
plt.xticks(np.arange(最小(x),最大(x)+1,(最大(x)-最小(x))/x轴上的刻度数)
plt.show()

如果现在在x轴上缩放,则现有刻度之间不会出现新的刻度。无论缩放多少,我都希望仍有20个刻度。

您可以将回调函数链接到画布中的事件。在您的情况下,可以触发一个函数,在重画发生时更新轴

从matplotlib导入pyplot作为plt
将numpy作为np导入
x=[5,10,15,20,25,30,35,40,45,50]
y=[1,4,3,2,7,6,9,8,10,5]
n=20
平面图(x,y)
plt.xticks(np.arange(最小(x),最大(x)+1,(最大(x)-最小(x))/n,旋转=90)
缩放时的def(事件):
ax=plt.gca()
图=plt.gcf()
x_min,x_max=ax.get_xlim()
ax.set_xticks(np.linspace(x_min,x_max,n))
#必须添加flush_事件,以便在上次更新时重新绘制刻度。
图canvas.flush_事件()
图=plt.gcf()
图.mpl\U断开连接(cid)
cid=fig.canvas.mpl\u connect('draw\u event',on\u zoom)

假设您要固定X轴上的刻度数

请查看for
MaxNLocator


例子 [36]中的
:将numpy作为np导入
…:将matplotlib.pyplot作为plt导入
在[37]中:从matplotlib.ticker导入MaxNLocator
在[38]中:图,ax=plt.子图(figsize=(10,4))
在[39]:ax.grid()中
在[40]中:ax.xaxis.set\u major\u定位器(MaxNLocator(最小刻度=15))
在[41]中:x=np.linspace(0,1,51)
在[42]中:y=x*(1-x)
In[43]:plt.plot(x,y)
Out[43]:[]
给予

当我放大曲线的最大值时


这是一个非常优雅的解决方案。然而,我想我实际上是在寻找nbins ax.xaxis.set_major_locator(MaxNLocator(nbins=20))我没有花足够长的时间使用
MaxNLocator
来建议您在特定使用中的最佳参数选择,但我肯定认为
MaxNLocator
是您需要的。。。
...
from matplotlib.ticker import MaxNLocator
...
fig, ax = plt.subplots()
ax.xaxis.set_major_locator(MaxNLocator(15, min_n_ticks=15))
...
In [36]: import numpy as np 
    ...: import matplotlib.pyplot as plt                                                  
In [37]: from matplotlib.ticker import MaxNLocator                                        
In [38]: fig, ax = plt.subplots(figsize=(10,4))                                           
In [39]: ax.grid()                                                                        
In [40]: ax.xaxis.set_major_locator(MaxNLocator(min_n_ticks=15))                          
In [41]: x = np.linspace(0, 1, 51)                                                        
In [42]: y = x*(1-x)                                                                      
In [43]: plt.plot(x, y)                                                                   
Out[43]: [<matplotlib.lines.Line2D at 0x7f9eab409e10>]