Matplotlib高级数据可视化图表

在数据科学和分析领域,有效地展示和交流数据至关重要。虽然基础图表如条形图和散点图不可或缺,但深入研究高级可视化图表可以揭示更深层次的洞察,并增强叙事能力。以下是可以使用Matplotlib创建的十大高级图表类型。

目录

  • 3D曲面图
  • 热力图
  • 等高线图
  • 流场图
  • 时间序列分析
  • 小提琴图
  • 矢量场图
  • 子图和GridSpec
  • 地理热力图
  • 箭头图

3D曲面图

3D曲面图对于探索三个变量之间的关系非常有用。使用Matplotlib创建3D图表非常简单,允许可视化景观或曲面。这些图表在气象学、工程和金融等领域特别有用,因为理解变量之间的交互至关重要。

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np fig = plt.figure() 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)) surf = ax.plot_surface(x, y, z, cmap='viridis') fig.colorbar(surf, shrink=0.5, aspect=5) ax.set_xlabel('X轴') ax.set_ylabel('Y轴') ax.set_zlabel('Z轴') plt.show()

热力图

热力图是表示数据的一种绝佳方式,其中颜色代表现象的大小。它们广泛用于表示相关性矩阵,可以突出显示变量之间的关系,或用于显示地理数据密度。

import matplotlib.pyplot as plt import numpy as np data = np.random.rand(10, 10) # 随机数据用于演示 plt.imshow(data, cmap='hot', interpolation='nearest') plt.colorbar() plt.title('热力图示例') plt.show()

等高线图

等高线图适用于使用等高线在二维中表示三维数据。这些线连接等值点。等高线图通常用于气象学和地理学中表示海拔,或用于可视化机器学习中的优化景观。

import matplotlib.pyplot as plt import numpy as np 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)) plt.figure(figsize=(8, 6)) contour = plt.contour(X, Y, Z, colors='black') plt.clabel(contour, inline=True, fontsize=8) plt.title('等高线图') plt.xlabel('x轴') plt.ylabel('y轴') plt.contourf(X, Y, Z, cmap='viridis') plt.colorbar() plt.show()

流场图

流场图或流场图非常适合表示流体流动、气流或任何其他矢量场。它们给人一种运动和方向感,展示了矢量场如何在平面上流动,这对于工程和环境研究至关重要。

时间序列分析

可视化时间序列数据是金融、气象和工程中数据分析的基本方面。Matplotlib可以绘制复杂的时间序列数据,使其更容易识别趋势、周期和季节性。

import matplotlib.pyplot as plt import pandas as pd import numpy as np dates = pd.date_range(start='2021-01-01', end='2021-12-31', freq='D') data = np.random.randn(len(dates)).cumsum() df = pd.DataFrame(data, index=dates, columns=['值']) plt.figure(figsize=(10, 6)) plt.plot(df.index, df['值'], marker='o', linestyle='-', markersize=2) plt.title('时间序列图示例') plt.xlabel('日期') plt.ylabel('值') plt.grid(True) plt.xticks(rotation=45) plt.show()

小提琴图

小提琴图表示数值数据,并将箱线图与核密度图结合起来。它们特别适用于比较不同类别之间的数据分布。

import matplotlib.pyplot as plt import seaborn as sns import numpy as np np.random.seed(10) # 为了可重复的结果 data = np.random.normal(loc=0, scale=1, size=100) categories = ['A']*50 + ['B']*50 data = np.append(data, np.random.normal(loc=0.5, scale=1.5, size=100)) categories = np.array(categories + ['A']*50 + ['B']*50) df = pd.DataFrame({'类别': categories, '值': data}) plt.figure(figsize=(8, 6)) sns.violinplot(x='类别', y='值', data=df) plt.title('小提琴图示例') plt.xlabel('类别') plt.ylabel('值') plt.show()

矢量场图

使用箭头可视化矢量场的方向和大小。这对于理解风向模式、流体流动或磁场等现象非常有价值。

import numpy as np import matplotlib.pyplot as plt x, y = np.meshgrid(np.linspace(-5, 5, 20), np.linspace(-5, 5, 20)) u = -y v = x plt.figure(figsize=(8, 6)) plt.quiver(x, y, u, v, color='r') plt.title('矢量场图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.xlim([-5, 5]) plt.ylim([-5, 5]) plt.show()

子图和GridSpec

在单个图表中创建多个子图是Matplotlib的一个高级特性,允许比较不同的数据集或同一数据的不同视图。使用GridSpec,可以自定义图表布局,控制它们的位置、大小和纵横比。

import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np fig = plt.figure(figsize=(10, 8)) gs = gridspec.GridSpec(3, 3, fig) ax1 = fig.add_subplot(gs[0, :]) ax2 = fig.add_subplot(gs[1, :-1]) ax3 = fig.add_subplot(gs[1:, 2]) ax4 = fig.add_subplot(gs[2, 0]) ax5 = fig.add_subplot(gs[2, 1]) data1 = np.random.randn(100).cumsum() data2 = np.random.rand(10) data3 = np.random.rand(10,10) data4 = np.random.randn(100) data5 = np.random.randn(100).cumsum() ax1.plot(data1, label='线图') ax1.set_title('顶部跨度图') ax1.legend() ax2.bar(np.arange(len(data2)), data2, color='orange', label='条形图') ax2.set_title('条形图') ax2.legend() ax3.imshow(data3, cmap='viridis', aspect='auto', label='热力图') ax3.set_title('热力图') ax4.hist(data4, bins=20, color='green', label='直方图') ax4.set_title('直方图') ax4.legend() ax5.scatter(np.arange(len(data5)), data5, color='red', label='散点图') ax5.set_title('散点图') ax5.legend() plt.tight_layout() plt.show()

地理热力图

import plotly.express as px import pandas as pd data = { "州": ["CA", "TX", "NY", "FL", "IL", "PA", "OH", "GA", "NC", "MI"], "值": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) fig = px.choropleth(df, locations='州', locationmode="USA-states", color='值', color_continuous_scale=px.colors.sequential.Plasma, scope="usa", labels={'值':'示例值'} ) fig.update_layout(title_text = '美国州地理热力图') fig.show() import numpy as np import matplotlib.pyplot as plt x, y = np.meshgrid(np.linspace(-2, 2, 20), np.linspace(-2, 2, 20)) u = -y v = x plt.figure(figsize=(6, 6)) plt.quiver(x, y, u, v, color='blue') plt.title('箭头图示例') plt.xlabel('X轴') plt.ylabel('Y轴') plt.xlim([-2, 2]) plt.ylim([-2, 2]) plt.axhline(0, color='black',linewidth=0.5) plt.axvline(0, color='black',linewidth=0.5) plt.grid(True) plt.show()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485