Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 Matplotlib Xtick重叠_Python_Numpy_Matplotlib_Plot - Fatal编程技术网

Python Matplotlib Xtick重叠

Python Matplotlib Xtick重叠,python,numpy,matplotlib,plot,Python,Numpy,Matplotlib,Plot,我需要在每个勾号之间添加间距,这样它就不会重叠。用于计算x记号的当前代码为 x = np.arange(-10, 361, 10, dtype = int) plt.xticks(x) 但它产生的情节是 我还尝试使用以下代码添加空间: x = np.arange(-10, 361, 10, dtype = int) plt.xticks(x,['%i '%w for w in x]) 但这只会在第一个标签(-10)周围增加间距,之后不会增加任何间距。 我不想减少字体大小,希望有另一种选

我需要在每个勾号之间添加间距,这样它就不会重叠。用于计算x记号的当前代码为

x = np.arange(-10, 361, 10, dtype = int)
plt.xticks(x)
但它产生的情节是

我还尝试使用以下代码添加空间:

x = np.arange(-10, 361, 10, dtype = int)
plt.xticks(x,['%i   '%w for w in x])
但这只会在第一个标签(-10)周围增加间距,之后不会增加任何间距。
我不想减少字体大小,希望有另一种选择来避免重叠

一个选项是只标记每N个记号。您可以使用主刻度和次刻度的组合来完成此操作:

import numpy as np
from matplotlib import pyplot as plt

x = np.arange(-10, 361, 10, dtype = int)
y = np.sin(np.deg2rad(2*x))

fig, ax = plt.subplots(1, 1)
ax.plot(x, y)

ax.set_xticks(x, minor=True)        # set minor ticks for each x value
ax.grid(which='both', axis='both')  # show grid lines

plt.show()


更新: @tcaswell在评论中正确地指出,使用其中一个标记将比直接设置标记的位置更干净。例如:

ax.xaxis.set_minor_locator(plt.MultipleLocator(10))


请注意,无论您如何平移或缩放绘图轴,这将自动在整个x轴上放置记号。

那么,您在寻找什么样的“其他替代方案”?在我看来,您有三个主要选项:1)增大图形的大小,2)减小记号标签的大小,3)减少记号的数量。就我个人而言,我会选择3号。我认为第四个选项是旋转标签,但当标签本身是长字符串时,这通常更有用。如果这些选择都不适合你,那么你可能是在要求不可能的事情。我明白了。嗯,把这个数字调大一点怎么样?我将把这些图存储为图像。有这么多刻度的原因是,只要看一看绘图,就可以获得相当准确的角度和功率,而不必看数据文件本身。如果这是您的目标,那么您真的需要标记所有刻度吗?在小刻度上加上记号和/或网格线怎么样?我明白了。。是的,听起来是个好主意。因为我只是一个初学者,我不知道该怎么做。让我看看怎么做,然后再联系你。谢谢你的建议。是否有必要创建一个子图和图形。我试图直接创建plt.xticks(x,minor=True),但它说minor不是有效的属性。我使用plt.minorticks_on()并将x的范围更改为x=np.arange(0361,50,dtype=int)。。。。非常感谢您的帮助。
plt.minorticks_on()
在这种情况下可以工作,但是如果您不喜欢默认设置,它不会提供任何方法来更改小刻度的位置。另一个选项是使用
plt.gca()
抓取当前轴对象,例如
plt.gca().set_xticks(…)
。就我个人而言,我建议使用面向对象的接口,而不是尝试使用'
plt.
'函数调用来完成所有事情-它提供了更多的控制,也使您的代码更具可读性。这很有意义。您能指出一些关于matplotlib的oops的阅读材料吗?我会避免使用
直接设置图标
。使用定位器类要好得多。