面积图是数据可视化中的一个有效工具,用于说明时间上的关系和趋势。它们提供了一种全面的、视觉上迷人的方法,通过熟练地将折线图的可读性与填充区域的吸引力相结合来呈现数值数据。
在本文中,我们将学习更多关于在Python中创建面积折线图的知识。面积图为数据可视化提供了一个有价值的工具,提供了一种清晰而引人入胜的方式来传达随着时间的推移的趋势和关系。
什么是面积图?
面积线图,也称为面积图或堆积面积图,是一种数据可视化技术,用于表示随时间或跨类别的数据。它是基本折线图的扩展,当您想要显示整体的组成、沿着单个组件以及它们如何随时间或跨类别变化时,它特别有用。在本文中,我们将探索如何使用matplotlib库在Python中创建面积线图,并解释它们在可视化数据中的重要性。
以下是面积线图的关键组成部分和特征。
X轴:水平轴代表自变量,通常是时间或类别。它是一种连续或分类量表,为数据点提供背景。
Y轴:垂直轴表示因变量,通常是一个数值,用于度量您正在可视化的内容的数量或大小。
线:面积线图中的各条线表示不同的类别、组或构件。每一行从基线(通常是X轴)开始,向上显示该类别或组件在特定时间点或沿着类别轴的值。
区域填充:线条和基线之间的区域用颜色填充,使其在视觉上与众不同。该区域的颜色通常用于表示它所代表的类别或组件。
堆叠:在堆叠面积图中,每条线都堆叠在前一条线的顶部。这种叠加说明了总体如何随时间或跨类别变化,以及每个类别对整体的贡献。
创建面积图
首先,让我们使用Python制作一个基本的面积线图。为了创建图并显示各种类别如何随时间变化,我们将使用Matplotlib。
python
import pandas as pd
import matplotlib.pyplot as plt
# Sample data
df = pd.DataFrame({
'x': list(range(1, 11)),
'y': [1, 3, 2, 4, 5, 7, 6, 8, 9, 10]
})
# Create the area line plot
plt.fill_between(df['x'], df['y'], color='blue', alpha=0.2)
plt.plot(df['x'], df['y'], color='red', alpha=0.5, linewidth=0.9)
plt.title("Area Line Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()
带标记和标签的面积图
添加更多功能,使其更具吸引力
- 导入必要的库:pandas用于数据操作,matplotlib.pyplot用于数据可视化。
- 准备示例数据:创建一个DataFrame,其中'x'和'y'列包含数值。
- 生成面积线图:使用plt.fill_between()创建半透明的蓝色面积线图,使用plt.plot()创建微弱的红色线。
- 使用标记和标签增强图:使用plt.scatter()在数据点处添加红色圆形标记(s=30)。使用plt.text()在每个数据点上方添加黑色标签,将其水平居中(ha ='center')并在底部垂直对齐(va ='bottom')。自定义轴、添加标题并显示绘图。
python
import pandas as pd
import matplotlib.pyplot as plt
# Sample data
df = pd.DataFrame({
'x': list(range(1, 11)),
'y': [1, 3, 2, 4, 5, 7, 6, 8, 9, 10]
})
# Create the area line plot
plt.fill_between(df['x'], df['y'], color='blue', alpha=0.5)
plt.plot(df['x'], df['y'], color='red', alpha=0.1)
# Add red markers at data points
plt.scatter(df['x'], df['y'], color='red', s=30)
# Add labels above data points
for i, row in df.iterrows():
plt.text(row['x'], row['y'], str(row['y']), ha='center', va='bottom', color='black', size=10)
plt.title("Area Line Plot with Markers and Labels")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()
堆叠面积图
- 导入必要的库:pandas用于数据操作,matplotlib.pyplot用于数据可视化。
- 准备示例数据:创建一个DataFrame,其中包含"x"、"Category A"、"Category B"和"Category C"列,列中包含数值。
- 定义自定义颜色:定义要用于每个类别的颜色列表("黄色"、"紫色"、"粉红色")。
- 生成堆叠面积线图:使用plt.stackplot()创建具有定义的颜色和透明度的堆叠面积线图。此外,使用不同的颜色、线宽和透明度为每个类别绘制单独的线条。添加标签、自定义轴并显示绘图。
python
import pandas as pd
import matplotlib.pyplot as plt
# Sample data
df = pd.DataFrame({
'x': list(range(1, 11)),
'Category A': [1, 3, 2, 4, 5, 7, 6, 8, 9, 10],
'Category B': [2, 4, 3, 5, 6, 8, 7, 9, 10, 11],
'Category C': [3, 5, 4, 6, 7, 9, 8, 10, 11, 12]
})
# Define custom colors for each category
colors = ['yellow', 'purple', 'pink']
# Create the stacked area line plot with custom colors
plt.stackplot(df['x'], df['Category A'], df['Category B'], df['Category C'], colors=colors, alpha=0.7)
# Plot lines for each category with custom colors
plt.plot(df['x'], df['Category A'], color='blue', alpha=0.5, linewidth=0.9)
plt.plot(df['x'], df['Category B'], color='green', alpha=0.5, linewidth=0.9)
plt.plot(df['x'], df['Category C'], color='red', alpha=0.5, linewidth=0.9)
plt.title("Stacked Area Line Plot with Custom Colors")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.legend()
plt.show()
线间填充
- 导入必要的库:matplotlib.pyplot用于数据可视化,numpy用于数值运算。
- 准备样本数据:使用np.linspace生成x轴值,并使用sin和cos函数计算相应的y轴值。
- 创建绘图元素:使用plt.subplots()创建一个图形和轴,并使用ax.plot()绘制两条具有不同颜色和标签的线。
- 线间填充:使用ax.fill_between()以特定颜色和透明度填充线条之间的区域,并应用条件和插值。添加标签、自定义轴并显示绘图。
python
import matplotlib.pyplot as plt
import numpy as np
# Sample data for demonstration
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# Create a figure and axis
fig, ax = plt.subplots()
# Plot the two lines
ax.plot(x, y1, label='Line 1', color='blue')
ax.plot(x, y2, label='Line 2', color='green')
# Fill the area between the lines
ax.fill_between(x, y1, y2, where=(y1 > y2), interpolate=True, alpha=0.5, color='yellow', label='Fill Area')
# Customize the plot
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_title('Filling Between Lines')
ax.legend()
# Display the plot
plt.show()
总结
总而言之,面积图可有效显示数据随时间或跨类别的趋势、比较和部分与整体的关系。它们提供了一种视觉上引人注目的方式来理解不同的组件如何对整体做出贡献,以及这些贡献如何在选定的轴(时间或类别)上发生变化。