Python Matplotlib:数据可视化的艺术,绘制炫酷的可视化图形

文摘   2024-11-11 12:00   上海  

大家好!我是风哥。今天要跟大家分享 Matplotlib 库的使用,让我们用 Python 绘制出美轮美奂的数据可视化图表!

基础图表

1. 线形图

 1import matplotlib.pyplot as plt
2import numpy as np
3
4# 创建数据
5x = np.linspace(010100)
6y1 = np.sin(x)
7y2 = np.cos(x)
8
9# 绘制图形
10plt.figure(figsize=(106))
11plt.plot(x, y1, label='sin(x)', color='blue', linestyle='-')
12plt.plot(x, y2, label='cos(x)', color='red', linestyle='--')
13
14# 添加标题和标签
15plt.title('正弦和余弦函数')
16plt.xlabel('X 轴')
17plt.ylabel('Y 轴')
18plt.legend()
19plt.grid(True)
20plt.show()

2. 散点图

 1import matplotlib.pyplot as plt
2import numpy as np
3
4# 生成随机数据
5np.random.seed(42)
6x = np.random.normal(01100)
7y = np.random.normal(01100)
8
9# 绘制散点图
10plt.figure(figsize=(88))
11plt.scatter(x, y, c='blue', alpha=0.6, s=100)
12plt.title('随机散点图')
13plt.xlabel('X 轴')
14plt.ylabel('Y 轴')
15plt.grid(True)
16plt.show()

3. 柱状图

 1import matplotlib.pyplot as plt
2import numpy as np
3
4# 数据
5categories = ['A''B''C''D']
6values = [23455678]
7
8# 创建柱状图
9plt.figure(figsize=(86))
10bars = plt.bar(categories, values)
11
12# 添加数值标签
13for bar in bars:
14    height = bar.get_height()
15    plt.text(bar.get_x() + bar.get_width()/2., height,
16             f'{int(height)}',
17             ha='center', va='bottom')
18
19plt.title('柱状图示例')
20plt.xlabel('类别')
21plt.ylabel('数值')
22plt.show()

进阶图表

1. 子图布局

 1import matplotlib.pyplot as plt
2import numpy as np
3
4# 创建数据
5x = np.linspace(010100)
6y1 = np.sin(x)
7y2 = np.cos(x)
8y3 = np.tan(x)
9y4 = x**2
10
11# 创建2x2的子图
12fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(22, figsize=(1210))
13
14# 第一个子图
15ax1.plot(x, y1, 'b-')
16ax1.set_title('sin(x)')
17
18# 第二个子图
19ax2.plot(x, y2, 'r-')
20ax2.set_title('cos(x)')
21
22# 第三个子图
23ax3.plot(x, y3, 'g-')
24ax3.set_title('tan(x)')
25
26# 第四个子图
27ax4.plot(x, y4, 'y-')
28ax4.set_title('x^2')
29
30# 调整子图间距
31plt.tight_layout()
32plt.show()

2. 饼图

 1import matplotlib.pyplot as plt
2
3# 数据
4sizes = [3020251510]
5labels = ['A''B''C''D''E']
6colors = ['#ff9999''#66b3ff''#99ff99''#ffcc99''#ff99cc']
7explode = (0.10000)  # 突出显示第一块
8
9plt.figure(figsize=(108))
10plt.pie(sizes, explode=explode, labels=labels, colors=colors,
11        autopct='%1.1f%%', shadow=True, startangle=90)
12plt.axis('equal')
13plt.title('饼图示例')
14plt.show()

3. 3D图表

 1import matplotlib.pyplot as plt
2from mpl_toolkits.mplot3d import Axes3D
3import numpy as np
4
5# 创建数据
6x = np.linspace(-55100)
7y = np.linspace(-55100)
8X, Y = np.meshgrid(x, y)
9Z = np.sin(np.sqrt(X**2 + Y**2))
10
11# 创建3D图
12fig = plt.figure(figsize=(128))
13ax = fig.add_subplot(111, projection='3d')
14
15# 绘制3D表面
16surface = ax.plot_surface(X, Y, Z, cmap='viridis')
17
18# 添加颜色条
19fig.colorbar(surface)
20
21# 设置标签
22ax.set_xlabel('X轴')
23ax.set_ylabel('Y轴')
24ax.set_zlabel('Z轴')
25ax.set_title('3D表面图')
26
27plt.show()

高级技巧

1. 动态图表

 1import matplotlib.pyplot as plt
