欢迎来到汐汐的博客

比较与排序类可视化图像

        比较与排序类可视化图像是一种重要的数据可视化形式,主要用于展示不同数据系列或类别之间的差异、大小关系以及排序情况。通过使用折线图、柱状图、环形柱状图、子弹图、哑铃图、雷达图、平行坐标图、词云图等图表类型,可以直观地呈现出各项数据的对比结果和相对位置,帮助观众快速理解数据之间的关系和趋势,从而为决策和分析提供有力支持。

一、折线图

1、概念
        折线图是一种通过线条连接一系列数据点来展示数据变化趋势的可视化图表。它主要用于表示连续的数据序列,能够直观地反映出数据在不同时间点或不同条件下的变化情况,帮助人们快速理解数据的走势和规律。

2、特点

  • 趋势展示清晰:折线图能够直观地呈现数据的变化趋势,通过线条的上升、下降或平稳,可以清晰地看出数据的发展方向和变化规律。
  • 数据点连续:折线图适用于展示连续的数据序列,能够将各个数据点按照一定的顺序连接起来,形成一个整体的变化过程。
  • 多组数据对比:可以同时绘制多条折线,方便对不同组数据的变化趋势进行对比分析,有助于发现数据之间的差异和相关性。
  • 灵活性强:折线图可以根据需要进行定制,如调整线条的样式、颜色、标记点的形状等,以满足不同的可视化需求。

3、应用场景

  • 时间序列分析:如股票价格走势、气温变化趋势、销售额的月度变化等,通过折线图可以直观地展示数据随时间的变化情况。
  • 多组数据对比:比较不同城市的人口增长趋势、不同产品的市场占有率变化等,帮助分析各组数据之间的差异和联系。
  • 预算与实际对比:展示预算数据与实际支出数据的变化趋势,便于监控和分析财务状况。
  • 科学实验数据:呈现实验中各种参数随时间或其他条件的变化,有助于观察实验结果的稳定性和规律性。

4、实现过程代码如下

       使用 Matplotlib 库绘制了一个折线图,展示了北京、上海和广州三个城市在不同月份的平均气温变化趋势,并通过不同样式和颜色的线条区分各城市的数据,同时添加了标题、坐标轴标签、网格线和图例以增强图表的可读性。

 1 import matplotlib.pyplot as plt
 2 # 设置字体为支持中文的字体
 3 plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
 4 plt.rcParams['axes.unicode_minus'] = False  # 用于显示负号
 5 # 数据准备
 6 months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
 7 beijing = [2, 5, 12, 20, 26, 30, 32, 30, 24, 16, 8, 3]
 8 shanghai = [5, 8, 15, 22, 27, 31, 33, 31, 25, 19, 12, 7]
 9 guangzhou = [15, 18, 23, 28, 32, 35, 37, 35, 30, 25, 20, 17]
10 # 创建折线图
11 plt.figure(figsize=(12, 8))
12 # 绘制北京的折线
13 plt.plot(months, beijing, marker='o', linestyle='-', linewidth=2, color='red', label='北京')
14 # 绘制上海的折线
15 plt.plot(months, shanghai, marker='s', linestyle='--', linewidth=2, color='blue', label='上海')
16 # 绘制广州的折线
17 plt.plot(months, guangzhou, marker='^', linestyle='-.', linewidth=2, color='green', label='广州')
18 # 添加标题和标签
19 plt.title('不同城市月平均气温折线图', fontsize=16, fontweight='bold')
20 plt.xlabel('月份', fontsize=12)
21 plt.ylabel('温度(℃)', fontsize=12)
22 # 添加网格线
23 plt.grid(True, linestyle='--', alpha=0.7)
24 # 添加图例
25 plt.legend()
26 # 调整布局
27 plt.tight_layout()
28 # 显示图形
29 plt.show()

5、结果

 二、柱状图

1、概念

       柱状图是一种通过垂直或水平的矩形柱子来展示数据分布和比较的可视化图表。每个柱子代表一个类别或组,其高度或长度与对应的数据值成比例,能够直观地反映出不同类别之间的数值差异和分布情况。

