Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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:如何增加记号之间的间距(或减少记号的数量)?_Python_Matplotlib - Fatal编程技术网

Python Matplotlib:如何增加记号之间的间距(或减少记号的数量)?

Python Matplotlib:如何增加记号之间的间距(或减少记号的数量)?,python,matplotlib,Python,Matplotlib,如何增加勾号之间的间距,如下图所示 绘图1:设置 数据集 time value 2010-01 1 2010-02 2 2010-03 3 2010-04 4 2010-05 5 2010-06 6 2010-07 7 2010-08 8 2010-09 9 2010-10 8 2011-01 7 2011-02 6 2011-03 5 2011-04 4 2011-05 3 2011-06 2 2011-07 1 2011-08 2 2011-09 3 2011-10 4 2011-11

如何增加勾号之间的间距,如下图所示

绘图1:设置

数据集

time value
2010-01 1
2010-02 2
2010-03 3
2010-04 4
2010-05 5
2010-06 6 
2010-07 7
2010-08 8
2010-09 9
2010-10 8
2011-01 7
2011-02 6
2011-03 5
2011-04 4
2011-05 3
2011-06 2
2011-07 1
2011-08 2
2011-09 3
2011-10 4
2011-11 5
2011-21 6

我所尝试的:

在文章中,用户演示了如何增加勾号标签之间的间距,如下所示:

# Attempt 1
every_nth = 5
for n, label in enumerate(ax.xaxis.get_ticklabels()):
    if n % every_nth != 0:
        #print(n)
        label.set_visible(False)
情节2:一次尝试

time value
2010-01 1
2010-02 2
2010-03 3
2010-04 4
2010-05 5
2010-06 6 
2010-07 7
2010-08 8
2010-09 9
2010-10 8
2011-01 7
2011-02 6
2011-03 5
2011-04 4
2011-05 3
2011-06 2
2011-07 1
2011-08 2
2011-09 3
2011-10 4
2011-11 5
2011-21 6

但正如你所看到的,这些记号仍然没有被触及

因此,使用该设置,我天真地尝试将
ax.xaxis.get_-tickles()
部分替换为
ax.get_-xticks()
,但迄今为止没有成功:

# in:
for n, tick in enumerate(ax.get_xticks()):
    if n % every_nth != 0:
        tick.set_visible(False)

# out: AttributeError: 'int' object has no attribute 'set_visible'
而且
ax.tick_params?
中似乎也没有选项。你甚至可以在那里找到填充,但没有关于刻度间距的内容

任何其他的建议都会很好!通常,我会将索引更改为
PeriodIndex
,并使用
import matplotlib.dates as mdate
设置轴的格式,但我真的希望这项技术更直接

以下是便于复制和粘贴的全部内容:

#imports
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# df = pd.read_clipboard(sep='\\s+')

# plot setup
fig, ax = plt.subplots()
ax.plot(df['time'], df['value'])
plt.xticks(rotation=45)

# Attempt 1
every_nth = 5
for n, label in enumerate(ax.xaxis.get_ticklabels()):
    if n % every_nth != 0:
        #print(n)
        label.set_visible(False)

#every_nth = 5
#for n, tick in enumerate(ax.xaxis.get_ticks()):
#    if n % every_nth != 0:
#        #print(n)
#        tick.set_visible(False)

plt.show()

滴答声间距由后续滴答声位置的差异庄严决定。Matplotlib通常会自动为您找到好的记号位置

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.DataFrame({"time" : np.arange("2010-01-01", "2012-01-01", dtype="datetime64[M]"),
                   "value" : np.random.randint(0,10,size=24)})
fig, ax = plt.subplots()
ax.plot(df['time'], df['value'])
plt.setp(ax.get_xticklabels(), rotation=45, ha="right")

plt.show()

如果您不喜欢这些,您可以通过自动售票机提供定制的

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import numpy as np

df = pd.DataFrame({"time" : np.arange("2010-01-01", "2012-01-01", dtype="datetime64[M]"),
                   "value" : np.random.randint(0,10,size=24)})
fig, ax = plt.subplots()
ax.plot(df['time'], df['value'])
ax.xaxis.set_major_locator(mdates.MonthLocator((1,7)))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%b"))
plt.setp(ax.get_xticklabels(), rotation=45, ha="right")

plt.show()

如果您真的希望您的日期是分类的,您可以使用
多播器
。例如,每5个类别打勾

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import pandas as pd
import numpy as np

df = pd.DataFrame({"time" : np.arange("2010-01-01", "2012-01-01", dtype="datetime64[M]"),
                   "value" : np.random.randint(0,10,size=24)})
df["time"] = df["time"].dt.strftime('%Y-%m')

fig, ax = plt.subplots()
ax.plot(df['time'], df['value'])
ax.xaxis.set_major_locator(mticker.MultipleLocator(5))
plt.setp(ax.get_xticklabels(), rotation=45, ha="right")

plt.show()

不要试图隐藏记号,您应该尝试每隔5个记号放入
plt.xticks(rotation=45)
命令,在该命令中,您可以指定记号的位置以及未找到/尝试的记号的标签
ax.setxticks