#数据可视化
#可视化图像
本文总结比较与排序类相关的可视化图像,包括阶梯图、折线图、柱状图、环形柱状图、南丁格尔玫瑰图、子弹图、哑铃图、雷达图、平行坐标图、词云图等。总结内容包括但不限于图表的特点、应用场景和使用某一工具的实现过程及结果。
一、阶梯图
1、概念
阶梯图是一种数据可视化图表,用于展示数据随时间或其他连续变量的变化趋势。它通过一系列水平线段来表示数据点,这些线段在垂直方向上依次排列,形成类似阶梯的形状。每个阶梯的高度表示该时间点或变量值的数据量,从而直观地展示数据的增减变化和趋势。阶梯图常用于金融、统计等领域,用于分析股价、成交量等时间序列数据。
2、特点
阶梯图的特点包括:
-
直观性:阶梯图通过阶梯状的线段直观地展示了数据随时间或其他连续变量的变化,使得观察者可以迅速捕捉到数据的增减趋势。
-
连续性:虽然阶梯图看起来是由离散的线段组成,但它实际上表示的是连续的数据变化,每个阶梯的起点和终点代表了数据在不同时间点或变量值上的连续过渡。
-
突出变化:阶梯图特别适合展示数据的突变或阶跃变化,因为每个阶梯的高度差异明显,容易引起观察者的注意。
-
简单易懂:阶梯图的构造简单,容易理解,不需要复杂的解释即可传达信息。
-
比较性:多个阶梯图可以并排展示,便于比较不同数据系列之间的变化和差异。
-
适用性:阶梯图适用于展示时间序列数据,如股票价格、交易量等,也适用于展示其他类型的数据,只要这些数据可以表示为随某个连续变量变化的序列。
-
灵活性:阶梯图可以水平或垂直展示,可以根据需要调整阶梯的宽度、颜色和样式,以适应不同的展示需求和审美偏好。
-
信息密度:阶梯图可以在有限的空间内展示大量的数据点,具有较高的信息密度。
-
易于标注:在阶梯图上标注特定数据点或事件较为容易,有助于提供额外的信息或解释。
-
局限性:阶梯图可能不适合展示过于复杂或高频的数据变化,因为过多的阶梯可能会使图表显得杂乱无章,难以解读。
3、应用场景
阶梯图在多个领域都有广泛的应用,以下是一些典型的应用场景:
-
金融分析:
- 展示股票、债券、期货等金融产品的价格变动。
- 显示利率、汇率等金融指标的历史走势。
-
经济数据展示:
- 展示GDP、通货膨胀率、失业率等宏观经济指标的季度或年度变化。
- 分析消费支出、投资额等经济活动的趋势。
-
生产与运营:
- 监控生产过程中的产量、质量指标或设备运行状态的变化。
- 分析供应链中的库存水平、物流成本等变量的变动。
-
科学研究:
- 展示实验数据中随时间或实验条件变化的物理量、化学浓度等。
- 分析生物种群数量、环境指标等随季节或年份的变化。
-
工程项目管理:
- 显示项目进度、成本支出、资源利用等关键绩效指标的变化。
- 追踪工程里程碑的完成情况。
-
医疗健康:
- 监测患者生命体征(如心率、血压)随时间的变化。
- 分析疾病发病率、死亡率等公共卫生数据的变化趋势。
-
能源管理:
- 展示电力、燃气等能源消耗量随时间或季节的变化。
- 分析可再生能源发电量(如太阳能、风能)的波动。
-
环境监测:
- 显示空气质量指数、水质指标等环境参数的变化。
- 追踪污染物排放量、温室气体浓度等环境数据。
-
市场营销:
- 分析产品销量、市场份额、广告支出等市场指标的变化。
- 展示消费者行为、品牌知名度等市场调研数据的变化。
-
教育与学术研究:
- 展示学生成绩、出勤率等教育指标的变化。
- 分析学术论文发表量、引用次数等学术指标的趋势。
-
体育数据分析:
- 显示运动员成绩、训练量等体育指标的变化。
- 分析比赛中的得分、犯规次数等统计数据。
-
信息技术与网络监控:
- 监控网络流量、服务器负载等IT基础设施的性能指标。
- 分析软件版本更新、用户活跃度等应用层面的数据变化。
在这些场景中,阶梯图能够清晰地展示数据的变化趋势和突变点,帮助分析师、管理者、研究人员和其他利益相关者快速理解复杂的数据集,并作出基于数据的决策。
4、案例实现
(1)导入库:
import matplotlib.pyplot as plt
import numpy as np
matplotlib.pyplot
:用于绘图。numpy
:用于数值计算。
(2)定义数据和分类:
values = [10, 20, 15, 25, 30]
categories = ['分类A', '分类B', '分类C', '分类D', '分类E']
values
:每个分类的数据值。categories
:分类的标签。
(3)创建阶梯图的边缘数组:
edges = np.arange(len(values) + 1)
edges
:用于阶梯图的边缘数组,比values
多一个元素。
(4)设置中文显示:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
- 设置字体为
SimHei
,以支持中文显示。 - 设置
axes.unicode_minus
为False
,以正常显示负号。
(5)生成阶梯图:
plt.stairs(values, edges, fill=True, edgecolor='black', color='skyblue', alpha=0.7)
plt.stairs
:绘制阶梯图。fill=True
:填充阶梯图。edgecolor='black'
:设置边缘颜色为黑色。color='skyblue'
:设置填充颜色为天蓝色。alpha=0.7
:设置透明度为0.7。
(6)设置横轴标签:
plt.xticks(edges[:-1], categories)
(7)添加标题和图例:
plt.title('分类数据阶梯图')
plt.legend(['数据值'])
(8)设置网格线:
plt.grid(True, which='both', linestyle='--', linewidth=0.5)
plt.grid
:显示网格线。which='both'
:同时显示主网格线和次网格线。linestyle='--'
:设置网格线为虚线。linewidth=0.5
:设置网格线宽度。
(9)优化布局:
plt.tight_layout()
(10)增加图表尺寸:
plt.figure(figsize=(10, 6))
(11)显示图表:
plt.show()
二、折线图
1、概念
折线图是一种常用的统计图表,通过一系列数据点在坐标轴上用直线段连接而成,用于展示数据的变化趋势和关系。它通常用于表示随时间变化的数据,但也可以用于显示不同类别之间的比较。在折线图中,横轴(X轴)通常表示时间或类别,纵轴(Y轴)表示数值。每个数据点代表一个特定时间或类别的数值,通过连接这些点,可以直观地看到数据的上升、下降或稳定趋势。折线图简洁明了,易于理解,是数据分析和报告中常用的可视化工具。
2、特点
-
直观性:折线图能够直观地显示数据随时间或其他连续变量的变化趋势。
-
连续性:折线图通过线条将各个数据点连接起来,强调数据的连续变化。
-
趋势表现:特别适合用于展示数据的上升、下降或波动趋势。
-
多系列比较:可以在同一张图表中绘制多个系列的数据,便于比较不同系列之间的差异。
-
简单易懂:折线图的构造相对简单,大多数人都能够快速理解其表达的信息。
-
灵活性:可以通过调整线条的样式、颜色和粗细来区分不同的数据系列。
-
标注方便:可以在图表上方便地标注关键数据点、最高点、最低点等。
-
预测性:有时可以根据现有的折线趋势对未来数据进行简单的预测。
-
局限性:对于大量数据或复杂的数据关系,折线图可能会显得杂乱无章,不够清晰。
-
依赖坐标轴:折线图的有效性很大程度上依赖于坐标轴的设置,包括刻度、范围和标签。
折线图常用于展示时间序列数据、科学实验结果、经济指标变化等场景。在选择使用折线图时,需要考虑数据的特点和展示目的,以确保图表能够有效地传达信息。
3、类型
折线图有多种类型,每种类型都适用于不同的数据展示需求。以下是一些常见的折线图类型:
-
简单折线图:
- 只有一个数据系列,用于展示单一变量随时间或其他连续变量的变化。
-
多系列折线图:
- 包含多个数据系列,用于比较不同变量之间的变化趋势。
-
堆叠折线图:
- 各数据系列的值在图表中是堆叠的,用于显示每个系列的总和以及各个系列的贡献。
-
百分比堆叠折线图:
- 类似于堆叠折线图,但显示的是每个系列占总和的百分比。
-
面积折线图:
- 折线与坐标轴之间的区域被填充颜色,强调数量的大小和变化趋势。
-
平滑折线图:
- 数据点之间通过平滑曲线连接,而不是直线,用于展示更平滑的变化趋势。
-
阶梯折线图:
- 数据点之间通过水平线和垂直线连接,形成阶梯状,用于展示在特定时间点上的变化。
-
填充折线图:
- 类似于面积折线图,但可以用于多系列数据,每个系列的下方区域被填充不同的颜色。
-
双向折线图:
- 用于展示既有正值又有负值的数据,通常有两个坐标轴,一个在上方,一个在下方。
-
对数折线图:
- 使用对数坐标轴,用于展示数据在不同数量级上的变化。
-
时间序列折线图:
- 专门用于展示时间序列数据,通常横轴为时间。
-
组合折线图:
- 结合其他图表类型,如柱状图或散点图,以提供更丰富的信息。
-
动态折线图:
- 可以动态展示数据的变化,常用于交互式数据可视化。
-
极坐标折线图:
- 使用极坐标系统绘制,适用于展示周期性或圆形分布的数据。
选择哪种类型的折线图取决于数据的特点、分析目的以及想要传达的信息。不同的折线图类型可以突出数据的不同方面,帮助观众更好地理解数据。
4、案例实现
以时间序列折线图为例。
(1)导入库:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.pyplot
用于绘图。pandas
用于处理时间序列数据。numpy
用于生成随机数据
(2)设置中文显示:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
- 设置matplotlib使用SimHei字体显示中文。
- 设置负号正常显示。
(3)创建示例时间序列数据:
dates = pd.date_range('2023-02-17', periods=30)
values = np.random.randn(30).cumsum() # 生成30个随机数并累加,模拟时间序列数据
pd.date_range
创建一个日期范围。np.random.randn(30).cumsum()
生成30个随机数并累加,模拟时间序列数据。
(4)创建DataFrame:
df = pd.DataFrame({'日期': dates, '值': values})
df.set_index('日期', inplace=True)
- 使用pandas的DataFrame存储日期和对应的值。
- 将日期列设置为索引。
(5)创建折线图:
plt.figure(figsize=(10, 6)) # 设置图表尺寸
plt.plot(df.index, df['值'], marker='o') # marker'o'表示在数据点上标记圆点
plt.figure(figsize=(10, 6))
设置图表的尺寸。plt.plot
绘制折线图,marker='o'
表示在数据点上标记圆点。
(6)添加标题和轴标签:
plt.title('时间序列折线图示例')
plt.xlabel('日期')
plt.ylabel('值')
plt.title
添加图表标题。plt.xlabel
和plt.ylabel
添加轴标签。
(7)显示图例:
plt.legend(['数据系列'])
(8)显示网格:
plt.grid(True)
(9)优化布局:
plt.tight_layout()
(10)显示图表:
plt.show()
生成的时间序列折线图,其中横坐标是日期,纵坐标是模拟的数据值,并且所有的中文文本都使用SimHei字体显示。
三、柱状图
1、概念
柱状图是一种常用的数据可视化图表,通过垂直或水平的柱子来表示不同类别的数据值,柱子的高度或长度与数据值成正比,从而直观地展示各类别之间的比较关系和数据分布特征。
2、特点
-
直观性:柱状图通过垂直或水平的柱子直观地展示了不同类别的数据大小,使得观众可以快速比较不同类别的数据。
-
比较性:柱状图特别适合用于比较不同类别或不同时间段的数据,因为柱子的高度或长度直接反映了数值的大小。
-
类别性:柱状图通常用于显示分类数据,每个柱子代表一个类别,类别的名称可以放在柱子的下方或旁边。
-
灵活性:柱状图可以很容易地通过改变柱子的颜色、宽度、间距等属性来适应不同的展示需求。
-
易于理解:柱状图的阅读和理解相对简单,即使是对数据可视化不太熟悉的观众也能快速抓住图表的主要信息。
-
局限性:当类别数量过多或柱子过于密集时,柱状图可能会变得拥挤,难以清晰展示每个类别的数据。
-
适用性:柱状图适用于展示离散的数据点,不适合展示连续数据或数据的变化趋势(折线图更适合用于展示趋势)。
-
可扩展性:柱状图可以扩展为堆叠柱状图、分组柱状图等,以展示更复杂的数据关系。
-
标注方便:在柱状图上标注具体数值或百分比等额外信息相对容易,有助于提供更详细的数据解读。
-
视觉冲击力:通过合理的设计,柱状图可以产生较强的视觉冲击力,有效吸引观众的注意力。
在实际应用中,根据数据的特点和展示目的,可以选择合适的柱状图类型来进行数据可视化。
3、应用场景
-
销售数据展示:
- 比较不同产品、不同地区或不同时间的销售业绩。
- 展示 月销售、季度销售或年销售数据。
-
市场调研:
- 展示不同品牌的市场份额。
- 比较消费者对不同产品的偏好程度。
-
财务报告:
- 展示公司的收入、支出、利润等财务指标。
- 比较不同部门的预算执行情况。
-
人口统计分析:
- 展示不同年龄段、性别、地区的人口数量。
- 比较不同教育水平或职业的人口分布。
-
教育成绩分析:
- 展示不同班级、学科或学生的考试成绩。
- 比较不同教学方法的成效。
-
生产效率分析:
- 展示不同生产线或工厂的生产量。
- 比较不同时间段的生产效率。
-
网站流量分析:
- 展示不同页面的访问量、点击率等指标。
- 比较不同营销活动的效果。
-
客户满意度调查:
- 展示不同产品或服务的客户满意度评分。
- 比较不同客户群体的反馈。
-
资源分配:
- 展示不同项目或部门的资源分配情况。
- 比较资源利用效率。
-
环境数据监测:
- 展示不同地区或时间的污染水平、温度、降水量等环境数据。
- 比较不同环境指标的变化趋势。
-
体育成绩展示:
- 展示不同运动员或团队的比赛成绩。
- 比较不同赛季或比赛的成绩变化。
-
社会调查结果:
- 展示不同社会问题或现象的调查结果。
- 比较不同群体或地区的差异。
柱状图通过其直观性和比较性,能够帮助用户快速理解数据,发现数据中的模式和趋势,从而作出更明智的决策。在选择使用柱状图时,应根据数据的特点和展示目的来设计合适的图表。
4、案例实现
1、普通柱状图
使用matplotlib库来实现一个复杂的柱状图。
(1)导入必要的库:
import matplotlib.pyplot as plt
import numpy as np
这里导入了Matplotlib的pyplot模块,用于绘图,以及NumPy库,用于数值操作。
(2)定义数据:
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values1 = [23, 45, 56, 78]
values2 = [30, 40, 50, 60]
values3 = [50, 60, 70, 80]
这里定义了四种类别和三组数据,每组数据对应一个类别。
(3)设置柱子的宽度和位置:
bar_width = 0.25
index = np.arange(len(categories))
bar_width
定义了柱子的宽度,index
是一个NumPy数组,表示每个柱子的中心位置。
(4)创建柱状图:
plt.bar(index, values1, bar_width, label='Group 1', color='b')
plt.bar(index + bar_width, values2, bar_width, label='Group 2', color='r')
plt.bar(index + 2 * bar_width, values3, bar_width, label='Group 3', color='g')
这里使用了plt.bar()
函数三次,分别绘制三组数据。index + bar_width
和index + 2 * bar_width
用于将每组数据的柱子位置错开,避免重叠。label
参数用于设置图例的标签,color
参数用于设置柱子的颜色。
(5)添加图例:
plt.legend()
plt.legend()
函数用于添加图例,展示每组数据的标签。
(6)添加标题和轴标签:
plt.title('Complex Bar Chart Example')
plt.xlabel('Categories')
plt.ylabel('Values')
这些函数分别用于设置图表的标题、X轴标签和Y轴标签。
(7)设置X轴刻度标签:
plt.xticks(index + bar_width, categories)
plt.xticks()
函数用于设置X轴的刻度标签,index + bar_width
表示刻度标签的位置,categories
是标签的内容。
(8)调整布局并显示图表:
plt.tight_layout()
plt.show()
plt.tight_layout()
自动调整子图参数,使之填充整个图像区域,避免标签等元素被截断。plt.show()
函数用于显示图表。
通过这些步骤,实现了一个包含多组数据、自定义颜色、图例、标题和轴标签的复杂柱状图。
2、3D柱状图
(1)导入库:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
matplotlib.pyplot
用于绘图。mpl_toolkits.mplot3d
提供了3D图形的功能。numpy
用于数值计算。
(2)定义示例数据:
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values1 = [3, 2, 5, 7]
values2 = [4, 6, 1, 3]
values3 = [1, 3, 4, 2]
index = np.arange(len(categories))
barwidth = 0.2
categories
定义了类别的标签。values1
,values2
,values3
分别定义了三组数据的值。index
生成一个与类别数量相等的数组,用于定位柱状图的位置。barwidth
定义了柱状图的宽度。
(3)创建3D图形的figure和子图:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
fig
是整个图形的容器。ax
是3D子图,用于绘制3D图形。
(4)创建3D柱状图:
for i in range(len(index)):
ax.bar3d(index[i], 0, 0, barwidth, 1, values1[i], color='b', alpha=0.7)
ax.bar3d(index[i] + barwidth, 0, 0, barwidth, 1, values2[i], color='r', alpha=0.7)
ax.bar3d(index[i] + 2 * barwidth, 0, 0, barwidth, 1, values3[i], color='g', alpha=0.7)
- 使用
for
循环遍历每个类别,为每个类别绘制三组数据的柱状图。 ax.bar3d
函数用于绘制3D柱状图,参数包括柱子的位置(x, y, z)、宽度、深度、高度、颜色和透明度。
(5)添加图例:
ax.legend(['Group 1', 'Group 2', 'Group 3'])
ax.legend
函数添加图例,用于区分不同的数据系列。
(6)添加标题和轴标签:
ax.set_title('3D Bar Chart Example')
ax.set_xlabel('Categories')
ax.set_ylabel('Groups')
ax.set_zlabel('Values')
ax.set_title
设置图表的标题。ax.set_xlabel
,ax.set_ylabel
,ax.set_zlabel
分别设置X轴、Y轴和Z轴的标签。
(7)设置X轴刻度标签:
ax.set_xticks(index + barwidth)
ax.set_xticklabels(categories)
ax.set_xticks
设置X轴的刻度位置。ax.set_xticklabels
设置X轴的刻度标签。
(8)显示图表:
plt.show()
生成的3D柱状图,其中每个类别下有三组不同颜色的柱子,分别代表不同的数据系列。图例、标题和轴标签都使用中文显示。
四、环形柱状图
1、概念
环形柱状图是一种特殊的数据可视化图表,它结合了柱状图和环形图的特性。在这种图表中,数据类别以环形排列,而每个类别的数据则通过径向延伸的柱子来表示。这种设计使得环形柱状图能够在有限的空间内展示多个类别的数据比较,同时保持视觉上的清晰和美观。环形柱状图特别适用于展示周期性数据或类别之间存在自然顺序的数据集,如时间序列数据或角度分布数据。通过环形布局,它可以有效地利用空间,并提供一种新颖且直观的方式来观察数据分布和比较不同类别的数值。
2、特点
-
环形布局:与传统的柱状图不同,环形柱状图的柱子是围绕一个中心点呈环形排列的。这种布局使得图表在展示时更具视觉冲击力,同时也节省了空间。
-
多维度展示:环形柱状图可以同时展示多个维度的数据。通过不同的环形层或颜色区分,可以清晰地表示不同类别或时间段的数据。
-
比较直观:由于柱子是环形排列的,因此可以很容易地比较不同位置或角度的柱子高度,从而直观地看出数据之间的差异。
-
动态效果:环形柱状图通常支持动态展示,如柱子的增长动画、旋转效果等,使得数据展示更加生动有趣。
-
信息密集:环形柱状图可以在有限的空间内展示大量的数据信息,特别适合用于展示复杂或大量的数据集。
-
定制性强:环形柱状图可以根据需求进行定制,如调整环形的大小、柱子的宽度、颜色等,以适应不同的展示需求。
-
适用场景广泛:环形柱状图适用于多种数据展示场景,如市场份额、人口分布、时间序列数据等。
-
易读性有限:尽管环形柱状图具有很多优点,但其易读性可能受到一定限制。特别是在柱子较多或环形层次复杂时,读者可能需要花费更多时间来理解数据。
总的来说,环形柱状图是一种独特且实用的数据可视化工具,但在使用时需要根据具体的数据和展示需求来选择是否适用。
3、应用场景
-
周期性数据展示:
- 时间序列数据:如每小时、每日或每月的销售数据、网站访问量等,环形布局可以自然地表示时间的循环性。
- 季节性变化:展示一年中各个月份或季节的数据变化,如气温、降水量、旅游人数等。
-
多类别比较:
- 产品销售:比较不同产品或产品线的销售情况。
- 市场调研:展示不同品牌、地区或消费群体的偏好度。
-
占比分析:
- 预算分配:展示不同部门或项目的预算占比。
- 人口统计:展示不同年龄段、性别或职业在总人口中的占比。
-
空间受限的展示:
- 报告和简报:在有限的空间内展示多个数据点。
- 信息图表:用于新闻文章、社交媒体中的信息图表,吸引读者注意力。
-
强调数据循环或连续性:
- 生产流程:展示不同生产阶段的时间或成本消耗。
- 生命周期分析:展示产品从生产到废弃的各个阶段。
-
交互式数据探索:
- 数据可视化工具:在交互式仪表板或数据探索工具中,允许用户旋转、缩放环形柱状图以探索数据。
- 教育培训:用于教学演示,帮助学生理解复杂的数据关系。
-
美观和创意展示:
- 艺术和设计:在艺术作品或设计展示中,使用环形柱状图作为视觉元素。
- 营销材料:在广告、宣传册等营销材料中,以独特的方式展示数据。
-
多维度数据展示:
- 复合数据集:同时展示多个相关数据集,如不同地区的销售数据和市场份额。
- 层次结构数据:展示具有层级关系的数据,如公司各部门及其子部门的绩效。
-
实时数据监控:
- 监控系统:用于实时监控系统中,如服务器性能、网络流量等,环形布局便于快速识别异常。
-
地理数据展示:
- 区域比较:比较不同地理区域的数据,如各国GDP、人口密度等。
在选择使用环形柱状图时,需要考虑数据的特点、观众的解读能力以及展示的目的。虽然环形柱状图在视觉上具有吸引力,但也要确保它能够有效地传达数据信息,避免过于复杂或难以理解的设计。
4、案例实现
(1)导入库:
import matplotlib.pyplot as plt
import numpy as np
matplotlib.pyplot
用于绘图。numpy
用于数值计算。
(2)数据准备:
keywords = ["人工智能技术突破", "新能源汽车补贴政策", ..., "数字人民币试点"]
word_freq = [1580, 1420, ..., 850] # 词频数据
categories = ["科技", "政策", ..., "金融"] # 话题分类
keywords
列表包含要展示的关键词。word_freq
列表包含对应关键词的词频。categories
列表包含每个关键词的话题分类。
(3)可视化配置:
plt.rcParams['font.family'] = 'SimHei' # 中文字体支持
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
(4)极坐标计算:
N = len(keywords)
theta = np.linspace(0, 2*np.pi, N, endpoint=False)
width = 2*np.pi / N * 0.85
max_freq = max(word_freq)
N
是关键词的数量。theta
是每个柱子的角度位置。width
是柱子的宽度。max_freq
是最大词频,用于后续的标注。
(5)创建画布:
fig = plt.figure(figsize=(13, 13), facecolor='#f0f4f7')
ax = fig.add_subplot(111, polar=True)
ax.set_facecolor('#ffffff') # 设置白色背景
- 创建一个画布和极坐标子图。
(6)绘制柱状图:
bars = ax.bar(theta, word_freq, width=width, linewidth=1, edgecolor='white')
- 使用极坐标绘制柱状图。
(7)配色方案:
category_colors = {
"科技": "#4e79a7",
"政策": "#59a14f",
...
"金融": "#edc948"
}
for bar, category in zip(bars, categories):
bar.set_facecolor(category_colors[category])
(8)标签优化:
def wrap_text(text, max_len=6):
return '\n'.join([text[i:i+max_len] for i in range(0, len(text), max_len)])
ax.set_xticks(theta + width/2)
ax.set_xticklabels([wrap_text(kw) for kw in keywords],
fontsize=10,
color='#2d3436',
verticalalignment='center')
for label, angle in zip(ax.get_xticklabels(), np.degrees(theta + width/2)):
label.set_rotation(angle - 90 if angle < 270 else angle - 450)
label.set_rotation_mode("anchor")
wrap_text
函数用于将长文本标签换行。- 设置柱子的标签,并调整旋转角度以适应环形布局。
(9)数据标注:
for angle, freq in zip(theta, word_freq):
ax.text(angle + width/2,
freq + 100,
f'{freq}次',
ha='center',
va='center',
fontsize=9,
rotation=np.degrees(angle + width/2) % 360 - 90,
color='#2d3436')
(10)中心图例:
for category, color in category_colors.items():
ax.plot([], [],
's',
color=color,
label=category,
markersize=12)
ax.legend(bbox_to_anchor=(0.85, 0.12),
frameon=False,
title='话题分类',
title_fontsize=12)
(11)装饰元素:
for t in theta:
ax.plot([t, t], [0, max_freq+200],
color='#dfe6e9',
linewidth=0.5,
alpha=0.6,
zorder=0)
ax.text(0, 0,
'热搜话题\n词频分析',
ha='center',
va='center',
fontsize=18,
color='#636e72')
- 添加从中心向外辐射的线条。
- 添加中心标题。
(12)输出设置:
plt.title("社交媒体实时热点分析",
fontsize=20,
pad=100,
color='#2d3436')
plt.tight_layout()
plt.savefig('word_freq_circular.png', dpi=300, bbox_inches='tight')
plt.show()
- 设置整个图表的标题。
- 调用
tight_layout
自动调整子图参数。 - 保存图表为PNG文件。
- 显示图表。
通过详细的配置和绘图步骤,创建了一个功能齐全、视觉上吸引人的环形柱状图,有效地展示了关键词的词频和分类信息。
五、南丁格尔玫瑰图
1、概念
南丁格尔玫瑰图,由英国护士弗洛伦斯·南丁格尔发明,是一种采用极坐标系统的统计图表。图中各数据类别以固定角度的扇形表示,扇形半径长度代表数据大小,从而直观展示各部分与整体的关系,特别适用于强调数据的相对比例和比较分析。
2、特点
-
极坐标系统:使用极坐标来表示数据,而不是传统的直角坐标系。
-
扇形表示:每个数据类别由一个扇形表示,扇形的固定角度通常相等。
-
半径长度:扇形的半径长度代表数据的大小,半径越长,表示的数据值越大。
-
直观比较:通过扇形的大小直观地比较不同类别的数据大小。
-
强调比例:特别强调各部分与整体的比例关系,易于观察每个部分在整体中的占比。
-
视觉冲击:由于扇形的面积随半径的平方增长,因此较大的数据会在视觉上产生更强的冲击力。
-
多维度展示:可以同时展示多个维度的数据,比如通过不同颜色区分不同类别。
-
历史背景:由弗洛伦斯·南丁格尔发明,用于直观展示军事医院病人的死亡原因,对改进医疗条件起到了重要作用。
-
易于理解:对于非专业观众来说,玫瑰图比复杂的统计表格更易于理解和记忆。
-
灵活性:可以通过调整扇形的角度、颜色和排列方式来适应不同的数据展示需求。
南丁格尔玫瑰图在展示周期性数据、比例分布或者比较多个类别的数据大小时非常有效。然而,它也可能因为扇形面积的直观误导而需要谨慎解释。
3、应用场景
-
公共卫生与医疗:
- 展示疾病发病率、死亡率及其原因分布。
- 分析医院患者流量、病床使用率等。
-
商业与市场分析:
- 显示不同产品或服务的市场份额。
- 分析消费者行为,如购买频率、偏好等。
-
社会调查与研究:
- 展示人口统计特征,如年龄、性别、职业分布。
- 分析社会现象,如犯罪率、教育水平等。
-
环境与气候科学:
- 展示气候变化数据,如温度变化、降水量分布。
- 分析环境污染源的贡献比例。
-
教育与学术研究:
- 展示学术研究的主题分布、论文发表量等。
- 分析学生成绩分布、课程选择情况等。
-
金融与经济:
- 展示投资组合的资产配置比例。
- 分析经济指标,如GDP构成、行业贡献等。
-
交通与物流:
- 展示交通流量、事故类型分布。
- 分析物流运输中的货物类型、运输方式比例。
-
媒体与通信:
- 展示新闻话题的热度、关注度分布。
- 分析社交媒体上的话题趋势、用户活跃度等。
-
政治与政策分析:
- 展示选举结果、政党支持率分布。
- 分析政策影响的分布情况,如财政支出分配等。
-
时间序列数据:
- 展示周期性数据,如季节性变化、每日或每周的活动模式。
南丁格尔玫瑰图在需要强调部分与整体关系、比较多个类别的数据大小时特别有用。然而,由于其可能引起的视觉误导(如面积与半径的非线性关系),在使用时需要谨慎解释数据。
4、案例实现
(1)导入库:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
(2)定义示例数据:
categories = ['分类A', '分类B', '分类C', '分类D', '分类E']
values = [10, 20, 30, 40, 50]
(3)创建极坐标图:
fig, ax = plt.subplots(subplot_kw=dict(polar=True))
(4)计算每个扇区的角度:
theta = np.linspace(0.0, 2 * np.pi, len(values), endpoint=False).tolist()
(5)闭合图形(将第一个添加到末尾以闭合图形):
values += values[:1]
theta += theta[:1]
(6)绘制南丁格尔玫瑰图:
ax.fill(theta, values, 'b', alpha=0.1)
ax.plot(theta, values, 'b', linewidth=2)
(7)设置类别标签:
ax.set_xticks(theta[:-1])
ax.set_xticklabels(categories, fontproperties=simhei_font)
(8)设置标题:
ax.set_title('南丁格尔玫瑰图示例', va='bottom', fontsize=15, fontproperties=simhei_font)
(9)显示图形:
plt.show()
六、子弹图(象柱形图)
1、概念
子弹图是一种高效的数据可视化工具,由斯蒂芬·菲尤尔设计,用于展示单个数据点与一个或多个目标值之间的比较。它结合了条形图和目标标记,清晰地展示了当前性能水平与预设目标的对比,适用于在有限空间内传达丰富的数据信息。子弹图通常包括主轴显示当前值、比较标记表示目标值,以及可选的定性范围来指示性能等级,是一种直观、简洁且信息量大的图表类型。
2、特点
-
简洁性:子弹图设计简洁,能够在有限的空间内展示关键信息,避免过多的视觉元素干扰。
-
对比性强:通过将实际数据与目标值、比较标记等并置,子弹图能够直观地展示出性能与目标之间的差距。
-
定性范围:子弹图通常包含定性范围,这些颜色或阴影区域表示不同的性能等级,如差、中等、良好等。
-
灵活性:可以适应多种数据类型和比较场景,适用于展示单一指标或多指标的性能。
-
易读性:由于设计简单,观众可以快速理解图表所传达的信息。
-
目标导向:子弹图强调与目标的对比,适合用于目标管理、绩效评估等场景。
-
可定制性:可以根据具体需求调整图表的样式、颜色、标记等,以适应不同的展示需求。
-
空间效率:子弹图在横向或纵向上都可以紧凑地排列,适合在报告或仪表板中展示多个指标。
-
直观性:通过视觉上的长短、颜色深浅等直观元素,快速传达数据的相对性能。
-
适用性广:适用于商业、金融、运营等多种领域,用于监控关键绩效指标(KPI)。
子弹图的这些特点使其成为数据可视化中一种强大而灵活的工具,特别适用于需要快速比较实际性能与预设目标的场景。
3、应用场景
子弹图的应用场景非常广泛,几乎任何需要对比实际表现与预定目标的领域都可以使用子弹图。以下是一些典型的应用场景:
-
商业绩效评估:
- 用于展示公司的销售额、利润率等关键绩效指标(KPI)与年度目标的对比。
- 监控不同部门或产品的绩效,识别超出或未达目标的领域。
-
财务分析:
- 展示预算执行情况,如实际支出与预算的对比。
- 分析投资回报率(ROI)、资产负债率等财务指标与行业平均水平的比较。
-
运营管理:
- 监控生产效率、库存水平、客户满意度等运营指标与目标值的对比。
- 评估供应链绩效,如交货时间、成本控制等。
-
人力资源:
- 展示员工绩效评估结果,如销售额、客户满意度评分等与公司标准的对比。
- 分析员工培训效果,如技能提升与预期目标的比较。
-
项目管理:
- 跟踪项目进度,如完成百分比与计划进度的对比。
- 评估项目成本、资源利用率等与预算和计划的比较。
-
市场营销:
- 分析营销活动效果,如点击率、转化率等与预期目标的对比。
- 监控市场份额、品牌知名度等市场指标与竞争者的比较。
-
教育评估:
- 展示学生成绩与班级或学校平均水平的对比。
- 评估教育项目效果,如学生进步率与预期目标的比较。
-
健康与医疗:
- 监控患者康复进度,如康复指标与正常范围的对比。
- 分析医疗资源利用效率,如病床周转率与行业标准的比较。
-
环境监测:
- 展示污染物排放量与环保标准的对比。
- 分析能源消耗量与节能目标的比较。
-
政府与公共服务:
- 展示公共服务满意度、政策执行效果等与预定目标的对比。
- 监控社会经济发展指标,如GDP增长率、失业率等与政府目标的比较。
子弹图通过直观地展示实际表现与目标的差距,帮助决策者快速识别问题领域,制定相应的改进措施。其简洁性和易读性使得子弹图在各类报告、仪表板和演示中都非常受欢迎。
4、案例实现
(1)导入必要的库:
import matplotlib.pyplot as plt
import numpy as np
matplotlib.pyplot
:用于绘图。numpy
:用于数值计算,这里没有直接使用,但通常在数据处理时很有用。
(2)数据准备:
metrics = [
{"title": "销售额(万元)", "actual": 380, "target": 400, "ranges": [200, 300, 400, 500]},
{"title": "用户增长数", "actual": 8500, "target": 9000, "ranges": [5000, 7000, 9000, 11000]},
{"title": "转化率(%)", "actual": 6.8, "target": 7.5, "ranges": [3, 5, 7.5, 10]},
{"title": "满意度", "actual": 82, "target": 85, "ranges": [60, 70, 85, 95]}
]
(3)可视化配置:
plt.rcParams['font.family'] = 'SimHei' # 中文字体支持
plt.rcParams['axes.edgecolor'] = '#666666' # 坐标轴颜色
(4)颜色方案:
range_colors = ['#FF9999', '#FFE08C', '#C4E6A3', '#EBEBEB'] # 区间背景色
actual_color = '#2E5984' # 实际值颜色
target_color = '#C00000' # 目标线颜色
(5)创建画布:
fig, axs = plt.subplots(len(metrics), 1,
figsize=(10, 8),
facecolor='#FFFFFF',
gridspec_kw={'hspace': 0.6})
(6)绘制每个子弹图:
for idx, ax in enumerate(axs):
# 获取当前指标配置
config = metrics[idx]
# 清除坐标轴
ax.set_facecolor('white')
ax.tick_params(axis='both', which='both', length=0)
ax.set_xticks([])
ax.set_yticks([])
# 绘制区间背景
for i in range(len(config["ranges"]) - 1, 0, -1):
ax.barh('range',
config["ranges"][i] - config["ranges"][i - 1],
left=config["ranges"][i - 1],
height=0.3,
color=range_colors[i - 1],
edgecolor='white',
linewidth=0.5)
# 绘制实际值条
ax.barh('actual',
config["actual"],
left=0,
height=0.15,
color=actual_color,
edgecolor='white')
# 绘制目标线
ax.vlines(config["target"],
-0.2, 0.2,
color=target_color,
linewidth=2.5,
linestyle='--',
zorder=3)
# 添加数值标签
ax.text(config["ranges"][-1] * 1.02, -0.01,
f'实际值: {config["actual"]}',
va='center',
color=actual_color)
ax.text(config["target"] * 1.02, 0.18,
f'目标值: {config["target"]}',
va='center',
color=target_color)
# 设置标题和范围
ax.set_xlim(0, config["ranges"][-1] * 1.2)
ax.set_ylabel(config["title"],
rotation=0,
va='center',
ha='right',
labelpad=30,
fontsize=10)
- 遍历每个指标,为每个指标创建一个子弹图。
- 清除坐标轴的刻度和背景。
- 绘制区间背景、实际值条和目标线。
- 添加实际值和目标值的文本标签。
- 设置每个子图的标题和x轴范围。
(7)输出设置:
plt.suptitle('业务指标达成情况 - 子弹图分析',
y=0.95,
fontsize=14,
color='#333333')
plt.tight_layout()
plt.savefig('bullet_chart.png', dpi=300, bbox_inches='tight')
plt.show()
- 设置整个图表的标题。
- 调用
tight_layout
自动调整子图参数,使之填充整个图像区域。 - 保存图表为PNG文件。
- 显示图表。
每一段代码都有其特定的功能,从数据准备到图表的最终显示,每一步都是构建整个子弹图的重要组成部分。
七、哑铃图
1、概念
哑铃图是一种数据可视化图表,用于展示两个相关数据集之间的比较。它由两个柱形图组成,分别代表两个数据集的值,中间通过一条线连接,形成类似哑铃的形状。这种图表特别适用于展示比较数据,如前后对比、男女差异等,使得观众可以直观地看出两个数据集之间的差异和关系。哑铃图在设计时通常采用不同的颜色来区分两个数据集,以便于快速识别和比较。
2、特点
哑铃图的特点主要包括:
-
直观比较:通过两个相对的柱形图,可以直观地展示两个数据集之间的差异,使得比较更加明显。
-
突出差异:中间的连接线强调了两个数据点之间的差距,使得观众可以快速注意到数据之间的不同。
-
简洁清晰:哑铃图结构简单,不包含过多的复杂元素,有助于观众快速理解数据。
-
颜色区分:通常使用不同的颜色来区分两个数据集,增强视觉上的区分度。
-
适用性广:适用于各种需要比较两个相关数据集的场景,如性别差异、时间序列变化等。
-
易于制作:大多数数据可视化工具都支持制作哑铃图,操作相对简单。
-
信息聚焦:由于只展示两个数据集,有助于观众聚焦于关键信息,避免被其他不相关数据干扰。
-
可读性强:即使在数据点较多的情况下,哑铃图也能保持较高的可读性,因为每个数据点都有对应的柱形图和连接线。
这些特点使得哑铃图成为数据可视化中一种有效且常用的图表类型。
3、应用场景
哑铃图的应用场景非常广泛,尤其适用于需要比较两个相关数据集的情况。以下是一些常见的应用场景:
-
性别差异分析:
- 展示男性和女性在某一指标上的差异,如工资、教育程度、就业率等。
-
时间序列比较:
- 比较不同时间点或时间段的数据,如年初与年末的销售额、季度间的用户增长等。
-
地域差异展示:
- 展示不同地区或国家在某一指标上的差异,如GDP、人口密度、教育资源分布等。
-
产品性能对比:
- 比较不同产品或服务在关键性能指标上的表现,如手机电池寿命、汽车油耗等。
-
市场调研结果:
- 展示市场调研中不同群体或样本在某一问题上的回答或态度差异。
-
财务数据分析:
- 比较不同财务指标或财务周期内的数据,如收入与支出、资产与负债等。
-
教育资源分配:
- 展示不同学校或地区在教育资源分配上的差异,如教师数量、学生人均经费等。
-
健康与医疗数据:
- 比较不同群体或地区的健康指标,如平均寿命、疾病发病率等。
-
环境数据比较:
- 展示不同地区或时间点的环境指标差异,如空气质量指数、水资源利用率等。
-
社会调查结果:
- 展示社会调查中不同群体在某一社会问题上的看法或行为差异。
-
技术性能对比:
- 比较不同技术或设备在性能测试中的结果,如计算机处理速度、网络延迟等。
-
客户满意度调查:
- 展示不同客户群体对产品或服务的满意度评分。
在这些场景中,哑铃图能够有效地突出数据之间的差异,使得比较更加直观和清晰,有助于观众快速把握关键信息。
4、案例实现
(1)导入库:
import matplotlib.pyplot as plt
import numpy as np
matplotlib.pyplot
:用于绘图。numpy
:用于数值计算,这里没有直接使用,但通常在数据处理时很有用。
(2)数据准备:
categories = ['产品A', '产品B', '产品C', '产品D', '产品E']
start_values = [23, 45, 15, 67, 34] # 起始值(如2022年数据)
end_values = [38, 52, 28, 75, 47] # 结束值(如2023年数据)
deltas = [e - s for s, e in zip(start_values, end_values)] # 计算变化量
categories
:定义了不同的产品。start_values
和end_values
:分别定义了每个产品在两个时间点的销售额。deltas
:计算每个产品的销售额变化量。
(3)可视化配置:
plt.rcParams['font.family'] = 'SimHei' # 中文字体支持
plt.rcParams['axes.edgecolor'] = '#666666'
# 颜色方案
start_color = '#4e79a7' # 起始值颜色
end_color = '#e15759' # 结束值颜色
line_color = '#8cd17d' # 连接线颜色
- 设置中文字体和支持。
- 设置坐标轴颜色。
- 定义颜色方案用于不同的数据点和支持线。
(4)创建画布:
fig, ax = plt.subplots(figsize=(10, 6),
facecolor='white',
dpi=100)
- 创建一个画布和坐标轴,设置画布大小、背景颜色和分辨率。
(5)绘制哑铃图:
# 绘制连接线
for i, (s, e) in enumerate(zip(start_values, end_values)):
ax.plot([s, e], [i, i],
color=line_color,
linewidth=3,
zorder=1,
solid_capstyle='round')
# 绘制起始点
ax.scatter(start_values, range(len(categories)),
color=start_color,
s=150,
edgecolor='white',
linewidth=2,
zorder=2,
label='2022年')
# 绘制结束点
ax.scatter(end_values, range(len(categories)),
color=end_color,
s=150,
edgecolor='white',
linewidth=2,
zorder=2,
label='2023年')
- 绘制连接两个时间点销售额的线条。
- 绘制表示起始值的点。
- 绘制表示结束值的点。
(6)标签与装饰:
# 设置Y轴标签
ax.set_yticks(range(len(categories)))
ax.set_yticklabels(categories, fontsize=10)
ax.invert_yaxis() # 反转Y轴使顶部条目在上
# 添加变化量标签
for i, delta in enumerate(deltas):
ax.text((start_values[i] + end_values[i]) / 2, i - 0.15,
f'Δ{delta:+}',
ha='center',
color='#2d3436',
fontsize=9,
bbox=dict(facecolor='white',
edgecolor='none',
pad=1))
# 添加参考线
ax.grid(axis='x',
color='#dfe6e9',
linestyle='--',
linewidth=0.8)
# 设置图例
ax.legend(loc='lower right',
frameon=False,
handletextpad=0.5)
- 设置Y轴标签为产品名称。
- 反转Y轴,使得顶部的产品在上方。
- 为每个产品添加变化量标签。
- 添加X轴的参考线。
- 设置图例的位置和样式。
(7)输出设置:
plt.title("产品年度销售额变化对比 (单位:百万元)",
fontsize=12,
pad=20,
color='#2d3436')
plt.tight_layout()
plt.savefig('dumbbell_chart.png', dpi=300, bbox_inches='tight')
plt.show()
- 添加图表标题。
- 调用
tight_layout
自动调整子图参数。 - 保存图表为PNG文件,设置分辨率和边距。
- 显示图表。
通过这些步骤,创建了一个直观的哑铃图,有效地展示了不同产品在两个时间点的销售额变化,以及每个产品的变化量。
八、雷达图
1、概念
雷达图(Radar Chart),也称为蜘蛛图(Spider Chart)或星形图(Star Chart),是一种用于显示多个量化变量的数据分布情况的图表。它将每个变量的值绘制在一条轴上,这些轴从同一个中心点向外辐射,形成类似雷达屏幕的形状。雷达图常用于比较多个项目或时间点在多个标准上的表现,使得观察者可以直观地看到各个项目在不同标准上的优势和劣势,以及它们之间的整体相似性和差异性。通过雷达图,可以轻松识别出哪些变量得分高,哪些得分低,从而为决策提供支持。
2、特点
雷达图的特点主要包括:
-
多维度展示:雷达图能够同时展示多个维度的数据,每个维度都有独立的轴,从中心向外延伸。
-
直观比较:通过雷达图,可以直观地比较不同项目或时间点在各个维度上的表现,易于识别出优势和劣势。
-
形状识别:每个项目或时间点的数据在雷达图上形成独特的多边形形状,通过这些形状可以快速进行视觉上的区分和比较。
-
中心对称:所有的轴都从同一个中心点出发,形成中心对称的布局,使得比较更加公平和直观。
-
尺度一致性:每个轴的尺度通常是一致的,这有助于在不同维度之间进行直接比较。
-
适用性广泛:雷达图适用于展示任何具有多个量化特征的数据集,如产品性能、运动员表现、市场调查结果等。
-
易于识别极端值:雷达图上的尖峰和凹陷容易识别,有助于快速发现某个维度上的极端高值或低值。
-
空间效率:雷达图在有限的空间内展示了大量的信息,具有较高的空间效率。
-
可读性:当维度数量适中时,雷达图具有很好的可读性,但维度过多可能会导致图表变得复杂和难以解读。
-
灵活性:雷达图可以根据需要调整轴的数量、尺度和标签,以适应不同的数据展示需求。
雷达图的特点使其成为多变量数据分析中的有力工具,但也需要注意,当维度过多或数据范围差异较大时,雷达图可能会变得难以解读,因此在使用时需要权衡这些因素。
3、应用场景
雷达图在多个领域中有广泛的应用,以下是一些常见的应用场景:
-
性能评估:
- 产品比较:比较不同产品在多个性能指标上的表现,如手机、电脑等的规格对比。
- 运动员表现:评估运动员在多项体育指标上的表现,如速度、力量、耐力等。
-
市场分析:
- 品牌对比:分析不同品牌在市场占有率、品牌知名度、客户满意度等多个维度上的表现。
- 消费者行为:研究消费者在购买决策时考虑的多个因素,如价格、质量、品牌形象等。
-
人力资源:
- 员工评估:评估员工在多个技能或绩效指标上的表现,如沟通能力、团队合作、工作效率等。
- 职位匹配:分析求职者与职位要求在多个维度上的匹配程度。
-
教育评估:
- 学生表现:展示学生在不同学科或技能上的成绩和进步。
- 课程评价:评估课程在教学内容、教学方法、学生满意度等多个方面的表现。
-
财务分析:
- 投资组合:分析投资组合在风险、回报、流动性等多个维度上的表现。
- 财务比率:比较公司在盈利能力、偿债能力、运营效率等多个财务比率上的表现。
-
环境评估:
- 环境影响:评估不同项目或活动在碳排放、资源消耗、生态影响等多个环境指标上的表现。
- 可持续发展:分析企业在经济、环境、社会等多个维度上的可持续发展表现。
-
医疗健康:
- 患者健康状况:展示患者在多个健康指标上的状况,如血压、血糖、胆固醇等。
- 药物效果:比较不同药物在多个疗效指标上的表现。
-
游戏设计:
- 角色属性:展示游戏角色在力量、敏捷、智力等多个属性上的分布。
- 技能平衡:分析不同技能在伤害、冷却时间、消耗等多个维度上的平衡性。
-
项目管理:
- 项目评估:评估项目在成本、时间、质量、风险等多个维度上的表现。
- 资源分配:分析项目资源在人力、资金、设备等多个方面的分配情况。
-
社会科学研究:
- 社会指标:分析社会在经济发展、教育水平、健康保障、环境质量等多个社会指标上的表现。
- 政策效果:评估不同政策在多个预期效果指标上的实现情况。
雷达图通过其独特的多维度展示方式,能够清晰地展示复杂的数据关系,帮助用户在不同领域中进行深入的分析和决策。然而,需要注意的是,雷达图在维度过多或数据差异较大时可能会变得难以解读,因此在使用时应选择合适的场景和数据进行展示。
4、案例实现
(1)导入库:
import matplotlib.pyplot as plt
import numpy as np
matplotlib.pyplot
:用于绘图。numpy
:用于数值计算,这里用于创建数组和进行数学运算。
(2)数据准备:
categories = ['设计', '性能', '续航', '屏幕', '系统', '价格']
labels = np.array(categories)
angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False).flatten()
product_A = np.array([85, 92, 88, 95, 80, 75]) # 当前产品
product_B = np.array([78, 85, 80, 88, 72, 90]) # 竞品
categories
:定义了雷达图的类别。labels
:将类别转换为NumPy数组。angles
:计算每个类别的角度,用于绘制雷达图。product_A
和product_B
:分别定义了两个产品在各个类别上的评分。
(3)可视化配置:
plt.rcParams['font.family'] = 'SimHei' # 中文字体
plt.rcParams['axes.unicode_minus'] = False
fig = plt.figure(figsize=(8, 8), facecolor='#f5f6fa')
ax = fig.add_subplot(111, polar=True)
- 设置Matplotlib的字体为中文_SIMHEI。
- 设置坐标轴负号显示正常。
- 创建一个图对象
fig
,并设置大小和背景颜色。 - 添加一个极坐标子图
ax
。
(4)绘制逻辑:
product_A = np.concatenate((product_A, [product_A[0]]))
product_B = np.concatenate((product_B, [product_B[0]]))
angles = np.concatenate((angles, [angles[0]]))
ax.set_theta_offset(np.pi/2)
ax.set_theta_direction(-1)
plt.thetagrids(np.degrees(angles[:-1]), labels=labels, fontsize=10, color='#2c3e50')
ax.set_rlabel_position(30)
plt.ylim(0, 100)
plt.yticks([20, 40, 60, 80], ['20', '40', '60', '80'], color='#7f8c8d', fontsize=8)
plt.grid(color='#dcdde1', linestyle='--')
- 将产品A和B的数据以及角度数组闭合,以便绘制完整的雷达图。
- 设置雷达图的起始角度和方向。
- 绘制雷达图的类别标签。
- 设置径向轴的位置、数值范围和刻度。
- 绘制背景网格。
(5)绘制数据:
ax.plot(angles, product_A, color='#3498db', linewidth=2, marker='o', markersize=6, label='当前产品')
ax.fill(angles, product_A, color='#3498db', alpha=0.1)
ax.plot(angles, product_B, color='#e74c3c', linewidth=2, marker='^', markersize=6, label='竞品B')
ax.fill(angles, product_B, color='#e74c3c', alpha=0.1)
- 绘制产品A的雷达图,包括线条和填充区域。
- 绘制产品B的雷达图,包括线条和填充区域
(6)装饰元素:
plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1), frameon=False)
plt.title('产品性能多维对比分析', pad=40, fontsize=14, color='#2c3e50')
- 添加图例,设置位置和样式。
- 添加图表标题。
(7)输出设置:
plt.tight_layout()
plt.savefig('radar_chart.png', dpi=300, transparent=True)
plt.show()
- 调用
tight_layout
自动调整子图参数。 - 保存图表为PNG文件,设置分辨率和透明背景。
- 显示图表。
通过这些步骤,创建了一个直观的雷达图,有效地展示了两个产品在不同类别上的性能对比。
九、平行坐标图
1、概念
平行坐标图是一种用于可视化高维数据的图表,它将每个数据点的多个变量表示为一系列平行的坐标轴,每个轴对应一个变量。数据点通过连接每个轴上相应值的线段来表示,从而允许用户观察数据点在不同变量上的分布和关系,以及识别数据中的模式、聚类和异常值。这种图表特别适用于比较多个对象或样本在不同特征上的表现,并在数据挖掘、统计分析和其他需要多维数据分析的领域中广泛应用。
2、特点
平行坐标图具有以下几个主要特点:
-
多维性:平行坐标图能够展示多个变量,每个变量都有自己独立的坐标轴,这些轴平行排列,非常适合高维数据的可视化。
-
线性表示:每个数据点在图上表示为一条穿过所有坐标轴的折线,折线在每个轴上的交点表示该数据在该变量上的值。
-
比较性:由于所有坐标轴都是平行的,用户可以很容易地比较不同数据点在各个变量上的值,识别出它们之间的相似性和差异性。
-
模式识别:通过观察折线的走势和聚集情况,可以识别出数据中的模式、聚类和异常值。
-
灵活性:坐标轴的顺序可以调整,以突出不同变量之间的关系,用户可以根据分析需求改变轴的排列。
-
可扩展性:平行坐标图可以容纳大量数据点,尽管随着数据量的增加,图表可能会变得拥挤,但通过适当的筛选和交互技术,可以管理这种复杂性。
-
交互性:现代的平行坐标图通常包含交互功能,如缩放、拖动、高亮显示等,这些功能增强了用户与数据的互动,提高了分析的深度。
-
非直观性:对于不熟悉这种图表的用户来说,平行坐标图可能需要一些时间来适应,因为它的表示方式与传统的二维或三维图表不同。
-
尺度问题:不同变量的尺度可能差异很大,这可能会影响图表的可读性,需要通过标准化或其他方法来调整。
-
视觉混乱:当数据点非常多时,折线可能会相互交叉,导致视觉上的混乱,这需要通过颜色编码、透明度调整或数据抽样等方法来缓解。
平行坐标图是一种强大的数据可视化工具,尤其适用于探索性数据分析和高维数据集的初步分析。然而,为了有效地使用这种图表,通常需要一定的训练和经验。
3、应用场景
平行坐标图在多个领域都有广泛的应用,以下是一些典型的应用场景:
-
多变量数据分析:
- 用于展示和分析具有多个变量的数据集,如社会经济数据、环境监测数据等。
-
数据挖掘与模式识别:
- 发现数据中的模式、趋势和异常值,如市场分析、客户细分等。
-
决策支持:
- 在商业智能中,帮助决策者理解复杂的数据关系,支持决策过程。
-
生物信息学:
- 分析基因表达数据、蛋白质序列等,识别生物标志物和疾病模式。
-
工程与科学研究:
- 展示实验数据,如材料性能测试、化学反应参数等,以识别最优条件。
-
金融分析:
- 分析股票市场的多维度数据,如价格、成交量、波动率等。
-
社会网络分析:
- 展示和分析社会网络中的多维度特征,如节点度数、聚类系数等。
-
用户行为分析:
- 分析用户在网站或应用程序上的行为数据,如点击率、停留时间等。
-
质量管理:
- 监控和分析生产过程中的多个质量指标,以识别潜在的问题。
-
教育资源分析:
- 分析学生的学习成绩、出勤率、参与度等多维度数据。
-
健康与医疗研究:
- 分析病人的多维度健康数据,如生理指标、生活习惯等。
-
环境科学:
- 展示和分析环境监测数据,如空气质量、水质指标等。
-
交通与物流:
- 分析交通流量、运输效率、货物分布等多维度数据。
-
城市规划:
- 展示和分析城市发展的多个指标,如人口密度、土地利用等。
-
市场营销:
- 分析市场调查数据,如消费者偏好、购买行为等。
平行坐标图通过其独特的多维数据展示方式,使得用户能够直观地观察到数据之间的关系和模式,从而在上述场景中发挥重要作用。然而,由于平行坐标图的复杂性,通常需要结合数据预处理、交互技术和用户培训来最大化其效用。
4、案例实现
(1)导入必要的库:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
- 导入pandas、numpy和matplotlib的相关模块,用于数据处理和绘图。
(2)创建随机数据:
np.random.seed(0)
data = np.random.rand(10, 5) # 10个数据点,每个数据点5个特征
columns = [f'变量{i+1}' for i in range(5)]
df = pd.DataFrame(data, columns=columns)
- 生成一个10行5列的随机数组。
- 创建列名,每个列名表示一个变量,例如“变量1”、“变量2”等。
- 将数据转换为Pandas DataFrame。
(3)定义绘制平行坐标图的函数:
def parallel_coordinates(df, ax, colors):
(n, m) = df.shape
for i in range(n):
y = df.iloc[i].values
x = np.arange(m)
ax.plot(x, y, color=colors[i])
- 这个函数接受DataFrame、坐标轴对象和颜色列表作为参数。
- 获取数据点的数量和特征数量。
- 遍历每个数据点,绘制通过每个特征的线,颜色由colors列表指定。
(4)为每个数据点指定不同的颜色:
colors = ['red', 'green', 'blue', 'yellow', 'purple', 'orange', 'pink', 'brown', 'gray', 'black']
- 定义一个颜色列表,为每个数据点指定不同的颜色。
(5)设置中文显示:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 用于正常显示负号
- 设置默认字体为黑体,以支持中文显示。
- 设置负号显示为正常形式。
(6)创建图表并绘制平行坐标图:
fig, ax = plt.subplots()
parallel_coordinates(df, ax, colors)
- 创建图表和坐标轴对象。
- 调用函数绘制平行坐标图。
(7)设置坐标轴标签:
ax.set_xticks(np.arange(len(columns)))
ax.set_xticklabels(columns)
- 设置x轴的刻度位置。
- 设置x轴的刻度标签为变量名。
(8)设置字体大小:
for label in ax.get_xticklabels():
label.set_fontproperties('SimHei')
label.set_fontsize(12) # 可以根据需要调整字体大小
- 遍历所有x轴标签。
- 设置标签的字体属性为黑体。
- 设置标签的字体大小。
(9)显示图表:
plt.show()
- 显示绘制的平行坐标图。
通过这些步骤,成功绘制了一个平行坐标图,并且确保了中文标签的正确显示。
十、词云图
1、概念
词云图是一种视觉上展示文本数据的方法,通过将文本中的关键词以不同大小和颜色呈现,形成类似云朵的图像。其中,关键词的大小通常与其在文本中的出现频率成正比,颜色和布局则可以根据需要进行调整。词云图不仅能够直观地展示文本的主要内容和主题,还能为读者提供一种有趣且富有艺术感的阅读体验。这种图形常用于文本分析、信息可视化、广告设计等领域,帮助人们快速捕捉和理解大量文本信息中的关键点。
2、特点
词云图具有以下几个主要特点:
-
视觉突出:词云图中,词语的大小通常与其在文本中的出现频率成正比,使得重要词汇在视觉上更加突出。
-
直观易懂:通过图形的方式展示文本数据,使得非专业观众也能快速理解文本的主要内容和关键词。
-
艺术性:词云图往往具有美观的布局和色彩搭配,不仅是一种信息展示工具,也是一种艺术表达形式。
-
灵活性:可以自定义词语的颜色、字体、布局等,以适应不同的展示需求和审美偏好。
-
高效性:能够在有限的空间内展示大量信息,帮助观众快速捕捉文本的核心内容。
-
交互性:在一些动态词云图中,观众可以通过点击或悬停来获取更多关于特定词语的信息。
-
多样性:可以用于各种类型的文本数据,包括文章、演讲、社交媒体帖子等。
-
易于生成:有许多在线工具和软件可以轻松生成词云图,无需复杂的编程知识。
-
强调频率:通过词语的大小直接反映其在文本中的出现频率,使得观众可以直观地看到哪些词语是文本的重点。
-
忽略语法:词云图通常不考虑词语之间的语法关系,专注于词语的独立出现频率。
词云图的这些特点使其成为信息可视化、文本分析、市场研究、教育等多个领域的重要工具。
3、应用场景
词云图因其直观、艺术性强且易于理解的特点,在多个领域中有广泛的应用场景,包括:
-
商业分析:
- 市场调研:通过分析消费者评论、社交媒体帖子等,了解消费者对产品或服务的看法和需求。
- 品牌监控:追踪品牌在网络上的提及频率和情感倾向。
- 产品定位:分析产品关键词,帮助确定市场定位和营销策略。
-
社交媒体分析:
- 热点追踪:展示社交媒体上的热门话题和关键词。
- 情感分析:通过词云图展示公众对特定事件或品牌的情感倾向。
-
政治与公共事务:
- 公众意见分析:分析公众对政策、事件或政治人物的看法。
- 演讲分析:提取政治演讲中的关键词,了解演讲者的重点和立场。
-
教育与学术研究:
- 文本摘要:为学生或研究者提供文献、文章的快速概览。
- 关键词提取:在学术论文、书籍分析中提取关键概念和主题。
-
内容营销:
- 博客和文章优化:通过分析热门关键词,优化内容以提高搜索引擎排名。
- 内容策略:了解受众关注的话题,制定更有针对性的内容策略。
-
活动与会议:
- 主题展示:在会议、研讨会等活动中,用词云图展示讨论的主题和焦点。
- 参与者反馈分析:分析参与者提供的反馈,了解活动的成功点和改进空间。
-
个人兴趣与创意表达:
- 诗歌和艺术创作:用词云图创作视觉诗歌或艺术作品。
- 个人日记或旅行记录:通过词云图回顾个人经历和感受。
-
新闻报道:
- 新闻摘要:为读者提供新闻文章的快速视觉摘要。
- 事件分析:分析新闻事件中的关键词,了解事件的本质和影响。
-
客户服务:
- 客户反馈分析:分析客户评论和反馈,了解服务中的优点和不足。
- 常见问题解答:通过词云图展示客户最常询问的问题。
-
数据可视化:
- 大数据展示:在报告或演示中,用词云图直观展示大数据中的关键信息。
- 数据探索:在数据分析和挖掘过程中,用词云图探索数据集中的潜在模式和关系。
词云图的应用场景非常多样,几乎任何需要快速、直观地展示文本数据关键词的场合都可以使用词云图。
4、案例分析
(1)导入库:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
wordcloud
:用于生成词云图的库。matplotlib.pyplot
:用于显示图表的库。
(2)定义示例文本:
text = ("Python is an amazing programming language. "
"It is widely used for data analysis, machine learning, web development, and more. "
"Python is easy to learn and has a large community. "
"Many developers love Python for its simplicity and versatility.")
- 这段文本将用于生成词云图,其中包含了一些与Python相关的关键词。
(3)创建词云对象:
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text)
WordCloud
:创建一个词云对象,可以设置词云图的宽度、高度和背景颜色。generate(text)
:根据提供的文本生成词云。
(4)使用matplotlib显示词云图:
plt.figure(figsize=(10, 5))
figure(figsize=(10, 5))
:设置图表的尺寸。
plt.imshow(wordcloud, interpolation='bilinear')
imshow
:显示图像。wordcloud
:要显示的词云图像。interpolation='bilinear'
:设置图像的插值方式,使词云图更平滑。
plt.axis('off')
axis('off')
:关闭坐标轴,因为词云图通常不需要显示坐标轴。
plt.show()
show()
:显示图表。
通过这些步骤,成功生成并显示了一个基于给定文本的词云图。词云图中的词语大小表示其在文本中的出现频率,从而直观地展示了文本的主要内容和关键词。
十一、图表比较
图表类型 | 特点 | 相同点 | 不同点 |
---|---|---|---|
阶梯图 | 显示数据变化趋势 阶梯形状连接数据点 强调数值突变 | X轴表示时间或类别 Y轴表示数值 | 使用阶梯形状 强调数值的突然变化 |
折线图 | 显示数据变化趋势 直线连接数据点 显示连续变化 | X轴表示时间或类别Y轴表示数值 | 使用直线连接 显示数据的连续变化 |
柱状图 | 比较不同类别数值 垂直柱子表示数值 柱子有间隔 | X轴表示类别 Y轴表示数值 | 使用垂直柱子 柱子之间有间隔 |
环形柱状图 | 比较不同类别数值 柱子呈环形排列 显示数据占比 | 显示数据占比 | 柱子呈环形 强调数据的整体分布 |
南丁格尔玫瑰图 | 显示数据占比 扇形半径表示数值 极坐标表示 | 显示数据占比 | 扇形半径表示数值 强调数据的相对大小 |
子弹图 | 显示目标值和实际性能 水平或垂直线表示 强调对比 | 显示目标与实际的对比 | 使用线表示目标值和实际值 强调目标与实际的对比 |
哑铃图 | 比较两个相关数据集 两端带圆的线表示 强调差异 | 比较两个相关数据集 | 使用两端带圆的线 圆的大小表示数据大小 |
雷达图 | 多变量数据比较 数据点呈多边形排列 显示分布特征 | 多变量数据比较 | 数据点呈多边形 强调各变量之间的关系 |
平行坐标图 | 多变量数据比较 平行轴表示变量 显示分布特征 | 多变量数据比较 | 使用平行轴 强调数据在不同变量上的表现 |
词云图 | 显示文本数据关键词 词大小表示频率 直观展示 | 直观展示文本数据 | 词的大小表示频率 不直接表示数值大小 |
阶梯图、折线图、柱状图等各自有独特的显示方式和用途,如阶梯图强调数值的突变,折线图展示连续变化,柱状图比较不同类别数值。尽管它们在某些方面相似,如X轴常表示时间或类别,Y轴表示数值,但它们的不同点在于如何连接或展示数据,如阶梯图使用阶梯形状,折线图使用直线连接。环形柱状图、南丁格尔玫瑰图、子弹图等其他图表也有各自的特色和应用场景,如环形柱状图强调数据的整体分布,南丁格尔玫瑰图适合展示多变量数据。词云图则专注于文本数据的直观展示。