2、特点

  • 直观清晰:通过柱子的高度或长度直观展示数据大小,易于理解。
  • 分类比较:适合进行不同类别或组之间的数据比较,能够快速识别差异。
  • 数据分布展示:可以清晰呈现数据在各个类别中的分布情况。
  • 灵活性高:支持垂直和水平两种形式,可适应不同的数据展示需求。
  • 可定制性强:可以根据需要调整柱子的颜色、宽度、间距等,以增强可视化效果。

3、应用场景

  • 销售数据分析:比较不同产品、不同地区的销售额。
  • 市场调研:展示不同品牌、不同市场的占有率。
  • 学术研究:呈现实验结果、问卷调查数据等。
  • 财务分析:比较不同项目的预算与实际支出。
  • 体育统计:展示运动员成绩、球队表现等。

4、实现过程代码如下

       这段代码使用 Matplotlib 库绘制了一个双组柱状图,比较了两组数据在五个类别中的数值差异,并通过添加标题、坐标轴标签、图例、数据标签和网格线等方式增强了图表的可读性和信息表达能力。

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
 4 plt.rcParams['axes.unicode_minus'] = False  # 用于显示负号
 5 categories = ['A', 'B', 'C', 'D', 'E']
 6 values1 = [23, 45, 34, 56, 28]
 7 values2 = [34, 28, 42, 39, 45]
 8 x = np.arange(len(categories))  # 类别的位置
 9 width = 0.35  # 柱状图的宽度
10 fig, ax = plt.subplots(figsize=(10, 6))
11 bars1 = ax.bar(x - width/2, values1, width, label='Group 1', color='skyblue')
12 bars2 = ax.bar(x + width/2, values2, width, label='Group 2', color='salmon')
13 ax.set_title('跨类别的两组比较', fontsize=14, fontweight='bold')
14 ax.set_xlabel('类别', fontsize=12)
15 ax.set_ylabel('数值', fontsize=12)
16 ax.set_xticks(x)
17 ax.set_xticklabels(categories)
18 ax.legend()
19 def add_labels(bars):
20     for bar in bars:
21         height = bar.get_height()
22         ax.annotate(f'{height}',
23                     xy=(bar.get_x() + bar.get_width() / 2, height),
24                     xytext=(0, 3),  # 3 points vertical offset
25                     textcoords="offset points",
26                     ha='center', va='bottom')
27 add_labels(bars1)
28 add_labels(bars2)
29 ax.grid(True, linestyle='--', alpha=0.7)
30 plt.tight_layout()
31 plt.show()

5、结果

三、环形柱状图

1、概念

        环形柱状图(Circular Bar Chart),也称为玉珏图,是一种将柱状图的柱子排列成环形的图表形式。它通过环形的排列方式展示不同类别或组别的数据,每个柱子的高度或长度与对应的数据值成比例,适用于展示带有周期性或循环性质的数据

2、特点

  • 环形排列:柱子沿着一个圆的周围排列,形成环形结构,能够在一个有限的空间内展示更多的类别。
  • 数据对比:适合进行多个分类间的数据对比,直观地展示不同类别之间的数值差异。
  • 视觉吸引力:独特的环形结构给人以更具吸引力和不一样的展示效果,尤其适合用于需要美观展示的场合。
  • 数值从内到外依次增加:环形柱状图的值刻度是环形的,数值从内到外依次增加,柱子越长代表数值越大。
  • 潜在的视觉误解:由于环形柱状图存在半价反馈效应,外侧的每个珏环会相对较长,可能会造成视觉上的误解,即使半径大的珏环的数值小于半径小的珏环

3、应用场景

  • 多分类数据对比:当需要比较多个分类或组别的数据时,环形柱状图能够清晰地展示不同类别之间的数值差异,如不同产品的销售量、不同地区的产值等。
  • 周期性数据展示:适用于展示具有周期性或循环性质的数据,如一天24小时内的活动模式、一年12个月的变化趋势等
  • 有限空间内的数据展示:在空间有限的情况下,环形柱状图能够有效地利用空间,展示更多的数据类别,避免传统柱状图因过宽或过长而影响可读性。
  • 基因组组装可视化:在基因组学研究中,用于显示基因组组装的结果,如将不同序列或染色体表示为环形柱状图的柱形,比较它们的大小和覆盖程度。
  • 功能注释和分类统计:用于展示不同功能类别或分类的相对数量或比例,如基因或蛋白质在不同功能或分类中的分布情况。

