数据可视化技术头歌测试合集

努力是为了不平庸~

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰

目录

时间趋势可视化-柱形图

第1关:"大胃王"比赛数据柱形图绘制------绘制柱形图的基本步骤

任务描述

相关知识

观察和处理数据

绘制柱形图

编程要求

测试说明

第2关:"大胃王"比赛数据柱形图绘制------柱形图展示优化

任务描述

相关知识

对柱形图进行美化

[将柱形图保存为 PDF 文件或 png 文件](#将柱形图保存为 PDF 文件或 png 文件)

编程要求

测试说明

时间趋势可视化-柱形图

第1关:"大胃王"比赛数据柱形图绘制------绘制柱形图的基本步骤

任务描述

本关任务:根据实训提供的"大胃王"比赛数据绘制柱形图,熟悉柱形图绘制的基本步骤。

相关知识

为了完成本关任务,你需要掌握:

  1. 观察和处理数据;
  2. 绘制柱形图的基本步骤。
观察和处理数据

先导入matplotlibpandas,用pandas中的read_csv()方法读取 csv 格式文件。

  1. import pandas as pd #导入pandas,用于生成满足绘图要求的数据格式
  2. from matplotlib import pyplot as plt #导入matplotlib,用于绘制柱形图
  3. from matplotlib.backends.backend_pdf import PdfPages #用于将图片保存成pdf
  4. hot_dog = pd.read_csv(r"matplotlib_bar/csv/hot-dog-contest-winners.csv") #返回值为二维标记数据结构DataFrame
  5. hot_dog.head() #返回前五行数据

让我们先看看数据文件的前5行内容:

Year Winner Dogs eaten Country New record
1980 Paul Siederman & Joe Baldini 9.1 United States 0
1981 Thomas DeBerry 9.1 United States 0
1982 Steven Abrams 11.0 United States 0
1983 Luis Llamas 19.5 Mexico 0
1984 Birgit Felden 9.5 Germany 0

这个数据展示的是自1980年开始,每年吃热狗大赛的冠军姓名,冠军吃掉热狗的数量,冠军的国籍,以及是否打破纪录(0表示没有破纪录,1表示破纪录)。

绘制柱形图

首先简单介绍一下绘制柱形图的 bar 函数:

  1. matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)[source]

参数:

  • x:x 坐标,数据类型 intfloat
  • height:柱形高度,数据类型 intfloat
  • width:柱形宽度,默认 0.8,范围 0 - 1 之间
  • bottom:条形的起始位置,也是 y 轴的起始坐标
  • align:条形的中心位置,center, edge边缘
  • color:条形的颜色,r, b, g, #123465等,默认 b
  • edgecolor:边框的颜色,同上
  • linewidth:边框的宽度,默认无,int 类型
  • tick_label:下标的标签,可以是元组类型的字符组合
  • log:y 轴使用科学计算法表示,bool 类型
  • orientation:是竖直条还是水平条,竖直:vertical,水平条:horizontal

其中,最基本和最常用的是x, height, widthcolor四个参数。 接下来让我们开始画一张不同年份冠军吃掉热狗数量的柱形图。

  1. fig, ax = plt.subplots() #subplots返回画布和子图
  2. axis.bar(hot_dog["Year"],hot_dog["Dogs eaten"]) #绘制柱形图,第一个参数为x轴变量,第二个参数为y轴变量
  3. plt.show() #显示图像

此时生成的图像如下图1所示:

图1 默认生成的柱形图

编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,绘制一张不同年份冠军吃掉热狗数量的柱形图。

测试说明

平台会对你编写的代码进行测试,如果你的图形与正确答案图形一致,则通关。

复制代码
# -*- coding: utf-8 -*-
import pandas as pd
from matplotlib import pyplot as plt

hot_dog = pd.read_csv(r"matplotlib_bar/csv/hot-dog-contest-winners.csv")

def plot(): 
    # ********* Begin *********#
    fig, ax = plt.subplots() #subplots返回画布和子图  
    ax.bar(hot_dog["Year"],hot_dog["Dogs eaten"]) #绘制柱形图,第一个参数为x轴变量,第二个参数为y轴变量  
    plt.show()  #显示图像 
    
    # ********* End *********#
    plt.savefig('matplotlib_bar/studentfile/studentanswer/level_1/US.png')
    plt.close()

第2关:"大胃王"比赛数据柱形图绘制------柱形图展示优化

任务描述

本关任务:根据实训提供的"大胃王"比赛数据绘制柱形图,并存为 PDF 或 png 文件。

相关知识

为了完成本关任务,你需要掌握:

  1. 对柱形图进行美化;
  2. 将柱形图保存为 PDF 文件或 png 文件。
对柱形图进行美化

