大数据分析如何在Python中生成FiveThirtyEight图?如果你阅读大数据分析文章,则可能已经迷失了FiveThirtyEight的内容。自然,他们的出色可视化使你印象深刻。你想制作自己的出色可视化文件,所以问百度一下如何做到这一点。你收到了一些答案,但它们相当模糊。你仍然无法自己完成图表。在大数据分析如何在Python中生成FiveThirtyEight图中,我们将为你提供帮助。使用Python的matplotlib和pandas,我们将看到复制任何FiveThirtyEight(FTE)可视化的核心部分都相当容易。我们将从这里开始:

  

  并且,在大数据分析如何在Python中生成FiveThirtyEight图的结尾,到达此处:

  

  要继续学习,你至少需要一些Python的基础知识。如果你知道方法和属性之间有什么区别,那么你就很好了。

  引入数据集

  我们将使用描述1970年至2011年美国授予女性的单身汉百分比的数据进行处理。我们将使用由大数据分析家汇编的数据集

  如果你想自己编写代码,请从Randal的博客中下载数据。为了节省时间,你可以跳过下载文件,而只需将直接链接传递给pandasread_csv() 函数。在以下代码单元中,我们:

  1)导入pandas模块。

  2)将指向数据集的直接链接作为分配string给名为的变量direct_link。

  3)使用读取数据read_csv(),并将内容分配给women_majors。

  4)使用info() 方法打印有关数据集的信息。我们正在寻找行和列的数量,并同时检查null值。

  5)使用该head() 方法显示前五行,以更好地理解数据集的结构。

  

  

  

  除了

  Year列,每隔一列的名称表示学士学位的主题。“学士学位”列中的每个数据点都代表授予女性学士学位的百分比。因此,每一行都描述了给定年份中授予女性的各种学士学位的百分比。如前所述,我们拥有1970年至2011年的数据。为确认后一个限制,我们使用tail() 方法打印数据集的最后五行:

  

  我们的FiveThirtyEight图的上下文

  几乎每个FTE图都是文章的一部分。图形通过说明一个小故事或一个有趣的想法来补充文本。在复制FTE图时,我们需要注意这一点。为了避免偏离大数据分析如何在Python中生成FiveThirtyEight图的主要任务,我们仅假装我们已经撰写了一篇有关中国教育中性别差距的演变的文章。现在,我们需要创建一个图表,以帮助读者直观地了解1970年情况对女性而言真的很差的单身汉的性别差异的演变。我们已经设定了20%的阈值,现在我们想要绘制每位女性的变化趋势图1970年,女性毕业生的学士学位比例不到20%。让我们首先确定那些特定的学士学位。在以下代码单元中,我们将:

  1)用途.loc,一个基于标签的索引,来:

  a)选择第一行(对应于1970年);

  b)仅在值小于20的情况下选择第一行中的项目;该Year字段也会被检查,但显然不会包括在内,因为1970年大于20。

  2)将结果内容分配给under_20。

  

  使用matplotlib的默认样式

  让我们开始研究图表。我们首先来看看默认情况下可以构建的内容。在下面的代码块中,我们将:

  1)运行Jupyter魔术%matplotlib以使Jupyter和matplotlib有效地协同工作,并添加inline使我们的图形显示在笔记本中。

  2)通过使用绘制图形plot() 的方法上women_majors。我们传入plot()以下参数:

  a)x–指定women_majors用于x轴的列;

  b)y–指定women_majors要用于y轴的列;我们将使用under_20存储在.index该对象属性中的索引标签;

  c)figsize–将图形的大小设置为tuple,(width, height)以英寸为单位。

  3)将绘图对象分配给一个名为的变量under_20_graph,并打印其类型以表明熊猫使用matplotlib引擎盖下的对象。

  

  

  使用matplotlib的第五十八样式

  上面的图形具有某些特征,例如,棘的宽度和颜色,y轴标签的字体大小,不存在网格等。所有这些特征构成了matplotlib的默认样式。作为简短的括号,值得一提的是,在大数据分析如何在Python中生成FiveThirtyEight图中,我们将使用一些技术术语来表示图形的各个部分。如果你感到迷茫,可以参考以下图例。

  

  除了默认样式外,matplotlib还带有一些内置样式,我们可以随时使用它们。要查看可用样式的列表,我们将:

  1)以名称 导入matplotlib.style 模块style。

  2)探索matplotlib.style.available(此模块的预定义变量)的内容,其中包含所有可用的内置样式的列表。

  

  你可能已经观察到有一种内置样式称为

  fivethirtyeight。让我们使用这种样式,看看结果如何。为此,我们将使用同一模块(我们以名称导入)中恰当命名的use() 函数。然后,我们将使用与之前相同的代码来生成图形。matplotlib.stylestyle

  

  哇,那是一个重大变化!关于我们的第一个图,我们可以看到该图具有不同的背景色,带有网格线,没有任何刺,主要刻度标签的粗细和字体大小均不同,等等。你可以阅读这里的fivethirtyeight样式的技术说明–它还应该使你对使用该样式时后台运行的代码有一个很好的了解。样式表的作者Cameron David-Pilon在这里讨论了一些特征。

  matplotlib第五十八样式的局限性

  总而言之,使用

  fivethirtyeight风格显然使我们更接近我们的目标。尽管如此,仍有许多工作要做。让我们检查一个简单的FTE图,并查看我们还需要添加到图中的内容。

  

  通过将上面的图表与到目前为止所做的比较,我们可以看到我们仍然需要:

  1)添加标题和副标题。

  2)删除块样式图例,并在相关绘图线附近添加标签。我们还必须使这些标签周围的网格线透明。

  3)添加一个签名底部栏,其中提到图形的作者和数据源。

  4)添加一些其他小的调整:

  a)增加刻度线标签的字体大小;

  b)在y轴的主要刻度标签之一上添加“%”符号;

  c)移除x轴标签;

  d)在y = 0处加粗水平网格线;

  e)在y轴的刻度标签旁边添加一条额外的网格线;

  f)增加图形的侧边距。

  

  为了最大程度地减少生成图形所花费的时间,请务必避免开始添加标题,副标题或任何其他文本片段,这一点很重要。在matplotlib中,通过指定x和y坐标来定位文本片段,如我们在以下某些部分中所见。要详细复制上面的FTE图,请注意,我们必须将y轴的刻度标签与标题和副标题垂直对齐。我们希望避免出现我们想要的垂直对齐方式,通过增加刻度线标签的字体大小而丢失它的情况,然后必须再次更改标题和副标题的位置。

  

  出于教学目的,我们现在将逐步调整FTE图。因此,我们的代码将跨越多个代码单元。但是,实际上,只需要一个以上的代码单元。

  自定义刻度标签

  我们将从增加刻度标签的字体大小开始。在以下代码单元中,我们:

  1)使用与之前相同的代码绘制图形,然后将结果对象分配给fte_graph。分配变量使我们能够重复轻松地在对象上应用方法或访问其属性。

  2)使用具有以下参数的tick_params() 方法来增加所有主要刻度标签的字体大小:

  a)axis–指定我们要修改的刻度标签所属的轴;这里我们要修改两个轴的刻度标签;

  b)which –指示要影响的刻度标签(主要或次要标签;如果不知道区别,请参见前面显示的图例);

  c)labelsize –设置刻度标签的字体大小。

  

  

  你可能已经注意到我们style.use('fivethirtyeight')这次没有使用。这是因为一旦在我们的代码中首次声明,任何matplotlib样式的首选项都会变为全局首选项。我们之前将样式设置为fivethirtyeight,从那里所有后续图形都继承了该样式。如果出于某种原因要返回默认状态,请运行style.use('default')。现在,我们将通过对y轴的刻度标签进行一些调整来建立以前的更改:

  1)我们将50%(y轴的最高可见刻度)添加一个“%”符号。

  2)我们还在其他可见标签之后添加了一些空白字符,以使它们与新的“ 50%”标签优雅地对齐。

  要对y轴的刻度标签进行这些更改,我们将使用

  set_yticklabels() 方法以及label参数。从下面的代码可以推断出,此参数可以采用混合数据类型的列表,并且不需要传入任何固定数量的标签。

  

  

  在y = 0处加粗水平线

  现在,我们将在y坐标为0的水平线上加粗。为此,我们将使用

  axhline() 方法来添加新的水平网格线,并覆盖现有的水平网格线。我们使用的参数axhline()是:

  1)y –指定水平线的y坐标;

  2)color –指示线条的颜色;

  3)linewidth –设置线宽;

  4)alpha–调节线条的透明度,但是我们在这里使用它来调节黑色的强度;值alpha范围从0(完全透明)到1(完全不透明)。

  

  

  添加额外的垂直线

  如前所述,我们必须在y轴刻度标签的紧邻处添加另一条垂直网格线。为此,我们只需调整x轴值的范围即可。增大范围的左限将导致我们需要额外的垂直网格线。在下面,我们使用

  set_xlim() 方法与不言自明的参数left和right。

  

  

  生成签名栏

  上面显示的示例FTE图的签名栏具有一些明显的特征:

  1)它位于图的底部。

  2)作者的姓名位于签名栏的左侧。

  3)数据源在签名栏的右侧提到。

  4)文本具有浅灰色(与图形的背景颜色相同)和深灰色背景。

  5)作者姓名和来源姓名之间的区域也具有深灰色背景。

  

  添加这样的签名栏似乎很困难,但是通过一点点巧思,我们可以很容易地完成它。我们将添加一个文本片段,为其提供浅灰色,并为深灰色的背景色。我们将作者的姓名和来源都写在一个文本片段中,但是我们将这两个空格隔开,使得它们的结尾在最左边,另一个在最右边。令人高兴的是,空白字符也将获得深灰色背景,这将产生签名栏的效果。我们还将使用一些空格字符来对齐作者的姓名和源名称,正如你将在下一个代码块中看到的那样。这也是移除x轴标签的好时机。这样,我们可以更好地看到签名栏如何适合图形的整体方案。

  1)通过将False值传递给set_visible()我们应用于对象的方法来删除x轴的标签fte_graph.xaxis.label。这样想:我们访问的xaxis属性fte_graph,然后访问的label属性fte_graph.xaxis。然后我们终于申请set_visible()了fte_graph.xaxis.label。

  2)以上述方式在图形上添加一小段文本。我们将使用具有以下参数的text() 方法:

  a)x –指定文本的x坐标;

  b)y –指定文本的y坐标;

  c)s –指示要添加的文本;

  d)fontsize –设置文本的大小;

  e)color–指定文字的颜色;我们在下面使用的值的格式为十六进制;我们使用这种格式来完全匹配整个图形的背景颜色(如样式代码中fivethirtyeight所指定);

  f)backgroundcolor –设置文本片段的背景色。

  

  

  通过反复试验找到添加的文本片段的x和y坐标。你可以通过floats向x和y参数,这样你就可以控制文本的位置高的精度水平。还值得一提的是,我们通过以下方式调整了签名栏的位置,即添加了一些视觉上令人耳目一新的横向边距(我们之前讨论了此调整)。为了增加左边距,我们只是降低了x坐标的值。为了增加右边的字符,我们在作者的名字和源的名字之间添加了更多的空格字符–这将源的名字推到右边,从而增加了所需的边距。

  另一种签名栏

  你还将遇到一种稍微不同的签名栏:

  

  FiveThirtyEight这种签名栏也可以很容易地复制。我们将只添加一些灰色文本,并在其上方添加一行。我们将通过添加多个下划线字符(“ _”)的文本片段来创建线条的视觉效果。你可能想知道为什么我们不习惯axhline()在所需的y坐标上简单地画一条水平线。我们不这样做,因为新行将向下拖动图形的整个网格,并且不会产生所需的效果。我们还可以尝试添加箭头,然后删除指针,以便最终得到一条线。但是,“下划线”解决方案要简单得多。在下一个代码块中,我们将实现刚刚讨论的内容。在前面的部分中,我们应该已经熟悉我们在这里使用的方法和参数。

  

  

  添加标题和字幕

  如果你检查

  几个FTE图,你可能会注意到标题和副标题的这些模式:

  1)标题几乎总是带有副标题。

  2)标题提供了从特定图形看的上下文角度。标题几乎从来都不是技术性的,它通常只表示一个简单的想法。它也几乎从来没有情绪中立。在上方的Fandango图表中,我们可以看到一个简单的“具有情感动感”的标题(“ Fandango LOVES电影”),而没有一个平淡的“各种电影分级类型的分布”。

  3)字幕提供了有关图形的技术信息。该信息经常使轴标签变得多余。由于我们已经删除了x轴标签,因此应谨慎定制相应的字幕。

  4)在视觉上,标题和副标题具有不同的字体粗细,并且它们是左对齐的(与大多数居中的标题不同)。而且,如我们先前所示,它们与y轴的主要刻度标签垂直对齐。

  现在,请注意上面的观察,在图中添加标题和副标题。在下面的代码块中,我们将基于到目前为止已编码的内容,我们将:

  5)通过使用与text()在签名栏中添加文本相同的方法来添加标题和副标题。如果你已经对matplotlib有一定的经验,你可能想知道为什么我们不使用title()andsuptitle()方法。这是因为这两种方法在精确移动文本方面都具有可怕的功能。的唯一新参数text()是weight。我们用它来加粗标题。

  

  

  如果你想知道,原始FTE图形中使用的字体是Decima Mono(付费墙字体)。因此,我们将坚持使用Matplotlib的默认字体,无论如何看起来都非常相似。

  添加色盲友好的颜色

  现在,我们有了笨拙的矩形图例。我们将摆脱它,并在每条绘图线附近添加彩色标签。每行将具有特定的颜色,并且相同颜色的单词将命名该行所对应的学士学位。但是,首先,我们将修改绘图线的默认颜色,并添加

  

  色盲友Bang Wong设计的色盲我们将使用上图中的值,为可色盲的颜色编译RGB参数列表。附带说明一下,我们避免使用黄色,因为带有该颜色的文本片段在图形的深灰色背景颜色上不易阅读。编译完此RGB参数列表后,我们将其传递给我们先前代码中使用color的plot()方法的参数。请注意,matplotlib将要求RGB参数在0-1范围内,因此我们将每个值除以255(最大RGB值)。我们不会费心将零除,因为0/255 = 0。

  

  

  好的颜色:

  通过添加彩色标签来更改图例样式

  最后,我们通过使用

  text()以前使用的方法。唯一的新参数是rotation,我们使用它旋转每个标签,以使其优雅地适合图形。我们还将在此处做一些技巧,通过简单地修改标签的背景颜色以使其与图形的颜色相匹配,使标签周围的网格线透明。在之前的代码中,我们仅plot()通过将legend参数设置为来修改方法False。这将使我们摆脱默认的图例。由于colors列表已经存储在上一个单元格的内存中,因此我们也跳过了重新声明列表的操作。

  

  

  下一步

  就是这样,我们的图形现在可以发布了!为了简短地回顾一下,我们从生成具有matplotlib默认样式的图形开始。然后,我们通过一系列步骤将该图带入“ FTE级”:

  1)我们使用了matplotlib的内置fivethirtyeight样式。

  2)我们添加了标题和副标题,并分别对其进行了自定义。

  3)我们添加了签名栏。

  4)我们删除了默认图例,并添加了彩色标签。

  5)我们还进行了一系列其他小的调整:自定义刻度线标签,在y = 0处加粗水平线,在刻度线标签附近添加垂直网格线,删除x轴的标签,并增加y的横向边距-轴。

  要基于你所学的知识,请考虑以下几个步骤:

  1)为其他学士学位生成相似的图形。

  2)生成各种FTE图:直方图,散点图等。

  3)探索matplotlib的图库,搜索可能的元素以丰富你的FTE图(例如插入图像或添加箭头等)。添加图像可以使你的FTE图达到一个全新的水平:

  