4、实现过程代码如下

        这段代码使用 Matplotlib 库绘制了一个环形柱状图,比较了两组数据在不同城市的销售情况。它通过设置中文字体和负号显示,准备了城市和销售数据,计算了每个城市在环形图中的角度位置和柱子宽度,创建了极坐标图并绘制了两组数据的柱状图,使用不同颜色映射和透明度区分数据组,并添加了数据值和城市名称标签。

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 # 设置中文字体和负号显示
 4 plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
 5 plt.rcParams['axes.unicode_minus'] = False  # 用于显示负号
 6 # 数据准备
 7 categories = ['北京', '上海', '广州', '深圳', '成都', '杭州', '武汉', '西安', '重庆', '南京']  # 增加城市数量
 8 values1 = [23, 45, 34, 56, 28, 39, 42, 35, 50, 47]  # Group 1 的销售数据
 9 values2 = [34, 28, 42, 39, 45, 32, 48, 37, 43, 51]  # Group 2 的销售数据
10 # 计算角度和宽度
11 theta = np.linspace(0, 2 * np.pi, len(categories), endpoint=False)  # 环形角度
12 radius = np.ones(len(categories))  # 半径
13 width = np.pi / len(categories) * 0.7  # 柱子的宽度,稍微调整避免重叠
14 # 创建极坐标图
15 fig, ax = plt.subplots(subplot_kw={'polar': True}, figsize=(14, 10))
16 # 绘制Group 1的柱状图
17 bars1 = ax.bar(theta, values1, width=width, bottom=0, label='Group 1',
18                color=plt.cm.BuGn(np.linspace(0.3, 0.7, len(categories))), alpha=0.8)
19 # 绘制Group 2的柱状图
20 bars2 = ax.bar(theta, values2, width=width, bottom=0, label='Group 2',
21                color=plt.cm.OrRd(np.linspace(0.3, 0.7, len(categories))), alpha=0.8)
22 # 添加数据标签
23 def add_labels(bars, theta, values, offset=5):
24     for bar, t, value in zip(bars, theta, values):
25         # 计算标签的位置
26         x = t + width / 2
27         y = value + offset  # 在柱子上方添加偏移
28         ax.text(x, y, f'{value}', ha='center', va='bottom', fontsize=9, fontweight='bold')
29 add_labels(bars1, theta, values1, offset=3)
30 add_labels(bars2, theta, values2, offset=3)
31 # 添加城市名称标签
32 for i, category in enumerate(categories):
33     # 计算每个类别标签的位置
34     x = theta[i] + width / 2
35     y = max(values1[i], values2[i]) + 8  # 将标签放在柱子高度的上方
36     ax.text(x, y, category, ha='center', va='bottom', fontsize=10, fontweight='bold')
37 # 设置标题
38 ax.set_title('不同城市的销售数据环形柱状图', fontsize=16, fontweight='bold', pad=20)
39 # 设置图例
40 ax.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1), fontsize=12, frameon=True,
41           framealpha=0.8, edgecolor='black', title='图例', title_fontsize=12)
42 # 设置网格线
43 ax.grid(True, linestyle='--', alpha=0.6)
44 # 调整布局
45 plt.tight_layout()
46 plt.show()

5、结果

四、子弹图

1、概念

       子弹图(Bullet Graph)是一种用于绩效评估和目标比较的图表,它结合了条形图和参考线的特点,旨在替代传统的仪表板图表(如仪表盘)。子弹图通过线性表达方式,在狭小的空间中展示丰富的数据信息,能够直观地展示实际值与目标值之间的对比,以及数据在不同区间的表现。

2、特点

  • 线性表达:子弹图采用线性布局,类似于子弹射出后带出的轨道,因此得名。这种布局使得数据在有限的空间内能够高效地展示。
  • 信息密度高:能够在小空间内传达大量信息,适合在仪表板或报告中紧凑地展示多个指标。
  • 直观清晰:通过条形图展示实际值,同时使用参考线标示目标值,便于快速比较。
  • 多功能性:适用于多种类型的数据和绩效评估,无论是销售目标、生产效率还是其他任何可以量化的指标。
  • 阶段性数据展示:通过添加合理的度量标尺可以显示更精确的阶段性数据信息,适用于展示带有周期性或阶段性的数据。

