基本横坐标设置
1. 设置横坐标标签
使用plt.xlabel()
添加横坐标标签:
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建图表
plt.figure(figsize=(10, 6))
plt.plot(x, y)
# 设置横坐标标签
plt.xlabel("时间 (秒)", fontsize=12, fontweight='bold', color='#333')
plt.title("正弦波示例", fontsize=14)
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()
2. 设置横坐标范围
使用plt.xlim()
限制横坐标范围:
# 接上面的代码
plt.figure(figsize=(10, 6))
plt.plot(x, y)
# 设置横坐标范围
plt.xlim(2, 8) # 只显示2到8之间的区域
plt.xlabel("时间 (秒)")
plt.title("限制范围的横坐标", fontsize=14)
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()
3. 设置横坐标刻度
使用plt.xticks()
自定义刻度:
plt.figure(figsize=(10, 6))
plt.plot(x, y)
# 自定义刻度位置和标签
plt.xticks(
ticks=[0, np.pi, 2*np.pi, 3*np.pi], # 刻度位置
labels=['0', 'π', '2π', '3π'], # 刻度标签
fontsize=10
)
plt.xlabel("角度 (弧度)", fontsize=12)
plt.title("自定义横坐标刻度", fontsize=14)
plt.grid(True, linestyle=':', alpha=0.5)
plt.show()
高级横坐标设置技巧
1. 旋转刻度标签
当标签较长或密度较高时,旋转标签可提高可读性:
import pandas as pd
# 创建示例数据
dates = pd.date_range('2023-01-01', periods=10, freq='D')
values = np.random.rand(10) * 100
plt.figure(figsize=(12, 6))
plt.bar(dates, values, color='#4c72b0')
# 旋转刻度标签
plt.xticks(
rotation=45, # 旋转45度
ha='right', # 水平对齐方式
fontsize=9
)
plt.xlabel("日期", fontsize=12)
plt.ylabel("数值", fontsize=12)
plt.title("旋转横坐标标签示例", fontsize=14)
plt.tight_layout()
plt.show()
2. 使用对数刻度
当数据范围跨越多个数量级时,对数刻度更合适:
x_log = np.logspace(0, 3, 100) # 从10^0到10^3
y_log = np.log(x_log)
plt.figure(figsize=(10, 6))
plt.plot(x_log, y_log, color='#c44e52')
# 设置对数刻度
plt.xscale('log')
plt.xlabel("对数坐标", fontsize=12)
plt.ylabel("log(x)", fontsize=12)
plt.title("横坐标对数刻度示例", fontsize=14)
plt.grid(True, which='both', linestyle='--', alpha=0.5)
plt.show()
3. 日期时间格式化
处理时间序列数据时,正确格式化日期非常重要:
from matplotlib.dates import DateFormatter
# 创建更长的日期序列
dates = pd.date_range('2023-01-01', periods=90, freq='D')
values = np.cumsum(np.random.randn(90)) + 100
plt.figure(figsize=(12, 6))
plt.plot(dates, values, color='#55a868')
# 创建日期格式化器
date_format = DateFormatter("%b %d") # 月 日格式
# 获取当前坐标轴
ax = plt.gca()
ax.xaxis.set_major_formatter(date_format)
# 自动旋转日期标签
plt.gcf().autofmt_xdate()
plt.xlabel("2023年日期", fontsize=12)
plt.title("日期格式化横坐标", fontsize=14)
plt.grid(True, linestyle='--', alpha=0.3)
plt.tight_layout()
plt.show()
完整示例:综合应用
以下示例综合展示了多种横坐标设置技巧:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
from datetime import datetime
# 创建数据
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 6, 30)
dates = [start_date + timedelta(days=x) for x in range(0, (end_date - start_date).days)]
values = np.sin(np.linspace(0, 4*np.pi, len(dates))) * 50 + 100
# 创建图表
plt.figure(figsize=(14, 7))
# 绘制数据
plt.plot(dates, values, 'o-', color='#4c72b0', linewidth=2, markersize=5)
# 设置横坐标
plt.xlabel("日期", fontsize=14, fontweight='bold')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
# 旋转日期标签避免重叠
plt.xticks(rotation=30, ha='right', fontsize=10)
# 设置横坐标范围
plt.xlim(datetime(2023, 1, 15), datetime(2023, 6, 15))
# 添加网格
plt.grid(True, linestyle='--', alpha=0.6)
# 设置标题和纵坐标
plt.title("2023年上半年数据趋势", fontsize=16, pad=20)
plt.ylabel("指标值", fontsize=14)
# 添加水平参考线
plt.axhline(y=100, color='gray', linestyle='--', alpha=0.5)
# 紧凑布局
plt.tight_layout()
plt.show()
最佳实践建议:
- 保持标签简洁但信息丰富
- 确保刻度密度合适 - 既不过密也不过疏
- 使用旋转标签解决长文本重叠问题
- 对于时间序列数据,使用专门的日期格式化工具
- 对数刻度适合跨越多个数量级的数据
- 始终添加有意义的坐标轴标签
发表评论