matplotlib命令与格式:tick坐标轴日期格式(设置日期主副刻度)

1.横坐标设置时间格式

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# 配置横坐标为日期格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())

例子:
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
# 生成横纵坐标信息
dates = ['01/02/1991', '01/03/1991', '01/04/1991']
xs = [datetime.strptime(d, '%m/%d/%Y').date() for d in dates]
ys = range(len(xs))
# 配置横坐标
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
# Plot
plt.plot(xs, ys)
plt.gcf().autofmt_xdate()  # 自动旋转日期标记
plt.show()

2.设置日期坐标轴主副刻度值

所有坐标轴日期格式类型

(1)获取坐标轴日期格式类型
from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY,YEARLY
#获取每月一日数据
monthdays = MonthLocator()
#获取每周一的日期数据
mondays = WeekdayLocator(MONDAY)
#获取每日数据
alldays = DayLocator()
# import constants for the days of the week
from matplotlib.dates import MO, TU, WE, TH, FR, SA, SU
# tick on mondays every week
loc = WeekdayLocator(byweekday=MO, tz=tz)
# tick on mondays and saturdays
loc = WeekdayLocator(byweekday=(MO, SA))
# tick on mondays every second week
loc = WeekdayLocator(byweekday=MO, interval=2)
# tick every 5th easter(每隔5个选1个)
rule = rrulewrapper(YEARLY, byeaster=1, interval=5)
loc = RRuleLocator(rule)

(2)设置坐标轴日期格式
#设置主副刻度
ax.xaxis.set_major_locator(mondays)ax.xaxis.set_minor_locator(alldays)
#设置坐标轴刻度标签格式
mondayFormatter = DateFormatter('%Y-%m-%d') # 如:2-29-2015dayFormatter = DateFormatter('%d') # 如:12ax.xaxis.set_major_formatter(mondayFormatter)
#字符串旋转
for label in ax1.get_xticklabels(): label.set_rotation(30) label.set_horizontalalignment('right')

(3)例子
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime

#销售数据
dates=[20171101,20171102,20171103,20171104]
sales=[102.1,100.6,849,682]
#将dates改成日期格式
x= [datetime.strptime(str(d), '%Y%m%d').date() for d in dates]

#figure布局
fig=plt.figure(figsize=(8,4))
ax1=fig.add_subplot(1,1,1) 
#绘图
ax1.plot(x,y,ls='--',lw=3,color='b',marker='o',ms=6, mec='r',mew=2, mfc='w',label='业绩趋势走向')
plt.gcf().autofmt_xdate()  # 自动旋转日期标记

#设置x轴主刻度格式
alldays =  mdates.DayLocator()                #主刻度为每天
ax1.xaxis.set_major_locator(alldays)          #设置主刻度
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y%m%d'))  
#设置副刻度格式
hoursLoc = mpl.dates.HourLocator(interval=6) #为6小时为1副刻度
ax1.xaxis.set_minor_locator(hoursLoc)
ax1.xaxis.set_minor_formatter(mdates.DateFormatter('%H'))
#参数pad用于设置刻度线与标签间的距离
ax1.tick_params(pad=10)

#显示图像
plt.show()

3.设置日期时间刻度值

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
import datetime as dt

fig = plt.figure()
ax2 = fig.add_subplot(212)
date2_1 = dt.datetime(2008,9,23)
date2_2 = dt.datetime(2008,10,3)
delta2 = dt.timedelta(days=1)
dates2 = mpl.dates.drange(date2_1, date2_2, delta2)
y2 = np.random.rand(len(dates2))
ax2.plot_date(dates2, y2, linestyle='-')
dateFmt = mpl.dates.DateFormatter('%Y-%m-%d')
ax2.xaxis.set_major_formatter(dateFmt)

daysLoc = mpl.dates.DayLocator()
hoursLoc = mpl.dates.HourLocator(interval=6)
ax2.xaxis.set_major_locator(daysLoc)
ax2.xaxis.set_minor_locator(hoursLoc)

fig.autofmt_xdate(bottom=0.18)
fig.subplots_adjust(left=0.18)

ax1 = fig.add_subplot(211)
date1_1 = dt.datetime(2008, 9, 23)
date1_2 = dt.datetime(2009, 2, 16)
delta1 = dt.timedelta(days=10)
dates1 = mpl.dates.drange(date1_1, date1_2, delta1)
y1 = np.random.rand(len(dates1))
ax1.plot_date(dates1, y1, linestyle='--')
monthsLoc = mpl.dates.MonthLocator()
weeksLoc = mpl.dates.WeekdayLocator()
ax1.xaxis.set_major_locator(monthsLoc)
ax1.xaxis.set_minor_locator(weeksLoc)
monthsFmt = mpl.dates.DateFormatter('%b')
ax1.xaxis.set_major_formatter(monthsFmt)

plt.show()



### 如何在 Matplotlib 中调整坐标轴刻度的字体大小 在 Matplotlib 中,可以通过 `plt.tick_params` 方法来调整坐标轴刻度标签的字体大小。具体来说,参数 `labelsize` 可用于设置刻度线标签的字体大小[^1]。 以下是通过 `tick_params` 调整字体大小的一个示例: ```python import matplotlib.pyplot as plt # 创建子图并分别设置不同的字体大小 plt.subplot(131) plt.tick_params(axis='both', labelsize='medium') # 设置为 medium 字体大小 plt.title("Medium Font Size") plt.subplot(132) plt.tick_params(axis='both', labelsize='large') # 设置为 large 字体大小 plt.title("Large Font Size") plt.subplot(133) plt.tick_params(axis='both', labelsize=15) # 自定义字体大小为 15 plt.title("Custom Font Size (15)") plt.tight_layout() plt.show() ``` 上述代码展示了如何使用 `labelsize` 参数分别为不同子图设定不同的字体大小。注意,`axis` 参数可以指定调整的是哪个(如 `'x'`, `'y'`, 或 `'both'`),默认情况下会作用于两个上的刻度标签。 如果需要更精细地控制单个刻度字体大小,则可以直接针对特定调用其方法。例如,下面展示了一个例子,其中仅修改了 x 和 y 各自的字体大小: ```python fig, ax = plt.subplots() ax.plot([1, 2, 3], [4, 5, 6]) # 单独调整 X 和 Y 的字体大小 ax.tick_params(axis='x', labelsize=8) # 修改 X 字体大小 ax.tick_params(axis='y', labelsize=12) # 修改 Y 字体大小 plt.show() ``` 此外,在某些场景下可能还需要隐藏不必要的刻度或更改它们的位置以优化图表布局。这可通过 `set_ticks_position` 来实现,并结合其他 spine 配置完成进一步定制化需求[^3]。 #### 手动设置刻度位置格式 除了通过 `tick_params` 动态改变现有刻度样式外,还可以利用 `set_ticks` 和 `set_ticklabels` 明确规定哪些数值应该显示以及对应的呈现形式[^2]。不过需要注意这种方法可能导致视觉上不够整洁的情况发生,因此需谨慎应用。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值