3、应用场景

  • 销售业绩展示:子弹图常用于展示销售业绩指标的目标值和实际值。通过比较长条的长度和位置,用户可以直观地了解销售业绩的完成情况和进展趋势,为销售团队提供决策和激励依据。
  • 项目管理:子弹图适用于展示项目进展和达成情况。通过比较子弹图中的长条,用户可以直观地了解项目指标的完成情况和进展趋势,及时调整项目计划和资源分配。
  • 绩效评估:子弹图可用于展示员工绩效指标的目标值和实际值。通过比较长条的长度和位置,用户可以直观地了解员工的绩效表现和进展情况,为绩效评估和奖励决策提供依据。
  • 目标跟踪:在目标跟踪(实际 vs 目标)的场景下,子弹图非常实用,能同时表现实际达成数值和与预期的对比。
  • 商业分析:子弹图可以用于比较不同产品或服务的性能,帮助做出更明智的决策。在股票市场分析中,子弹图可以用来展示股票价格的趋势和波动,帮助投资者更好地把握市场动态。

4、实现过程代码如下

        这段代码使用 Matplotlib 库绘制了一个子弹图,展示了实际值与目标值在不同指标上的对比。它通过设置中文字体和负号显示,准备了类别、实际值、目标值、最大值和最小值数据,绘制了性能区间背景条,并添加了目标值线和数据标签。

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
 4 plt.rcParams['axes.unicode_minus'] = False  # 用于显示负号
 5 categories = ['销售额', '利润', '客户满意度', '市场份额', '网站流量']
 6 values = [120, 85, 90, 65, 150]  # 实际值
 7 targets = [100, 90, 85, 70, 140]  # 目标值
 8 max_values = [150, 100, 100, 80, 200]  # 每个类别的最大值
 9 min_values = [50, 40, 40, 30, 100]  # 每个类别的最小值
10 fig, ax = plt.subplots(figsize=(12, 7))
11 for i in range(len(categories)):
12     # 绘制不同颜色的性能区间
13     ax.barh(y=i, width=max_values[i], height=0.4, color='lightgray', alpha=0.5, label='目标范围' if i == 0 else "")
14     ax.barh(y=i, width=targets[i], height=0.4, color='skyblue', alpha=0.5, label='目标值' if i == 0 else "")
15     ax.barh(y=i, width=min_values[i], height=0.4, color='lightcoral', alpha=0.5, label='最低范围' if i == 0 else "")
16 # 绘制实际值条
17 bars = ax.barh(y=np.arange(len(categories)), width=values, height=0.4, color='salmon', label='实际值')
18 # 添加目标值线
19 for i in range(len(categories)):
20     ax.axvline(x=targets[i], ymin=i/len(categories)-0.2, ymax=i/len(categories)+0.2, color='darkblue', linestyle='--')
21 # 设置标题和标签
22 ax.set_title('子弹图', fontsize=14, fontweight='bold')
23 ax.set_xlabel('数值', fontsize=12)
24 ax.set_yticks(np.arange(len(categories)))
25 ax.set_yticklabels(categories)
26 # 添加数据标签,调整标签位置以增加间隔
27 label_offset_actual = 0  # 实际值标签的偏移量
28 label_offset_target =36  # 目标值标签的偏移量
29 for i, (value, target) in enumerate(zip(values, targets)):
30     # 添加实际值标签
31     ax.text(value + label_offset_actual, i, f'实际: {value}', ha='left', va='center', fontsize=10)
32     # 添加目标值标签
33     ax.text(target + label_offset_target, i, f'目标: {target}', ha='left', va='center', fontsize=10)
34 # 反转y轴,使第一个类别在顶部
35 ax.invert_yaxis()
36 # 添加图例
37 handles, labels = ax.get_legend_handles_labels()
38 handles.extend([bars])
39 labels.extend(['实际值'])
40 ax.legend(handles, labels, loc='lower right')
41 # 调整布局
42 plt.tight_layout()
43 # 显示图形
44 plt.show()

5、结果

五、哑铃图

1、概念

       哑铃图(Dumbbell Chart)是一种通过连接两个数据点来展示数据差异的可视化图表。它由两个端点和中间的连线组成,形似哑铃,因此得名。哑铃图常用于比较两个时间点或两个组别之间的数据差异,能够直观地展示数据的变化范围和趋势。

