🧑 博主简介:
曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。
目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。
在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotlib函数库来使用,将案列中的数据替换成自己真实的数据即可绘制出符合条件的图像。
关于matplotlib进行数据可视化的案列,具体参考Matplotlib 3.6.0 文档示例库,里面给出各种图形可视化的案列代码,具体如下所示:

下面示点进去带标签的分组条形图页面下官方代码案列;
此示例显示如何创建分组条形图以及如何使用标签注释条形图。
import matplotlib.pyplot as plt
import numpy as np
labels = ['G1', 'G2', 'G3', 'G4', 'G5']
men_means = [20, 34, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
x = np.arange(len(labels)) # the label locations
width = 0.35 # the width of the bars
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, men_means, width, label='Men')
rects2 = ax.bar(x + width/2, women_means, width, label='Women')
# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(x, labels)
ax.legend()
ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)
fig.tight_layout()
plt.show()

接下来我们将详细介绍matplotlib在进行数据可视化分析过程常用的图像绘制;
一、折线图(Line Plot)
折线图通常用于展示数据随时间或其他连续变量的变化趋势。
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制折线图
plt.plot(x, y)
# 设置图表标题和坐标轴标签
plt.title('Sin Curve')
plt.xlabel('x')
plt.ylabel('y')
# 显示图表
plt.show()

二、直方图(Histogram)
直方图用于展示数据的分布情况,特别是连续型变量的分布情况。
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
data = np.random.randn(1000)
# 绘制直方图
plt.hist(data, bins=30, edgecolor='black')
# 设置图表标题和坐标轴标签
plt.title('Histogram of Data')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示图表
plt.show()

三、饼图(Pie Chart)
饼图用于展示各类别的比例或占比。
import matplotlib.pyplot as plt
# 创建数据
labels = ['Category A', 'Category B', 'Category C']
sizes = [15, 30, 55]
# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
# 设置图表标题
plt.title('Pie Chart Example')
# 显示图表
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()

四、散点图(Scatter Plot)
散点图用于展示两个变量之间的关系,通过点的分布来观察是否存在某种趋势或模式。
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.random.rand(50)
y = np.random.rand(50)
# 绘制散点图
plt.scatter(x, y)
# 设置图表标题和坐标轴标签
plt.title('Scatter Plot Example')
plt.xlabel('X')
plt.ylabel('Y')
# 显示图表
plt.show()

五、柱状图(Bar Chart)
柱状图用于比较不同类别或不同时间点的数据大小。
import matplotlib.pyplot as plt
# 创建数据
categories = ['Category 1', 'Category 2', 'Category 3']
values = [10, 15, 7]
# 绘制柱状图
plt.bar(categories, values)
# 设置图表标题和坐标轴标签
plt.title('Bar Chart Example')
plt.xlabel('Categories')
plt.ylabel('Values')
# 显示图表
plt.show()

六、箱线图(Box Plot)
箱线图用于展示一组数据的分布情况,包括最小值、下四分位数、中位数、上四分位数和最大值。
下面是一个简单的示例,说明如何绘制箱线图,其中特征名称作为X轴的标签:
import matplotlib.pyplot as plt
import numpy as np
# 创建一些示例数据
np.random.seed(10)
data = {
'Feature 1': np.random.normal(0, 1, 100),
'Feature 2': np.random.normal(1, 1.5, 100),
'Feature 3': np.random.normal(-1, 0.7, 100),
'Feature 4': np.random.normal(2, 2, 100)
}
# 提取数据列表和特征名称列表
values = list(data.values())
labels = list(data.keys())
# 绘制箱线图
fig, ax = plt.subplots()
ax.boxplot(values, vert=True, patch_artist=True, labels=labels)
# 设置图表标题
ax.set_title('Box Plot with Features as X-axis Labels')
# 显示网格
ax.grid(True)
# 显示图表
plt.show()

设置vert=True
(这是默认值,表示箱体是垂直的),并启用patch_artist=True
以允许我们为箱体设置颜色。最后,我们设置了图表的标题,并显示了网格和图表。
要绘制水平分布的箱线图(即箱体的长轴沿X轴方向),你需要对matplotlib
的boxplot
函数进行一些调整。特别地,你需要设置vert
参数为False
,这样箱线图就会水平显示。下面是一个简单的示例,说明如何创建水平箱线图:
import matplotlib.pyplot as plt
import numpy as np
# 创建一些示例数据
np.random.seed(10)
data = {
'Feature 1': np.random.normal(0, 1, 100),
'Feature 2': np.random.normal(1, 1.5, 100),
'Feature 3': np.random.normal(-1, 0.7, 100),
'Feature 4': np.random.normal(2, 2, 100)
}
# 提取数据为列表
values = [data[feature] for feature in data]
# 创建箱线图的位置(即X轴上的刻度位置)
positions = np.arange(len(data))
# 绘制水平箱线图
fig, ax = plt.subplots()
ax.boxplot(values, vert=False, patch_artist=True, positions=positions, notch=False)
# 设置箱线图的颜色
colors = ['b', 'g', 'r', 'c']
for patch, color in zip(ax.artists, colors):
patch.set_facecolor(color)
# 设置X轴和Y轴的标签
ax.set_xlabel('Value')
ax.set_ylabel('Features')
ax.set_yticklabels(data.keys()) # 设置Y轴刻度标签为特征的名称
# 显示网格
ax.grid(True)
# 显示图表
plt.show()