关卡1中的柱形图看起来平平无奇,打破记录的年份这一信息也没有体现,如果我们需要突出打破记录的年份呢?如何用不同的颜色进行表示?此外,系统默认的颜色饱和度很高,能选择更赏心悦目的颜色吗?当然可以!

突出破纪录的年份 在关卡1的基础上,这一步我们可以写一个函数,根据年份是否打破纪录,赋予不同的颜色,然后把各个年份应显示的颜色放入一个列表中。

  1. def newRecordColor():
  2. "打破记录的年份显示为粉红色,其余年份为灰绿色"
  3. list=[]
  4. for i in hot_dog["New record"]:
  5. if i==1:
  6. list.append("#DB7093") #打破记录的年份显示为粉红色
  7. else:
  8. list.append("#5F9F9F") #其余年份显示为灰绿色
  9. return list

别忘了将代码

  1. axis.bar(hot_dog["Year"],hot_dog["Dogs eaten"])

修改为

  1. ax.bar(hot_dog["Year"],hot_dog["Dogs eaten"],color=newRecordColor()) #添加指定的颜色

光秃秃的柱形图并不能让别人快速理解数据的含义,因此,我们应当为柱形图添加必要的文字说明:

  1. ax.set_xlabel("Year") #设置x轴标签
  2. ax.set_ylabel("Dogs Eaten") #设置y轴标签
  3. ax.set_title("Hotdog game scores 1980-2010") #设置标题
  4. ax.set_xlim(1979,2011) #设置x轴数据限值

此时生成的图像如下图1所示:

图1 突出打破纪录年份后的柱形图

调整柱子的间距 图1看起来还不错,只是柱子之间太拥挤了,可以修改宽度,将代码:

  1. ax.bar(hot_dog["Year"],hot_dog["Dogs eaten"],color=newRecordColor())

修改为

  1. ax.bar(hot_dog["Year"],hot_dog["Dogs eaten"],width=[0.6],color=newRecordColor()) #添加指定的宽度

然后修改画布的尺寸,添加代码:

  1. plt.rcParams['figure.figsize'] = (8.0, 4.0) #设置figure_size尺寸

此时生成的图像如下图2如所示:

图2 美化后的柱形图

将柱形图保存为 PDF 文件或 png 文件

如果后续想要用 Illustrator 对图片进行美化,可以将图片保存为 PDF 格式,添加代码:

  1. pdf =PdfPages('matplotlib_bar/studentfile/studentanswer/level_2/hotdog.pdf') #设置pdf保存的路径和文件名
  2. pdf.savefig(fig) #将画布内容保存为PDF
  3. plt.close() #关闭画布窗口
  4. pdf.close() #关闭PDF文件

如果想将图片保存为 png 格式文件,则添加代码:

  1. plt.savefig('matplotlib_bar/studentfile/studentanswer/level_2/hotdog.png') #保存png文件
  2. plt.close() #关闭画布窗口
编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,绘制柱形图,并突出美国人获胜的年份。其中美国人获胜的年份显示为粉红色(#DB7093),其余年份显示为灰绿色(#5F9F9F),画布大小等设置与上文保持一致。

测试说明

平台会对你编写的代码进行测试,如果你的图形与正确答案图形一致,则通关。 图片预期输出示例:


开始你的任务吧,祝你成功!

复制代码
# -*- coding: utf-8 -*-
import pandas as pd
from matplotlib import pyplot as plt

hot_dog = pd.read_csv(r"matplotlib_bar/csv/hot-dog-contest-winners.csv")

def plot(): 
    # ********* Begin *********#
    fig, ax = plt.subplots() #subplots返回画布和子图  
    ax.bar(hot_dog["Year"],hot_dog["Dogs eaten"],width=[0.6],color=unitedStatesColor()) #添加指定的宽度
    ax.set_xlabel("Year") #设置x轴标签  
    ax.set_ylabel("Dogs Eaten") #设置y轴标签  
    ax.set_title("Hotdog game scores 1980-2010") #设置标题  
    ax.set_xlim(1979,2011) #设置x轴数据限值  
    plt.rcParams['figure.figsize'] = (8.0, 4.0) #设置figure_size尺寸  

    # ********* End *********#
    plt.savefig('matplotlib_bar/studentfile/studentanswer/level_2/US.png')
    plt.close()


def unitedStatesColor():
    # ********* Begin *********#
    list=[]  
    for i in hot_dog["Country"]:  
        if i=='United States':  
            list.append("#DB7093") #打破记录的年份显示为粉红色  
        else:  
            list.append("#5F9F9F") #其余年份显示为灰绿色  
    return list  
    # ********* End *********#
相关推荐
databook5 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar6 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780517 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_7 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机13 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机14 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机14 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机14 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i15 小时前
drf初步梳理
python·django
每日AI新事件15 小时前
python的异步函数
python