2、特点

  • 直观对比:能够清晰地展示两个数据点之间的差异,便于比较数据的变化幅度
  • 简洁明了:利用最少的元素(两个点和一根线)呈现数据,易于理解
  • 空间高效:适用于狭窄的空间,能够紧凑地展示多组数据
  • 展示趋势:中间的连线可以表示数据的变化趋势或过渡
  • 灵活性强:可以结合其他图形元素(如气泡图、标签图)来丰富数据表达。

3、应用场景

  • 销售数据比较:比较不同产品在两个时间点的销售量变化
  • 时间序列分析:展示某一指标在两个时间点的变化范围和趋势。
  • 用户行为分析:比较不同用户群体在关键行为上的分布差异
  • 基因表达差异:在生物信息学中,比较两种条件下的基因表达水平。
  • 实验效果评估:展示实验组和对照组在某一指标上的差异

4、实现过程代码如下

       这段代码使用 Matplotlib 库绘制了一个哑铃图,展示了两组数据在不同城市的数值差异。它通过绘制连接两组数据点的线条和不同颜色的数据点,直观地呈现了数据的对比关系,并添加了数据标签、标题、坐标轴标签和图例以增强图表的可读性。

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 # 设置字体为支持中文的字体
 4 plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
 5 plt.rcParams['axes.unicode_minus'] = False  # 用于显示负号
 6 # 数据准备
 7 categories = ['北京', '上海', '广州', '深圳', '成都']
 8 values1 = [120, 185, 90, 65, 150]  # 第一组数据
 9 values2 = [100, 90, 85, 70, 140]  # 第二组数据
10 # 计算差值
11 differences = np.array(values1) - np.array(values2)
12 # 创建水平条形图
13 fig, ax = plt.subplots(figsize=(12, 7))
14 # 绘制哑铃图的线条
15 for i in range(len(categories)):
16     ax.plot([values1[i], values2[i]], [i, i], color='gray', alpha=0.7)
17 # 绘制数据点
18 scatter1 = ax.scatter(values1, np.arange(len(categories)), color='skyblue', s=100, label='起始', alpha=0.8)
19 scatter2 = ax.scatter(values2, np.arange(len(categories)), color='salmon', s=100, label='结束', alpha=0.8)
20 # 设置标题和标签
21 ax.set_title('哑铃图', fontsize=14, fontweight='bold')
22 ax.set_xlabel('数值', fontsize=12)
23 ax.set_yticks(np.arange(len(categories)))
24 ax.set_yticklabels(categories)
25 # 添加数据标签
26 for i, (v1, v2) in enumerate(zip(values1, values2)):
27     ax.text(v1 + 5, i, f'{v1}', ha='left', va='center', fontsize=10)
28     ax.text(v2 + 5, i, f'{v2}', ha='left', va='center', fontsize=10)
29 # 添加图例
30 ax.legend(handles=[scatter1, scatter2], loc='lower right')
31 # 调整布局
32 plt.tight_layout()
33 # 显示图形
34 plt.show()

5、结果

六、雷达图

1、概念

       雷达图(Radar Chart),也称为蜘蛛图(Spider Chart)或星形图(Star Chart),是一种用于展示多维数据的可视化图表。它通过多个轴来表示不同的变量,每个轴对应一个维度,数据点在各个轴上的位置通过连线连接形成一个多边形,从而直观地展示数据在各个维度上的分布和差异。

2、特点

  • 多维度展示:能够同时展示多个维度的数据,适合分析具有多个特征的对象或现象。
  • 直观比较:通过图形的形状和面积,可以直观地比较不同对象在各维度上的差异和相似性。
  • 整体评估:可以直观地看出某个对象在所有维度上的综合表现,便于进行整体评估。
  • 灵活定制:可以根据需要调整轴的顺序、刻度、颜色等,以适应不同的分析需求。
  • 数据模式识别:有助于发现数据中的模式、优势和劣势,例如识别出某个对象在某些维度上的突出表现或薄弱环节。

