如何删除 matplotlib 上的第一个和最后一个次要刻度月份标签?
How to remove the first and last minor tick month labels on matplotlib?
我想生成一个以一年中的 12 个月作为 x 轴标签的图表,即 'Jan' 到 'Dec',位于主要刻度之间的中间。我使用 https://matplotlib.org/3.4.3/gallery/ticks_and_spines/centered_ticklabels.html 中的代码来创建 x 轴。创建的 x 轴在左侧有一个额外的 'Dec',在右侧有一个 'Jan',即总共有 14 个标签而不是 12 个(见附图)。但是,图表上只需要 'Jan' 到 'Dec'。我想知道如何去掉左边的'Dec'标签和右边的'Jan'标签?我的 google 搜索仅在删除所有次要刻度标签的解决方案中成功。任何帮助将不胜感激。
我使用以下代码生成图表:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
df = pd.DataFrame(np.random.randint(0,100,size=(365, 2)), columns=list('AB'))
df.index = pd.date_range(start='1/1/2022', end='12/31/2022').strftime('%b-%d')
plt.figure()
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=16))
ax.xaxis.set_major_formatter(ticker.NullFormatter())
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b'))
for tick in ax.xaxis.get_minor_ticks():
tick.tick1line.set_markersize(0)
tick.tick2line.set_markersize(0)
tick.label1.set_horizontalalignment('center')
plt.plot(df['A'], linewidth=0.5, color='tab:red')
plt.show()
enter image description here
尝试将您的 x-axis 限制设置为 0 到 365 之间的值。有时 matplotlib 使用的值稍微超出您的数据范围。这样,第一个 Dec 和最后一个 Jan 会自动从图中删除。
这里我用 1 个参数修改了你的代码:plt.xlim(0,365)
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
df = pd.DataFrame(np.random.randint(0,100,size=(365, 2)), columns=list('AB'))
df.index = pd.date_range(start='1/1/2022', end='12/31/2022').strftime('%b-%d')
plt.figure()
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=16))
ax.xaxis.set_major_formatter(ticker.NullFormatter())
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b'))
for tick in ax.xaxis.get_minor_ticks():
tick.tick1line.set_markersize(0)
tick.tick2line.set_markersize(0)
tick.label1.set_horizontalalignment('center')
plt.xlim(0,365)
plt.plot(df['A'], linewidth=0.5, color='tab:red')
plt.show()
我想生成一个以一年中的 12 个月作为 x 轴标签的图表,即 'Jan' 到 'Dec',位于主要刻度之间的中间。我使用 https://matplotlib.org/3.4.3/gallery/ticks_and_spines/centered_ticklabels.html 中的代码来创建 x 轴。创建的 x 轴在左侧有一个额外的 'Dec',在右侧有一个 'Jan',即总共有 14 个标签而不是 12 个(见附图)。但是,图表上只需要 'Jan' 到 'Dec'。我想知道如何去掉左边的'Dec'标签和右边的'Jan'标签?我的 google 搜索仅在删除所有次要刻度标签的解决方案中成功。任何帮助将不胜感激。
我使用以下代码生成图表:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
df = pd.DataFrame(np.random.randint(0,100,size=(365, 2)), columns=list('AB'))
df.index = pd.date_range(start='1/1/2022', end='12/31/2022').strftime('%b-%d')
plt.figure()
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=16))
ax.xaxis.set_major_formatter(ticker.NullFormatter())
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b'))
for tick in ax.xaxis.get_minor_ticks():
tick.tick1line.set_markersize(0)
tick.tick2line.set_markersize(0)
tick.label1.set_horizontalalignment('center')
plt.plot(df['A'], linewidth=0.5, color='tab:red')
plt.show()
enter image description here
尝试将您的 x-axis 限制设置为 0 到 365 之间的值。有时 matplotlib 使用的值稍微超出您的数据范围。这样,第一个 Dec 和最后一个 Jan 会自动从图中删除。
这里我用 1 个参数修改了你的代码:plt.xlim(0,365)
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
df = pd.DataFrame(np.random.randint(0,100,size=(365, 2)), columns=list('AB'))
df.index = pd.date_range(start='1/1/2022', end='12/31/2022').strftime('%b-%d')
plt.figure()
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=16))
ax.xaxis.set_major_formatter(ticker.NullFormatter())
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b'))
for tick in ax.xaxis.get_minor_ticks():
tick.tick1line.set_markersize(0)
tick.tick2line.set_markersize(0)
tick.label1.set_horizontalalignment('center')
plt.xlim(0,365)
plt.plot(df['A'], linewidth=0.5, color='tab:red')
plt.show()