数据可视化是数据分析过程中至关重要的一部分,通过图形直观展示数据的特征和趋势,可以帮助我们更好地理解和解释数据。Python 提供了许多强大的可视化库,其中 Matplotlib 和 Seaborn 是最常用的两个库。
首先,你需要安装这两个库。如果你还没有安装,可以通过以下命令进行安装:
pip install matplotlib seaborn
Matplotlib 是一个低级别的可视化库,提供了丰富的 API 用于创建各种类型的图表。它可以创建静态、动态和交互式的可视化。
import matplotlib.pyplot as plt
# 创建简单的折线图
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]
plt.plot(x, y)
plt.title('Simple Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()
Matplotlib 提供了多种图表样式和主题,你可以使用 plt.style.use()
来应用预设样式。
plt.style.use('ggplot')
plt.plot(x, y)
plt.title('Styled Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()
你可以在一个图形中包含多个子图(subplot)。
fig, axs = plt.subplots(2, 2)
axs[0, 0].plot(x, y, 'r')
axs[0, 0].set_title('Red Line')
axs[0, 1].plot(x, [i**2 for i in x], 'g')
axs[0, 1].set_title('Green Line')
axs[1, 0].plot(x, [i**3 for i in x], 'b')
axs[1, 0].set_title('Blue Line')
axs[1, 1].plot(x, [i**4 for i in x], 'k')
axs[1, 1].set_title('Black Line')
plt.tight_layout()
plt.show()
plt.plot
):用于展示趋势变化。plt.bar
):用于比较不同类别的数据。plt.scatter
):用于展示两个变量之间的关系。plt.hist
):用于展示数据的分布。# 柱状图
categories = ['A', 'B', 'C', 'D']
values = [5, 7, 3, 4]
plt.bar(categories, values)
plt.title('Bar Chart')
plt.show()
# 散点图
x = [5, 7, 8, 7, 2, 17, 2, 9, 4, 11]
y = [99, 86, 87, 88, 100, 86, 103, 87, 94, 78]
plt.scatter(x, y)
plt.title('Scatter Plot')
plt.show()
# 直方图
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
plt.hist(data, bins=4)
plt.title('Histogram')
plt.show()
Seaborn 是基于 Matplotlib 之上的高级可视化库,专门用于统计图表的绘制。它提供了更高级别的接口和默认的主题风格,使得创建复杂的统计图表变得更加容易。
import seaborn as sns
import matplotlib.pyplot as plt
# 加载示例数据集
tips = sns.load_dataset('tips')
# 创建简单的散点图
sns.scatterplot(x='total_bill', y='tip', data=tips)
plt.title('Scatter Plot of Tips')
plt.show()
Seaborn 提供了多种主题和调色板,可以用来设置图表的风格。
sns.set(style='darkgrid', palette='muted')
# 创建带有主题的散点图
sns.scatterplot(x='total_bill', y='tip', data=tips)
plt.title('Scatter Plot with Darkgrid Style')
plt.show()
sns.barplot
):用于展示类别数据的均值和置信区间。sns.boxplot
):用于展示数据的分布情况及其异常值。sns.histplot
、sns.kdeplot
):用于展示数据的概率分布。sns.heatmap
):用于展示数据矩阵的值的大小。# 条形图
sns.barplot(x='day', y='total_bill', data=tips)
plt.title('Bar Plot of Total Bill')
plt.show()
# 箱线图
sns.boxplot(x='day', y='total_bill', data=tips)
plt.title('Box Plot of Total Bill')
plt.show()
# 分布图
sns.histplot(tips['total_bill'], kde=True)
plt.title('Histogram with KDE')
plt.show()
# 热力图
flights = sns.load_dataset("flights")
flights_pivot = flights.pivot("month", "year", "passengers")
sns.heatmap(flights_pivot, annot=True, fmt="d", cmap="YlGnBu")
plt.title('Heatmap of Flight Passengers')
plt.show()
Seaborn 提供了一些专门用于展示数据之间关系的图表,例如 pairplot
和 jointplot
。
# 多变量关系图(成对关系图)
sns.pairplot(tips, hue='sex')
plt.suptitle('Pair Plot of Tips Dataset', y=1.02)
plt.show()
# 联合分布图
sns.jointplot(x='total_bill', y='tip', data=tips, kind='reg')
plt.suptitle('Joint Plot with Regression Line', y=1.02)
plt.show()
无论是 Matplotlib 还是 Seaborn,都支持高度自定义的可视化。你可以自定义图表的每个部分,包括颜色、线型、标题、标签、图例等。
# 自定义 Matplotlib 图表
plt.plot(x, y, color='green', marker='o', linestyle='--', linewidth=2, markersize=8)
plt.title('Customized Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid(True)
plt.show()
# 自定义 Seaborn 图表
sns.set(style='whitegrid')
sns.boxplot(x='day', y='total_bill', data=tips, palette='Set3')
sns.despine(left=True)
plt.title('Customized Box Plot')
plt.show()
通过掌握 Matplotlib 和 Seaborn,你可以应对大部分的数据可视化需求,从简单的线条图到复杂的多变量分析图,为数据分析和模型结果的展示提供有力支持。