3、应用场景

  • 商业分析:用于评估企业的竞争力、市场定位等,通过多个维度(如销售额、市场份额、客户满意度等)进行综合分析。
  • 体育数据分析:展示运动员在不同技能或体能指标上的表现,帮助教练和运动员识别优势和需要改进的领域。
  • 教育评估:展示学生在不同学科或能力指标上的表现,为个性化教学和学习提供依据。
  • 人力资源管理:用于员工绩效评估,展示员工在不同能力维度上的表现,辅助制定培训和发展计划。
  • 产品研发:比较不同产品的特性或功能,帮助研发团队识别产品的优势和不足,指导产品改进和创新。
  • 医疗健康:展示患者在不同健康指标上的状况,辅助医生进行综合诊断和治疗方案制定。

4、实现过程代码如下

       这段代码使用 Matplotlib 库绘制了一个雷达图,比较了两组数据在六个生活方面的表现。它通过设置中文字体和负号显示,准备了类别和两组数据,计算了雷达图的角度并闭合数据,绘制了两组数据的线条和填充区域,设置了类别标签和标题,添加了网格线和图例,调整了布局以确保图表美观,最后展示了图表。

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 # 设置字体为支持中文的字体
 4 plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
 5 plt.rcParams['axes.unicode_minus'] = False  # 用于显示负号
 6 # 数据准备
 7 categories = ['运动时间(小时)', '阅读时间(小时)', '社交活动(次)', '饮食健康度(分)', '睡眠时间(小时)', '工作/学习时长(小时)']
 8 values1 = [10, 9, 8, 9, 8, 7]  # 第一组数据(例如:个人A)
 9 values2 = [8, 7, 9, 8, 9, 8]  # 第二组数据(例如:个人B)
10 # 计算角度
11 angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
12 # 闭合数据
13 values1 += values1[:1]
14 values2 += values2[:1]
15 angles += angles[:1]
16 # 创建雷达图
17 fig, ax = plt.subplots(figsize=(10, 8), subplot_kw=dict(polar=True))
18 # 绘制雷达图
19 ax.plot(angles, values1, color='skyblue', linewidth=2, label='个人A')
20 ax.fill(angles, values1, color='skyblue', alpha=0.2)
21 ax.plot(angles, values2, color='salmon', linewidth=2, label='个人B')
22 ax.fill(angles, values2, color='salmon', alpha=0.2)
23 # 设置类别标签
24 ax.set_xticks(angles[:-1])
25 ax.set_xticklabels(categories)
26 # 设置标题
27 ax.set_title('雷达图', fontsize=14, fontweight='bold')
28 # 添加网格线
29 ax.grid(True, linestyle='--', alpha=0.7)
30 # 添加图例
31 ax.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))
32 # 调整布局
33 plt.tight_layout()
34 # 显示图形
35 plt.show()

5、结果

七、平行坐标图

1、概念

       平行坐标图(Parallel Coordinates Plot)是一种用于可视化高维数据的图表类型。它通过将每个维度(特征)表示为一条垂直轴,并将数据点表示为连接这些轴的折线来展示数据。每条折线代表一个数据点在各个维度上的取值,通过观察这些折线的分布和交叉情况,可以发现数据中的模式、趋势和异常。

2、特点

  • 多维数据可视化:能够同时展示多个维度的数据,适合处理高维数据集。
  • 数据关系展示:可以直观地展示不同维度之间的关系和数据的分布情况。
  • 异常值检测:容易发现数据中的异常值或离群点,因为它们在图中会显得特别突出。
  • 数据密度和分布:通过线条的密集程度和交叉情况,可以了解数据的分布密度和维度之间的相关性。
  • 灵活的轴顺序调整:可以根据分析需求调整轴的顺序,以探索不同维度组合之间的关系。

3、应用场景

  • 高维数据分析:在处理具有多个变量或维度的数据集时,平行坐标图能够有效地展示数据的全貌,帮助分析师理解复杂的数据结构。
  • 市场细分和客户画像:通过分析客户在不同维度(如年龄、收入、消费频率等)上的分布,企业可以更好地进行市场细分和客户画像绘制。
  • 金融风险评估:金融机构可以使用平行坐标图来评估贷款申请人的风险,通过分析申请人在多个维度(如信用评分、收入、负债等)上的表现,快速识别高风险客户。
  • 质量控制和异常检测:在制造业中,平行坐标图可以用于监控产品质量,通过分析产品在多个质量指标上的表现,及时发现异常情况并采取措施。
  • 体育数据分析:教练和分析师可以利用平行坐标图来评估运动员的综合表现,通过分析运动员在不同技能和体能指标上的数据,制定个性化的训练计划。

4、实现过程代码如下

        这段代码使用 Matplotlib 库绘制了一个平行坐标图,比较了四个城市在六个生活质量指标上的表现。它通过设置中文字体和负号显示,准备了城市和指标数据,创建了平行坐标轴,绘制了每个城市的数据线并添加了标记,设置了类别标签和标题,添加了网格线和图例,调整了布局以确保图表美观,最后展示了图表。

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 # 设置字体为支持中文的字体
 4 plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
 5 plt.rcParams['axes.unicode_minus'] = False  # 用于显示负号
 6 # 数据准备
 7 categories = ['房价(万元/平米)', '交通便利性(分)', '教育质量(分)', '医疗资源(分)', '就业机会(分)', '生活成本(分)']
 8 beijing = [10, 9, 8, 9, 8, 7]  # 北京的数据
 9 shanghai = [8, 7, 9, 8, 9, 8]  # 上海的数据
10 guangzhou = [7, 8, 7, 9,9,9]  # 广州的数据
11 shenzhen = [7, 8, 7, 7, 7, 7]  # 深圳的数据
12 # 创建平行坐标图
13 fig, ax = plt.subplots(figsize=(12, 8))
14 # 绘制平行坐标轴
15 for i in range(len(categories)):
16     ax.axvline(x=i, ymin=0, ymax=1, color='gray', linestyle='--', alpha=0.7)
17 # 绘制数据线
18 ax.plot(np.arange(len(categories)), beijing, marker='o', color='red', linewidth=2, label='北京')
19 ax.plot(np.arange(len(categories)), shanghai, marker='o', color='blue', linewidth=2, label='上海')
20 ax.plot(np.arange(len(categories)), guangzhou, marker='o', color='green', linewidth=2, label='广州')
21 ax.plot(np.arange(len(categories)), shenzhen, marker='o', color='purple', linewidth=2, label='深圳')
22 # 设置类别标签
23 ax.set_xticks(np.arange(len(categories)))
24 ax.set_xticklabels(categories, fontsize=12)
25 # 设置标题
26 ax.set_title('城市生活质量平行坐标图', fontsize=14, fontweight='bold')
27 # 添加网格线
28 ax.grid(True, linestyle='--', alpha=0.7)
29 # 添加图例
30 ax.legend(loc='upper right')
31 # 调整布局
32 plt.tight_layout()
33 # 显示图形
34 plt.show()

5、结果

八、词云图

1、概念

       词云图(Word Cloud)是一种数据可视化形式,用于直观地展示文本数据中词汇的出现频率或重要性。它通过将文本中的词汇以不同大小、颜色和字体的词语排列成云状图形,使得高频出现的词汇以更大的字体和更突出的颜色显示,从而快速揭示文本中的关键主题和热点信息。

2、特点

  • 直观的视觉效果:通过字体大小和颜色的差异,直观地展示词汇的重要性或出现频率,使观众能够迅速识别出文本中的关键信息。
  • 数据驱动的布局:词云图中的词汇位置和排列方式通常基于数据特征自动生成,无需人工干预,确保了数据的客观呈现。
  • 高度可定制性:可以根据具体需求调整词云图的形状、颜色方案、字体样式等,以适应不同的应用场景和设计要求。
  • 适用于大量文本数据:能够将海量的文本信息浓缩成一个简洁的图形,便于在有限的空间内展示丰富的内容。
  • 易于理解和传播:无需复杂的图表解读知识,普通观众也能快速理解词云图所传达的信息,适合在社交媒体等渠道广泛传播。

3、应用场景

  • 社交媒体分析:通过生成社交媒体平台上的热门话题词云图,了解公众关注点和讨论热点,为舆情监测和市场营销提供依据。
  • 市场调研:分析客户反馈、调查问卷等文本数据,识别消费者关注的重点问题和需求,助力企业优化产品和服务。
  • 文本数据分析:在处理新闻报道、学术论文、文学作品等文本数据时,快速提取高频词汇,辅助进行主题挖掘、文本分类等研究工作。
  • 品牌声誉监测:从网络评论、论坛帖子等渠道收集关于品牌的文本信息,生成词云图以直观展示品牌在公众心目中的形象和关联词汇。
  • 教育领域:帮助学生直观地理解文学作品、历史文献等文本中的关键词汇和主题思想,增强学习效果和知识记忆。