2import numpy as np
3from matplotlib.animation import FuncAnimation
4
5# 创建图形
6fig, ax = plt.subplots(figsize=(106))
7xdata, ydata = [], []
8ln, = ax.plot([], [], 'ro-')
9
10# 初始化函数
11def init():
12    ax.set_xlim(02*np.pi)
13    ax.set_ylim(-11)
14    return ln,
15
16# 更新函数
17def update(frame):
18    xdata.append(frame)
19    ydata.append(np.sin(frame))
20    ln.set_data(xdata, ydata)
21    return ln,
22
23# 创建动画
24ani = FuncAnimation(fig, update, frames=np.linspace(02*np.pi, 128),
25                   init_func=init, blit=True)
26plt.show()

2. 自定义样式

 1import matplotlib.pyplot as plt
2import numpy as np
3
4# 设置全局样式
5plt.style.use('seaborn-darkgrid')
6
7# 自定义颜色映射
8colors = ['#2ecc71''#e74c3c''#3498db''#f1c40f']
9plt.rcParams['axes.prop_cycle'] = plt.cycler(color=colors)
10
11# 创建数据
12x = np.linspace(010100)
13y1 = np.sin(x)
14y2 = np.cos(x)
15
16# 创建图形
17plt.figure(figsize=(126))
18
19# 绘制带阴影的线图
20plt.plot(x, y1, linewidth=2, label='sin(x)')
21plt.fill_between(x, y1, alpha=0.3)
22plt.plot(x, y2, linewidth=2, label='cos(x)')
23plt.fill_between(x, y2, alpha=0.3)
24
25# 自定义样式
26plt.title('美化后的线图', fontsize=16, pad=20)
27plt.xlabel('X 轴', fontsize=12)
28plt.ylabel('Y 轴', fontsize=12)
29plt.legend(fontsize=12)
30plt.grid(True, linestyle='--', alpha=0.7)
31
32# 设置背景色
33plt.gca().set_facecolor('#f8f9fa')
34plt.show()

3. 组合图表

 1import matplotlib.pyplot as plt
2import numpy as np
3
4# 创建数据
5categories = ['A''B''C''D']
6values1 = [4321]
7values2 = [1234]
8
9# 创建图形
10fig, ax1 = plt.subplots(figsize=(106))
11
12# 绘制柱状图
13x = np.arange(len(categories))
14width = 0.35
15rects1 = ax1.bar(x - width/2, values1, width, label='组1')
16rects2 = ax1.bar(x + width/2, values2, width, label='组2')
17
18# 创建第二个Y轴
19ax2 = ax1.twinx()
20line = ax2.plot(x, np.cumsum(values1), 'r-', label='累计值')
21
22# 设置标签和标题
23ax1.set_xlabel('类别')
24ax1.set_ylabel('数值')
25ax2.set_ylabel('累计值')
26plt.title('组合图表示例')
27
28# 添加图例
29lines1, labels1 = ax1.get_legend_handles_labels()
30lines2, labels2 = ax2.get_legend_handles_labels()
31ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
32
33# 设置刻度
34ax1.set_xticks(x)
35ax1.set_xticklabels(categories)
36
37plt.show()

4. 热力图

 1import matplotlib.pyplot as plt
2import numpy as np
3import seaborn as sns
4
5# 创建数据
6data = np.random.rand(1010)
7mask = np.zeros_like(data)
8mask[np.triu_indices_from(mask)] = True
9
10# 创建热力图
11plt.figure(figsize=(108))
12sns.heatmap(data, mask=mask, cmap='YlOrRd'
13            annot=True, fmt='.2f',
14            linewidths=0.5, center=0,
15            cbar_kws={'label''相关系数'})
16
17plt.title('热力图示例')
18plt.show()

5. 地理数据可视化

 1import matplotlib.pyplot as plt
2import numpy as np
3
4def create_map_visualization():
5    # 创建示例数据(经度和纬度)
6    lons = np.random.uniform(-18018050)
7    lats = np.random.uniform(-909050)
8    values = np.random.rand(50)
9
10    plt.figure(figsize=(1510))
11
12    # 绘制世界地图轮廓(简化版)
13    plt.grid(True)
14    plt.xlim(-180180)
15    plt.ylim(-9090)
16
17    # 绘制散点
18    scatter = plt.scatter(lons, lats, c=values, 
19                         cmap='viridis', s=100)
20
21    plt.colorbar(scatter, label='值')
22    plt.title('全球数据分布图')
23    plt.xlabel('经度')
24    plt.ylabel('纬度')
25
26    plt.show()
27
28create_map_visualization()

今天的 Matplotlib 教程就到这里啦!通过这些例子,相信大家已经掌握了使用 Matplotlib 创建各种精美图表的方法。数据可视化不仅能帮助我们更好地理解数据,还能让我们的报告和演示更加生动有趣。记得关注我,下次给大家带来更多 Python 开发技巧!如果有问题,欢迎在评论区讨论。

py学习基地ai
分享生活百态,情感故事,了解不一样的人生
 最新文章