摘自:https://www.aaa-cg.com.cn/data/2784.html

大数据分析如何在Python中生成FiveThirtyEight图相关推荐

  1. 中boxplot函数的参数设置_如何在Python中生成图形和图表

    在本章中,我们将学习如何在Python中生成图形和图表,同时将使用函数和面向对象的方法来可视化数据. Python中常用的一些可视化数据包括以下几种. Matplotlib. Seaborn. ggp ...

  2. python制作词云时出现figure1 figure2_「中文版」如何在Python中生成任何形状的词云...

    有机会介绍一些有趣的项目,向更多人甚至是非技术人员推广Python和人工智能的东西还是蛮有意义的.话不多说,本文将介绍如何将你喜欢的文章或者歌词做一个炫丽的词云图片. 什么是词云呢?简单来说就是,将提 ...

  3. python三维图视角旋转_如何在python中旋转3d图? (或作为动画)使用鼠标旋转三维视图...

    我有这段代码,其中包含一个3D图.我在Spyder中运行代码;我想知道是否可以使这个绘图旋转(360度)并保存. 谢谢! P.s.对不起,如果这是一个愚蠢的问题,但我是Python的newby.如何在 ...

  4. python词云自定义形状_如何在Python中生成任何形状的词云

    作者 | Julia Kho 编辑| 代码医生团队 在本文中,我们将探讨如何在python中以您想要的任何形状生成文字云.我们将通过一个示例来说明如何在房屋的自定义形状中创建简单的文字云,如上图所示. ...

  5. python下载bt文件_给定一个.torrent文件,如何在python中生成一个磁力链接?

    小编典典 您可以使用从BitTorrent中提取的bencode模块来执行此操作. 为了展示一个例子,我从这里下载了Ubuntu的torrent ISO: http://releases.ubuntu ...

  6. 返回1到n的所有组合python_如何在Python中生成0-1矩阵的所有可能组合?

    如何生成大小为K的0-1矩阵的所有可能组合? 例如,如果我取K = 2且N = 2,我得到以下组合. combination 1 [0, 0; 0, 0]; combination 2 [1, 0; ...

  7. python中save是什么意思_如何在Python中生成save函数

    所以我用python做了一个记事本克隆,但是我被卡住了. 我想将doNothing()函数改为Save函数. 我希望用户能够命名他在程序中写的文件,并将其保存在他想要的地方.在from tkinter ...

  8. python 条形图填充疏密_如何在python中绘制密度图?

    我有一个.txt文件,其中包含2D地图中规则间隔点的x,y值,第三个坐标是该点的密度.4.882812500000000E-004 4.882812500000000E-004 0.9072267 1 ...

  9. python在地图上画路线_如何在python中绘制热地图(实例)

    当我们进行数据挖掘工作.或者进行数据可视化以更好地展示成果时,很多时候我们需要借助到热地图的帮助.今天,我们就来介绍一下在seaborn绘图库中热地图heatmap的使用方法及参数设置. 热地图使用场 ...

最新文章

  1. oss2模块和aliyun oss连接
  2. 第 3 章 镜像 - 010 - base 镜像
  3. 私有化仓库的 GO 模块使用实践
  4. navicat设置数据表的外键
  5. c++ mysql 导入sql_mysql导入sql文件命令和mysql远程登陆使用详解
  6. Oracle中使用SQL语句修改字段类型
  7. LaTeX报错 Difference (2) between bookmark levels is greater (hyperref) than one, level fixed.
  8. svn和git的区别
  9. 【项目管理】投资回报率 ROI(Return on Investment)
  10. java输入无名粉_05·无名粉店(上)
  11. 什么是大小端,为什么会出现大小端,如何检测是大端还是小端
  12. 百度地图离线开发demo-迁徙图
  13. 远程配置深度学习服务器详细教程,配置Conda+PyTorch环境
  14. 五级流水线CPU的实现与改进
  15. 人人农场 renren 外挂 Java 实现
  16. 10蓝牙模块 hm 电脑蓝牙 连接_树莓派与HM-10蓝牙模块搭建iBeacon | 学步园
  17. 103 THREE.JS 实现局部纹理刷新
  18. 深入浅出学习Hive
  19. SAP MM——采购业务模块流程 创建采购订单基础流程
  20. 【CN精品系统】《 Ghost_Win7 SP1 电脑公司通用版 v4.0 》 装机版

热门文章

  1. 有限体积法求解二维方腔流(一)——动量方程和连续性方程的离散
  2. 《聪明的投资者》笔记
  3. Java实现字符串转换成整数
  4. Python检查一组数据是否能构成和谐集
  5. 提高逻辑思维能力从写作开始
  6. JS字符串替换指定字符
  7. vue touch事件使用
  8. java poi word excel 表格 图标
  9. js截取字符串的三种方法
  10. Python 数组操作