4、实现过程代码如下

       这段代码使用 `wordcloud`、`jieba` 和 `matplotlib` 库生成一个词云图。它通过打开背景图片并提取其轮廓,设置词云的参数(如字体路径、背景颜色、轮廓颜色等),读取并分词文本文件,生成词云图,保存为图片文件,最后用 matplotlib 显示生成的词云图。

 1 import wordcloud
 2 import jieba
 3 import matplotlib.pyplot as plt
 4 import numpy as np
 5 from PIL import Image # 图像处理
 6 #打开背景图片
 7 pic = Image.open(r"C:\Users\zhao'yan'na\Desktop\1.png")
 8 # 提取图片的轮廓
 9 shape = np.array(pic)
10 # mask为图片背景,font_path为字体,若不设置可能乱码
11 wc = wordcloud.WordCloud(mask=shape, font_path="simkai.ttf", background_color="white", contour_color='red',contour_width=3,
12 max_font_size=100)
13 #读取要分词的文本文件
14 text = open(r'D:\数据可视化\比较\1.txt', "r", encoding='UTF-8').read()
15 #结巴分词
16 cut_text = jieba.cut(text)
17 result = " ".join(cut_text)
18 #生成词云图
19 wc.generate(result)
20 #保存词云图
21 wc.to_file("cloud.jpg")
22 # 以图片的形式显示词云
23 plt.imshow(wc, interpolation="bilinear")
24 # 不显示图像坐标系
25 plt.axis("off")
26 # 显示图像
27 plt.show()

5、结果

九、总结

        比较与排序类可视化图像通过直观展示数据差异、大小关系和排序情况,帮助观众快速理解数据间的联系与规律,为决策和分析提供有力支持。如下表所示:
 
图表类型概念特点应用场景
折线图 通过线条连接一系列数据点来展示数据变化趋势。 趋势展示清晰、数据点连续、多组数据对比、灵活性强。 时间序列分析、多组数据对比、预算与实际对比、科学实验数据。
柱状图 通过垂直或水平的矩形柱子来展示数据分布和比较。 直观清晰、分类比较、数据分布展示、灵活性高、可定制性强。 销售数据分析、市场调研、学术研究、财务分析、体育统计。
环形柱状图 将柱状图的柱子排列成环形的图表形式。 环形排列、数据对比、视觉吸引力、数值从内到外依次增加、潜在的视觉误解。 多分类数据对比、周期性数据展示、有限空间内的数据展示、基因组组装可视化、功能注释和分类统计。
子弹图 用于绩效评估和目标比较的图表,结合了条形图和参考线的特点。 线性表达、信息密度高、直观清晰、多功能性、阶段性数据展示。 销售业绩展示、项目管理、绩效评估、目标跟踪、商业分析。
哑铃图 通过连接两个数据点来展示数据差异的可视化图表。 直观对比、简洁明了、空间高效、展示趋势、灵活性强。 销售数据比较、时间序列分析、用户行为分析、基因表达差异、实验效果评估。
雷达图 用于展示多维数据的可视化图表,通过多个轴表示不同的变量。 多维度展示、直观比较、整体评估、灵活定制、数据模式识别。 商业分析、体育数据分析、教育评估、人力资源管理、产品研发、医疗健康。
平行坐标图 用于可视化高维数据的图表类型,通过将每个维度表示为一条垂直轴。 多维数据可视化、数据关系展示、异常值检测、数据密度和分布、灵活的轴顺序调整。 高维数据分析、市场细分和客户画像、金融风险评估、质量控制和异常检测、体育数据分析。
词云图 用于直观地展示文本数据中词汇的出现频率或重要性。 直观的视觉效果、数据驱动的布局、高度可定制性、适用于大量文本数据、易于理解和传播。 社交媒体分析、市场调研、文本数据分析、品牌声誉监测、教育领域。
 

 

posted @ 2025-03-21 21:43  识字三千  阅读(64)  评论(0)    收藏  举报