【大数据处理与可视化】柱形图+折线图+饼图及学习网站的分享

【柱形图+折线图+饼图的简单介绍及简单绘制】

一、柱形图

       柱状图,又称长条图、柱状统计图、条图、条状图、棒形图,是一种使用矩形条对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量。在柱状图上,分类变量的每个实体都被表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。柱状图通常利用于较小的数据集分析,亦可横向排列,或用多维方式表达。

以下是一个简单的柱形图绘制代码:

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、代码下载(位于每个示例的下方)

       英文版:

        中文版:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值