# Python 可视化matplotlib模块怎么用 ## 一、Matplotlib简介 Matplotlib是Python中最著名的2D绘图库,由John Hunter于2003年创建。它提供了一个面向对象的API,用于将图表嵌入到应用程序中,同时也支持交互式环境如Jupyter Notebook。主要特点包括: - 支持多种图表类型:折线图、散点图、柱状图、饼图等 - 高度可定制化的图形元素 - 支持LaTeX格式的数学文本 - 可输出多种格式(PNG、PDF、SVG等) - 与NumPy无缝集成 安装方法: ```bash pip install matplotlib
import matplotlib.pyplot as plt # 准备数据 x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # 创建图形 plt.figure(figsize=(8, 4)) # 设置图形大小 # 绘制折线图 plt.plot(x, y, label='线性增长', color='blue', linestyle='-', linewidth=2) # 添加标题和标签 plt.title('基础折线图示例') plt.xlabel('X轴') plt.ylabel('Y轴') # 添加图例 plt.legend() # 显示网格 plt.grid(True, linestyle='--', alpha=0.5) # 显示图形 plt.show()
一个完整的Matplotlib图形通常包含以下元素: - Figure(画布):所有绘图元素的容器 - Axes(坐标系):实际的绘图区域 - Axis(坐标轴):x轴和y轴 - Title(标题) - Legend(图例) - Grid(网格) - Tick(刻度) - Label(轴标签)
import numpy as np x = np.random.randn(100) y = x + np.random.randn(100)*0.5 plt.scatter(x, y, color='red', alpha=0.6, label='随机点') plt.title('散点图示例') plt.legend() plt.show()
labels = ['A', 'B', 'C', 'D'] values = [15, 30, 45, 10] plt.bar(labels, values, color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']) plt.title('柱状图示例') plt.show()
sizes = [15, 30, 45, 10] explode = (0, 0.1, 0, 0) # 突出第二部分 plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) plt.title('饼图示例') plt.show()
data = np.random.randn(1000) plt.hist(data, bins=30, density=True, alpha=0.7, color='green', edgecolor='black') plt.title('直方图示例') plt.show()
fig, axes = plt.subplots(2, 2, figsize=(10, 8)) # 第一个子图 axes[0,0].plot(x, y, 'r') axes[0,0].set_title('子图1') # 第二个子图 axes[0,1].scatter(x, y) axes[0,1].set_title('子图2') # 第三个子图 axes[1,0].bar(labels, values) axes[1,0].set_title('子图3') # 第四个子图 axes[1,1].hist(data, bins=30) axes[1,1].set_title('子图4') plt.tight_layout() # 自动调整子图间距 plt.show()
Matplotlib支持多种预设样式:
print(plt.style.available) # 查看可用样式 plt.style.use('ggplot') # 使用ggplot样式
自定义样式:
plt.rcParams.update({ 'font.family': 'SimHei', # 中文字体 'font.size': 12, 'axes.grid': True, 'grid.alpha': 0.3 })
plt.plot(x, y) plt.annotate('峰值点', xy=(3, 6), xytext=(4, 5), arrowprops=dict(facecolor='black', shrink=0.05)) plt.text(1, 8, '这是文本注释', fontsize=12) plt.show()
from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(10, 7)) ax = fig.add_subplot(111, projection='3d') x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) ax.plot_surface(X, Y, Z, cmap='viridis') ax.set_title('3D曲面图') plt.show()
plt.plot(x, y) plt.savefig('figure.png', dpi=300, bbox_inches='tight')
支持格式:PNG、JPG、PDF、SVG、EPS等
plt.ion() # 开启交互模式 plt.plot(x, y) plt.ioff() # 关闭交互模式
from matplotlib.animation import FuncAnimation fig, ax = plt.subplots() xdata, ydata = [], [] ln, = plt.plot([], [], 'r-') def init(): ax.set_xlim(0, 2*np.pi) ax.set_ylim(-1, 1) return ln, def update(frame): xdata.append(frame) ydata.append(np.sin(frame)) ln.set_data(xdata, ydata) return ln, ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128), init_func=init, blit=True) plt.show()
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
plt.tight_layout() # 自动调整子图间距
plt.savefig('output.png', dpi=300) # 提高DPI
import pandas as pd # 模拟股票数据 dates = pd.date_range('20230101', periods=100) stock = pd.DataFrame({ 'Close': np.cumsum(np.random.randn(100)*0.1)+100, 'Volume': np.random.randint(1000, 10000, size=100) }, index=dates) # 创建双轴图 fig, ax1 = plt.subplots(figsize=(12, 6)) color = 'tab:red' ax1.set_xlabel('日期') ax1.set_ylabel('收盘价', color=color) ax1.plot(stock.index, stock['Close'], color=color) ax1.tick_params(axis='y', labelcolor=color) ax2 = ax1.twinx() # 共享x轴 color = 'tab:blue' ax2.set_ylabel('成交量', color=color) ax2.bar(stock.index, stock['Volume'], color=color, alpha=0.3) ax2.tick_params(axis='y', labelcolor=color) plt.title('股票价格与成交量') plt.show()
Matplotlib作为Python生态中最基础的可视化工具,具有以下优势: - 功能全面,几乎支持所有常见图表类型 - 高度可定制化,可以精确控制每个图形元素 - 良好的文档和社区支持 - 与其他科学计算库(NumPy、Pandas)完美集成
对于更高级的需求,可以结合Seaborn、Plotly等库使用。掌握Matplotlib是Python数据可视化的重要基础,建议从简单图表开始,逐步掌握其各种定制功能。
”`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。