如何增加刻度线之间的间距,如下图所示?
图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
我尝试过的:
在How to: reduce number of ticks with matplotlib的帖子中,一个用户展示了如何像这样增加tick labels 之间的空间:
# 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)
剧情二:一次尝试
但你也看到了刻度线没动。
因此,使用该设置,我天真地尝试将ax.xaxis.get_ticklabels()
部分替换为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?
中似乎也没有选项。你甚至可以在那里找到 padding,但没有关于tick间距的内容。
任何其他建议将是伟大的!通常,我会将索引更改为PeriodIndex
,并使用import matplotlib.dates as mdates
化轴,但我真的希望使用更直接的技术。
下面是整个事情的简单复制和粘贴:
#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()
1条答案
按热度按时间plicqrtu1#
刻度间距由后续刻度位置的差异郑重确定。Matplotlib通常会自动为您找到不错的标记位置。
如果你不喜欢那些你可以提供自定义的,通过一个股票代码。
如果你真的希望你的日期是分类的,你可以使用
MultipleLocator
。例如,勾选每5个类别,