七、面积图
面积图(Area Chart)结合了折线图和面积图的特性,可以展示随时间或其他连续变量的数据变化趋势,并且通过堆叠面积来表示多个类别的数据总量及其各自贡献。
下面是一个简单的示例代码,演示如何使用matplotlib绘制折线面积图:
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制折线图和折线面积图
fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)', color='blue', linewidth=2)
ax.plot(x, y2, label='cos(x)', color='red', linewidth=2)
# 绘制y1的面积图
ax.fill_between(x, y1, where=y1>=0, color='lightblue', interpolate=True)
ax.fill_between(x, y1, where=y1<0, color='blue', interpolate=True)
# 绘制y2的面积图,注意要调整y的起始值以避免重叠
ax.fill_between(x, y1+y2, where=(y1+y2)>=0, color='lightpink', interpolate=True)
ax.fill_between(x, y1+y2, where=(y1+y2)<0, color='pink', interpolate=True)
# 设置图表标题和坐标轴标签
ax.set_title('Stacked Line Area Chart Example')
ax.set_xlabel('x')
ax.set_ylabel('y')
# 添加图例
ax.legend()
# 显示网格
ax.grid(True)
# 显示图表
plt.show()

在上面的代码中,我们首先定义了两个函数y1
和y2
,它们分别代表sin(x)
和cos(x)
的值。然后,我们使用plot
函数绘制了这两个函数的折线图。接下来,我们使用fill_between
函数来绘制每个函数的面积图。需要注意的是,为了避免面积图之间的重叠,我们在绘制y2
的面积图时,将y
的起始值调整为y1+y2
。
最后,我们设置了图表的标题、坐标轴标签,并添加了图例。调用plt.show()
函数来显示最终的折线面积图。
八、热力图
为了更直观地绘制热力图,通常会使用seaborn
库,它是基于matplotlib
的一个更高级的统计绘图库。下面是一个使用seaborn
绘制热力图的示例代码:
首先,确保你已经安装了seaborn
库。如果没有安装,可以使用pip进行安装:
pip install seaborn
然后,你可以使用以下代码来绘制热力图:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 创建一个随机数据矩阵
data = np.random.rand(10, 12)
# 创建一个热力图
heatmap = sns.heatmap(data, cmap='coolwarm', annot=True, fmt=".2f")
# 设置X轴和Y轴的标签
heatmap.set_xticklabels(range(1, 13)) # 设置X轴刻度标签
heatmap.set_yticklabels(range(1, 11)) # 设置Y轴刻度标签
# 设置图表的标题
plt.title('Heatmap Example')
# 显示图表
plt.show()

在这个例子中,我们首先导入了所需的库,然后创建了一个10x12的随机数据矩阵。接着,我们使用sns.heatmap
函数来绘制热力图,其中data
参数是我们要展示的数据,cmap
参数定义了颜色映射(这里使用了'coolwarm'),annot=True
表示在每个格子中显示数据值,fmt=".2f"
定义了数值的格式。最后,我们设置了X轴和Y轴的刻度标签,并为图表添加了标题。
如果你坚持使用matplotlib
而不使用seaborn
,你也可以通过绘制一系列带颜色的矩形来手动创建热力图,但这将比使用seaborn
更加复杂。因此,推荐使用seaborn
来绘制热力图,因为它提供了更简洁、更高级的接口。
后面将继续介绍seaborn绘图库;因为seaborn并是一个绘图库,它与DataFrame对象有很好的集成。
总之matplotlib是Python中一个功能强大的数据可视化库,它提供了丰富的绘图接口,可以帮助用户快速创建各种高质量的图形,如折线图、直方图、饼图、散点图、柱状图等。以下是使用matplotlib进行数据可视化的几个关键总结和优势:
-
多样化的图形支持:
matplotlib支持绘制各种常见的统计图形,包括折线图、柱状图、散点图等,也支持更复杂的图形,如热力图、等高线图等。这使得matplotlib能够应对各种数据分析和可视化的需求。
-
高度可定制性:
matplotlib提供了大量的参数和选项,用户可以根据需要自定义图形的各个方面,包括颜色、线条样式、字体、图例等。这使得用户能够根据自己的需求和审美创建出独一无二的图形。
-
易于集成:
matplotlib可以与Python中的其他库(如NumPy、Pandas等)无缝集成,使得数据预处理、数据分析和数据可视化可以在同一个环境中进行。这大大提高了数据分析和可视化的效率。
-
交互式图形:
matplotlib支持创建交互式图形,用户可以通过鼠标和键盘与图形进行交互,如缩放、平移、选择数据点等。这使得用户能够更深入地探索和分析数据。
-
丰富的文档和社区支持:
matplotlib拥有完善的文档和活跃的社区支持,用户可以通过官方文档、教程、示例代码以及社区论坛等途径获取帮助和解答问题。这使得学习和使用matplotlib变得更加容易。
-
高质量的输出:
matplotlib可以生成高质量的图形输出,支持多种文件格式(如PNG、PDF、SVG等),可以满足不同场景下的需求。同时,matplotlib还支持在图形中嵌入LaTeX数学公式,使得图形更具专业性和可读性。
-
跨平台兼容性:
matplotlib具有良好的跨平台兼容性,可以在Windows、Linux和Mac OS等操作系统上运行。这使得用户可以在不同的平台上使用matplotlib进行数据可视化。
如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或添加下方VX名片(ID:xf982831907)
期待与您一起交流,共同探索AI的更多可能!
