【柱形图+折线图+饼图的简单介绍及简单绘制】
一、柱形图
柱状图,又称长条图、柱状统计图、条图、条状图、棒形图,是一种使用矩形条对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量。在柱状图上,分类变量的每个实体都被表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。柱状图通常利用于较小的数据集分析,亦可横向排列,或用多维方式表达。
以下是一个简单的柱形图绘制代码:
import matplotlib.pyplot as plt # 导入matplotlib的pyplot模块,并简写为plt
# 1. 中文显示配置(以 Windows 的 "SimHei" 为例,macOS 可用 "Arial Unicode MS",必须在创建图表对象前设置)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定中文字体(Windows系统)
plt.rcParams['axes.unicode_minus'] = False # 解决负号"-"显示为方块的问题
# 2. 创建图形对象
fig, ax = plt.subplots() # fig是整个图形窗口,ax是图形中的坐标轴
# 3. 定义数据
characters = ['罗小黑', '无限', '玄离', '老君'] # 角色名称列表
ages = [10, 441, 503, 1400] # 对应角色的年龄列表(需要与characters列表顺序一致)
bar_colors = ['#D9E4B9', '#CCE198', '#A7C587', '#81AD70'] # 自定义颜色
# 4. 绘制条形图
for character, age, color in zip(characters, ages, bar_colors):
ax.bar(character, age, label=character, color=color)
# 5. 设置图表标签
ax.set_ylabel("年龄(岁)") # 设置y轴标签文字
ax.set_title('《罗小黑战记》角色年龄分布(柱状图)') # 设置图形标题
ax.legend(title='角色列表') # 添加图例,并设置图例标题
plt.show() # 显示图形窗口(在非交互式环境中需要调用这个才会显示图形)
二、折线图
折线图是一个由直角坐标系,一些点和线组成的统计图表。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。在折线图中,x轴通常用作连续时间间隔或有序类别(比如阶段1,阶段2,阶段3)。y轴用于量化的数据,如果为负值则绘制于y轴下方。连线用于连接两个相邻的数据点。折线图用于分析事物随时间或有序类别而变化的趋势。
1、以下是一个简单的折线图绘制代码:
import matplotlib.pyplot as plt
# 1. 中文显示配置(必须在创建图表对象前设置)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定中文字体(Windows系统)
plt.rcParams['axes.unicode_minus'] = False # 解决负号"-"显示为方块的问题
# 2. 创建图形对象
fig, ax = plt.subplots(figsize=(10, 7)) # figsize=(宽度,高度) 单位英寸 #高度较高可防止x轴标签重叠
# 3. 数据准备
update_intervals = ['1-2集', '2-3集', '3-4集', '4-5集', '5-6集', '6-7集'] # x轴标签文本
interval_days = [74, 198, 145, 192, 89, 83] # 对应的y轴数值数据
# 4. 生成坐标数据
x_ticks = range(len(update_intervals)) # 创建0-5的连续数值坐标(共6个数据点)
# 5. 绘制折线图(关键参数详解)
line = ax.plot(
x_ticks, # x坐标序列
interval_days, # y数值序列
marker='o', # 数据点样式:实心圆
markersize=10, # 数据点大小(单位:磅)
linestyle='--', # 线型:虚线(solid: -, dashed: --, dotted: :)
color='#81AD70', # 颜色代码
linewidth=2.5, # 折线粗细(单位:磅)
label='更新间隔' # 图例显示文本
)
# 6. 设置坐标轴范围(非必须,但建议固定y轴基准)
ax.set_ylim(0, 225) # 参数0表示y轴起点,225表示y轴最大值(根据数据特征设定)
# 7. 添加数据标签(在折线顶点上方显示具体数值)
for x, y in zip(x_ticks, interval_days):
ax.text(
x, # x坐标位置
y + 0.03 * 225, # y坐标位置(数据点上浮3%的图表高度)
f'{y}天', # 显示文本(格式化字符串)
ha='center', # 水平对齐方式:居中
va='bottom', # 垂直对齐方式:底部对齐
fontsize=12, # 字体大小
fontweight='bold' # 字体加粗
)
# 8. 坐标轴精细设置
# x轴设置
ax.set_xticks(x_ticks) # 设定x轴刻度位置
ax.set_xticklabels(
update_intervals, # 设置刻度标签文本
rotation=35, # 标签旋转35度(防止重叠)
ha='right' # 旋转后对齐方式:右对齐
)
# y轴设置
ax.set_yticks(range(0, 226, 25)) # 设置y轴刻度(从0开始,间隔25,到225结束)
ax.set_ylabel('间隔天数(天)',
fontsize=13, # 标签字体大小
labelpad=10) # 标签与坐标轴的间距
ax.set_xlabel('剧集更新区间',
fontsize=13,
labelpad=10) # 与x轴的间距
# 9. 标题设置(重点突出)
ax.set_title(
'《罗小黑战记》剧集更新间隔统计分析(第1-7集)',
fontsize=16, # 主标题字号
pad=25, # 标题与图表的间距
fontweight='bold' # 字体加粗
)
# 10. 图例与网格优化
ax.legend(
title='图例说明', # 图例标题
title_fontsize=12, # 图例标题字号
loc='upper right' # 图例位置:右上角
)
ax.grid(
axis='y', # 只显示y轴方向网格线
linestyle=':', # 线型:点线(增强可读性)
alpha=0.5 # 透明度(0-1,数值越小越透明)
)
# 自动调整子图参数(防止标签被裁剪)
plt.tight_layout()
# 显示最终图形
plt.show()
2、若想使曲线平滑可将第5步换成以下三步:
# 导入科学计算库
import numpy as np # 数组处理和数值计算
from scipy.interpolate import make_interp_spline # 创建平滑样条曲线的插值工具
# 1. 插值处理(将离散数据转换为连续曲线)
# 将原始数据转换为numpy数组格式(便于数学运算)
x = np.array(x_ticks) # x坐标数组(原始数据点位置:[0,1,2,3,4,5])
y = np.array(interval_days) # y值数组(对应间隔天数)
# 生成新的密集x坐标(用于创建平滑曲线)
x_new = np.linspace(
x.min(), # 起始值(0)
x.max(), # 结束值(5)
300 # 生成300个等间距点(数值越大曲线越平滑)
)
# 创建三次样条插值对象(Cubic Spline Interpolation)
spl = make_interp_spline(
x, # 原始x坐标
y, # 原始y值
k=3 # 样条曲线阶数(3=三次样条,推荐值)
)
# 计算插值后的y值(生成平滑曲线数据)
y_smooth = spl(x_new) # 通过插值对象计算新x坐标对应的y值
# 2. 绘制平滑曲线(连接插值数据点)
ax.plot(
x_new, # 插值后的x坐标序列
y_smooth, # 插值后的y值序列
linestyle='-', # 线型:实线(区别于原始折线图的虚线)
color='#81AD70', # 颜色与原始折线保持一致
linewidth=2.5, # 线宽与原始设置一致
label='更新间隔' # 图例标签(需与原始标签一致)
)
# 3. 绘制原始数据点(强调实际数据位置)
ax.scatter(
x, # 原始x坐标
y, # 原始y值
marker='o', # 点型:实心圆
s=100, # 点的大小(面积,约等效于直径10磅的圆)
color='#81AD70', # 填充颜色(与曲线颜色一致)
edgecolor='white', # 边缘线颜色(白色描边增强可见性)
linewidth=1.5, # 边缘线宽度
zorder=2 # 图层顺序(2=显示在曲线图层上方)
)
三、饼图
饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表。在饼图中,每个扇形的弧长(以及圆心角和面积)大小,表示该种类占总体的比例,且这些扇形合在一起刚好是一个完全的圆形。饼图最显著的功能在于表现“占比”。饼图一般需要一个分类数据字段、一个连续数据字段。分类字段的数据,在图表使用的语境下,应当构成一个整体(例如一班、二班、三班,构成了整个高一年级),而不能是独立、无关的。使用时,须确认各个扇形的数据加起来等于100%。
# 导入matplotlib的pyplot模块用于绘图
import matplotlib.pyplot as plt
# 定义饼图各部分的标签和对应数值
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
# 创建图形和坐标轴对象(虽然饼图不需要坐标轴,但这是matplotlib的标准写法)
fig, ax = plt.subplots()
# 设置各部分"爆炸"偏移量(突出显示第二个元素'Hogs',偏移量最大)
explode = (0, 0.1, 0, 0)
# 绘制饼图并设置各种参数
ax.pie(
sizes,
explode=explode, # 设置各部分偏移量
labels=labels, # 添加分类标签
autopct='%1.1f%%', # 显示百分比格式(保留一位小数)
colors=['#D9E4B9', '#CCE198', '#A7C587', '#81AD70'], # 自定义颜色(柔和的色调)
pctdistance=1.2, # 百分比文字与圆心的距离(1.1表示显示在饼图外侧)
labeldistance=0.6, # 标签文字与圆心的距离
shadow=True, # 启用阴影效果
startangle=90, # 起始角度(90度表示从12点方向开始)
textprops={'size': 'larger'}, # 设置文字大小
radius=1.2 # 控制饼图大小(默认1.0,1.2会放大20%)
)
# 显示图形
plt.show()
# matplotlib.pyplot.pie(x, *, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,
# shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True,
# wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False,
# normalize=True, hatch=None, data=None)
# 注:pctdistance > 1 时百分比显示在饼图外侧,labeldistance < 1 时标签显示在内侧附近
# startangle=90 使饼图从12点方向开始逆时针绘制
# textprops 可以设置更多文本属性,如字体、颜色等
# radius参数可以调整饼图尺寸以适应不同大小的画布
【学习网站分享】
一、【数据科学】资源共享平台
地址:https://www.jdwbh.cn/Rstat/
(<div class="content-wrapper"> <section class="content"></section> </div>)
介绍:一个关于数据科学的资源共享平台,有很多课程的大纲、幻灯、数据、代码、云平台和MOOC,参见网页中相关菜单。
1、教学资源下载(以 《Python数据分析基础教程—数据可视化》为例)
2、在线课程
二、图之典
地址:http://tuzhidian.com/(图之典)
介绍:图之典(Gradict)是由图之可视化工作室(Plothis Studio)制作和维护的数据可视化知识分享站点。此站致力于为数据可视化、数据分析、数据新闻、商业智能等相关领域的朋友提供一个学习可视化专业知识的平台。平台的内容主要涵盖了可视化图表的分类和一些专业概念的介绍。每个图表都有一个详情页面,对其进行深入讲解,结构包括:图表名称、简介、图表属性、图表详解、相似图表、设计案例等。
1、网站可直接通过筛选器筛选想要的类型
2、图表介绍也很详细(以下为部分截图)
三、matplotlib
地址:英文版:https://matplotlib.org/(Matplotlib — Visualization with Python)
中文版:https://matplotlib.net/(Matplotlib 中文网)
介绍:Matplotlib 是一个综合库,用于在 Python 中创建静态、动画和交互式可视化。官网包含大量可直接运行的代码片段,可直接下载,方便学习。
1、网站教程有入门教程:
英文版:
中文版:
2、Examples/例子界面会直接按照图的名称,将图呈现出来,方便查找,【Ctrl+F】唤出搜索,可输入对应图的名称进行查找(每个示例都会有对应的代码可下载)。
英文版:
中文版:
3、代码下载(位于每个示例的下方)
英文版:
中文版: