将带直线的散点图图用实线连接起来的方法?

Matplotlib 最重要的特性之一就是具有良好的操作系统兼容性(跨平台)和图形显示底层接口兼容性(graphics backend)。Matplotlib 支持几十种图形显示接口与输出格式,这使得用户无论在哪种操作系统上都可以输出自己想要的图形格式。

然而近几年,Matplotlib 的界面与风格似乎有点跟不上时代。新的画图工具,如 R 语言中的 ggplot 和 ggvis,都开始使用 D3js 和 HTML5canvas 构建的网页可视化工具。相比之下,Matplotlib 更显沧桑。目前,新版的 Matplotlib 已经可以轻松实现主流的绘图风格,人们不断在 Matplotlib

虽然已经有了封装后的高级工具,但是掌握 Matplotlib 的语法更能让你灵活地控制最终的图形结果。因此,即使新工具的出现说明社区正在逐渐放弃直接使用底层的 Matplotlib API 画图的做法,但我依然觉得 Matplotlib 是数据可视化技术中不可或缺的一环。

# 把字符串转换成时间类型的函数 # 加载数据并完成时间转换 # 马拉松前半程成绩与全程成绩的对比 # 图中的实点线表示一个人全程保持一个速度跑完马拉松,即上半程与下半程耗时相同 # 然而实际的成绩分布表明,绝大多数人都是越往后跑得越慢 # 如果前后半程差异系数(split difference)小于 0,就表示这个人是后半程加速型选手 # 绘制差异系数的分布图,0 表示前后半程耗时相同 # 后半程加速的选手数量 # 再来看看前后半程差异系数与其他变量有没有相关性 # 用一个矩阵图pairgrid画出所有变量间的相关性 # 从图中可以看出,虽然前后半程差异系数与年龄没有显著的相关性,但是与比赛的最终成绩有显著的相关性 # 全程耗时最短的选手,往往都是在前后半程尽量保持节奏一致、耗时非常接近的人 # 来看男女选手前后半程差异系数的频次直方图 # 有趣的是,在前后半程耗时接近的选手中,男选手比女选手要多很多 # 男女选手的分布看起来几乎都是双峰分布 # 将男女选手不同年龄(age)的分布函数画出来,用小提琴图(violin plot)进行这两种分布的对比 # 对比两个由年龄构成函数的小提琴图。在数组中创建一个新列,表示每名选手的年龄段 # 用小提琴图表示不同性别、年龄段的前后半程差异系数 # 可以看出男女选手的分布差异:20 多岁至 50 多岁各年龄段的男选手的前后半程差异系数概率密度都比同年龄段的女选手低一些(或者可以说任意年龄都如此) # 所有八十岁以上的女选手都比同年龄段的男选手的表现好。这可能是由于这个年龄段的选手寥寥无几,样本太少。 # 再看看后半程加速型选手的数据:他们都是谁?前后半程差异系数与比赛成绩正相关吗? # 用 regplot 为数据自动拟合一个线性回归模型 # 男女选手的前后半程差异系数与比赛成绩 # 似乎有显著后半程加速的选手都是比赛成绩在 15 000 秒,即 4 小时之内的种子选手。 # 低于这个成绩的选手很少有显著的后半程加速。

一个用 Python 做前端的 JavaScript 可视化程序库,支持非常强大的交互可视化功能,可以处理非常大的批数据和 / 或流数据。Python 前端会生成一份 JSON数据结构,通过 Bokeh 的 JS 引擎进行渲染。

Plotly 公司开发的同名开源产品,其设计理念与 Bokeh 类似。由于 Plotly 从一开始就是主打产品,因此得到了高水平的开发支持。可以免费使用。

一个侧重于大数据动态可视化的项目。由于它建立在 OpenGL 接口上并且可以充分利用电脑的显卡,因此可以渲染出令人叹为观止的大型数据可视化图。

与 采用声明式(declarative)图形表示方法,是在数据可视化基础语言多年的研究成果上形成的产品。最终图形渲染是 JavaScript,但是 API 与编程语言无关。这就是用 实现的 Python API。虽然目前还不成熟,但我依然因这款产品也许可以为 Python 和其他编程语言提供相同的数据可视化基础理念而兴奋不已。

Python 社区里的数据可视化空间可谓日新月异,很可能我现在写的这些内容在刚刚出版时就已经过时了。请及时关注 Python 数据可视化的最新进展!

《温故知新之用图表说话》由会员分享,可在线阅读,更多相关《温故知新之用图表说话(56页珍藏版)》请在人人文库网上搜索。

1、温故知新 之 用图表说话,某公司市场报告Page1,“在整个行业中,我公司业绩一直是很不错的,2000年以来我们的业绩一直在持续增长,当然,除了2002年因*原因而使业绩有所下降以外。” 问题:哪儿有增长?,某公司市场部门经理,准备了一份关于目前行业内竞争状况和公司业绩的报告。,某公司市场报告Page2,“与我们公司的主要竞争对手相比较,我们的投资回报率排在首位,已经达到了14%” 问题:什么排在第一位?谁排在第一位?不是上下波动么?,某公司市场部门经理,准备了一份关于目前行业内竞争状况和公司业绩的报告。,某公司市场报告Page3,“而且自从2000年以来,在其他三个竞争对手丢掉市场份额的同时

2、,我们和一个竞争对手的市场份额却在增长。” 问题:%¥#,某公司市场部门经理,准备了一份关于目前行业内竞争状况和公司业绩的报告。,哪些场合适合用PPT?,看完之后,你是否有同样的疑问: 是我穿越了,还是他穿越了?,5,因为。 在我们看来,至少得这样,在过去的5年中我公司业绩持续增长,尽管2002年因*原因造成业绩下滑,但销售额仍从2000年的120万增长至2005年的340万,我公司投资回报率维持较高水平,与4个竞争对手相比,我们以在2005年14%的投资回报率排在首位,我公司与B公司市场份额有所增长,自2000年以来,在其他竞争对手丢失部分市场份额的同时,我公司与B公司分别获得4%和3%

3、的市场份额增长,图表在沟通中的作用 图表用途 关键因素,成功图表的几个关键因素,除春节、国庆点击明显下降外,每月都保持在8百人,4万次左右,每张图表都表达一个明确的信息,图表与标题相辅相成,清晰易懂,少而精,格式简单明了且前后连贯,图表类型 数据类 概念类,图表类型,数据类图表,概念类图表,数值?,人员?,地点?,时间?,饼图,表格,组织架构图,条形图,甘特图,地图,线性图,柱形图,流程图,散点图,矩阵,概念,数据类图表 确定信息 相对关系 选择图表,制作以数据为基础的图表三部曲,确定要表达的信息,1月份每个地区的销售百分比,看到这些数字你能想到 哪些表达方式?,需要表达的主要信息决定了图表的

4、形式,同样的表格可以选择不同的重点来表达,1,2,3,用何种方式,强调何种信息完全由你决定,主要信息设置为标题,神秘的标题 公司销售额趋势变化 产品地域分布情况 资产分配百分比 雇员年龄分布 薪水与利润的关系 将主要的信息设置为标题 西部地区利润占公司总额近半 北部收益份额最小 标题的要求 反应了最主要的信息 简介而且必须切中关键点,确定相对关系,成分相对关系,项目相对关系,时间序列关系,频率分布关系,相关性关系,五种基本关系比较,举例,预计在今后10年多的时间里销售额将增长。 雇员的最高工资额在30,000到35,000美元之间。 汽油并不是牌子越响价格越高其性能就越好。 9月份里,6个区域

5、的营业额大致相同。 销售部经理在他的领域只话费了他15%的时间。 奖金的多少与工龄长短无关。 去年,人员更替主要发生在30-35岁的年龄段。 C区域的产品生产力排名垫底。 我们公司的平均收入份额正在下降。 制造业占有资金的最大份额 利润率与工资之间有一定的关系 8月份,两种产品的产值远远超过另外6种产品,时间序列,频率分布,相关性,项目,成分,相关性,频率分布,项目,时间序列,成分,相关性,项目,选择图表类型,饼图,条形图,柱形图,折线图,散点图,通过不同的图表表达特定的关系,成分相对关系,饼图是5种图表形式中最少使用,但同时是最可能被滥用的; 使用饼图的原则 成分不宜多于6种,超过则将未选中

6、的列为“其他”; 将最重要的部分紧靠在12点钟的未知,并且用强烈的颜色以显突出; 饼图比条图优越在于能够清晰展示一个整体。如果,一旦需要比较2个或者两个以上整体时,马上选择条形图,实例,项目相对关系,项目相对关系可以使用条形图来表示 项目可以进行排序; 条形图之间的距离比条的宽度要小; 使用最能对比的颜色以及阴影来强调重要的项目,以强调信息的标题; 为凸显数字可以在顶端显示刻度;或者在末尾标注数字,不要同时显示; 展现数字时,不要显示小数点后的数字 使用条形图而不是柱形图表示项目相对关系原因 避免误解为时间序列 项目名称冗长,条形图有足够的空间,时间序列相对关系,显示随着时间变化而变化的关系

7、如果图表只有少数的几个点(7个以内)使用柱形图图;否则建议折线图; 柱形图强调的数量级别,适合小段时间发生事件; 折线图强调的是角度的运动和图像的变化。,折线图,折线图是5种图里使用最多的一种,容易绘制,简洁紧凑 使用折线图的原则 趋势线一定要比基准线粗 基准线比坐标线粗 垂直坐标线或水平坐标线等帮助观察者看清参考值的内容,以需要添加 折现图的变形 分组折线图 表面细分图(面积图),A,B,C,D,E,A,B,A,C,A,D,像面条一样的折线图,这样解决问题,分组折线图,面积图,4个面或者更少 逐渐累积增加或减少 如果有重合,采取上页的处理方式,频率分布相对关系,展示的是有多少项目会落入一个具

8、有一定特征的数据段当中 范围的大小:不少于5组以及不多于20组;数量少用柱形图,多用折线图 分组的大小:最好使用规模大致相当的组;特殊情况采用不等的间距; 清晰地标注:对于组的规模应该给出清晰的解释,譬如0-10,10-20,20-30就不能说明问题;建议小于10,10-19.99,20-29.99等,可能的结果,实例,分组的诀窍,数量:太少则不够明显,太多则破坏其作用,一般在5-20个分组之间 分组的大小:一般来说,规模应该大致相同,间隔不等会破坏分布图的整体形象;但有时,不均等的分布会更好,比如,个人收入,收入范围很广,但是低收入的人远比高收入的人多,所以低收入的间隔应小于高收入的间隔 清

9、晰的标注:不重复,相关性相对关系,两个变量符合或者不符合所期望的模式 比较常用的是散点图 成对条形图 散点图标注的重要性:哪些标,哪些不标,清晰明确,期望的模式,散点图的变种,两种项目的相对关系,气泡图,注意:千万别画成,概念类图表 寻找关键字 连接关键字 加标题,用概念和比喻说话,分类 概念性视觉图 视觉性比喻 概念性视觉图 抽象的几何图形如箭头、圆圈以及三角 视觉性比喻 通过一些图形来表达信息,譬如迷宫表示问题、梯子表示进步和困难、会议室表示在开会等等。,制作概念性视觉图三部曲,寻找关键词,阅读与谈话的时,抓住文字或语言中的 关键词(透视事物本质的能力) 对方的谈话内容可以被“图化” 训练

10、提高,连接关键词,箭头的应用 连接关系:时序、因果、推理、相关的方式等 箭头有实线、点状线、虚线等变化,可以分别代表不同的含义(如点状线代表推论、实线代表时间或因果关系等等) 图形思考可以测试逻辑的严密性,关键词无法链接,说明逻辑存在问题。,从问题开始逐步分解 使用推理、假设逻辑树解决问题 树的结束点即是原因,鱼骨图(因果推理关系),如何提高印刷品质量(因果关系),箭头的应用,连接关键词,图形的应用 除了用箭头,我们还可以用图形(一般是圆形或方框)来表达事物的本质或加深对事物的理解。 图形一般包括:覆盖、交集、层级、类似绘制地图的方式等各类组合。,覆盖,交集,层级,连接关键词,图形应用实例,a

11、、重要而紧急的事情(交集) b、信息说明图(覆盖),重要的事,紧急的事,紧急而重要的事,不紧急也不重要的事,企业数量,1、生存危机(Living) 客户 产品 现金流,2、领导能力危机(Leading) 决策方法 管理团队 组织结构,3、竞争危机(Competition) 新品研发 信息技术 新业务发展,4、企业文化危机(Culture) 管理效率 市场反应 经营道德,c、中国企业危机周期(层级),加标题和解说,标题 标出主题,告诉读者这幅图在说什么 标题可以是事前,经过分析后再调整;也可以在图解完成后标注 金字塔原则 标题要一针见血、正中图解本质,不要有“有关”、“的意见”的说法,根据“金字

12、塔原则”,应该把结论放在标题上或每章节的第一段。 如:不要用“员工对现有考核体系公平性的看法”这类标题,而使用“员工认为现有考核体系很不公平”类的标题,解说 图解只是“大略”,发散 避免误解 解说可以限制思维扩散的空间,来达到“客观”和“标准化”的目的。作图时应对图形稍加说明,使图意清楚、客观。,加标题和解说,交流与讨论 玩转图表,“以上的虽然是标准, 但太死板了”

建议:此文较硬,建议先收藏

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量误图,散点图等。级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错

对于图表来说,最简单的莫过于作出一个单一函数 的图像。本节中我们首先来介绍创建这种类型图表。本节和后续小节中,我们都会使用下面的代码将我们需要的包载入到 notebook 中:

对于所有的 Matplotlib 图表来说,我们都需要从创建图形和维度开始。图形和维度可以使用下面代码进行最简形式的创建:

在 Matplotlib 中,图形(类plt.Figure的一个实例)可以被认为是一个包括所有维度、图像、文本和标签对象的容器。维度(类plt.Axes的一个实例)就是你上面看到的图像,一个有边界的格子包括刻度和标签,最终还有我们画在上面的图表元素。在本书中,我们会使用变量名fig来指代图形对象,以及变量名ax来指代维度变量。

一旦我们创建了维度,我们可以使用ax.plot方法将数据绘制在图表上。下面是一个简单的正弦函数图形:

同样的,我们可以使用 pylab 接口(MATLAB 风格的接口)帮我们在后台自动创建这两个对象:

如果我们需要在同一幅图形中绘制多根线条,只需要多次调用plot函数即可:

这就是在 Matplotlib 中绘制简单函数图像的所有接口了。下面我们深入了解一下控制坐标轴和线条外观的细节。

调整折线图:线条颜色和风格

你可能第一个想到需要进行调整的部分就是线条的颜色和风格。plt.plot()函数接受额外的参数可以用来指定它们。通过指定color关键字参数可以调整颜色,这个字符串类型参数基本上能用来代表任何你能想到的颜色。可以通过多种方式指定颜色参数:

所有 HTML 颜色名称可以在这里[3]找到。

如果没有指定颜色,Matplotlib 会在一组默认颜色值中循环使用来绘制每一条线条。

类似的,通过linestyle关键字参数可以指定线条的风格:

# 还可以用形象的符号代表线条风格

如果你喜欢更简洁的代码,这些linestyle和color参数能够合并成一个非关键字参数,传递给plt.plot()函数:

上面的单字母颜色码是 RGB 颜色系统以及 CMYK 颜色系统的缩写,被广泛应用在数字化图像的颜色系统中。

还有很多其他的关键字参数可以对折线图的外观进行精细调整;可以通过在 IPython 中使用帮助工具查看plt.plot()函数的文档来获得更多细节内容。

调整折线图:坐标轴范围

Matplotlib 会自动选择非常合适的坐标轴范围来绘制你的图像,但是有些情况下你也需要自己进行相关调整。使用plt.xlim()和plt.ylim()函数可以调整坐标轴的范围:

如果某些情况下你希望将坐标轴反向,你可以通过上面的函数实现,将参数顺序颠倒即可:

相关的函数还有plt.axis()(注意:这不是plt.axes()函数,函数名称是 i 而不是 e)。这个函数可以在一个函数调用中就完成 x 轴和 y 轴范围的设置,传递一个[xmin, xmax, ymin, ymax]的列表参数即可:

当然plt.axis()函数不仅能设置范围,还能像下面代码一样将坐标轴压缩到刚好足够绘制折线图像的大小:

还可以通过设置'equal'参数设置x轴与y轴使用相同的长度单位:

更多关于设置 axis 属性的内容请查阅plt.axis函数的文档字符串。

本节最后介绍一下在折线图上绘制标签:标题、坐标轴标签和简单的图例。

标题和坐标轴标签是最简单的这类标签,Matplotlib 提供了函数用来方便的设置它们:

这些标签的位置、大小和风格可以通过上面函数的可选参数进行设置。参阅 Matplotlib 在线文档和这些函数的文档字符串可以获得更多的信息。

当一幅图中绘制了多条折线时,如果能够绘制一个线条对应的图例能让图表更加清晰。Matplotlib 也内建了函数来快速创建图例。估计你也猜到了,通过plt.legend()函数可以实现这个需求。虽然有很多种正确的方法来指定图例,作者认为最简单的方法是通过在绘制每条线条时指定对应的label关键字参数来使用这个函数:

上图可见,plt.legend()函数绘制的图例线条与图中的折线无论风格和颜色都保持一致。查阅plt.legend文档字符串可以获得更多相关信息;我们在[自定义图表图例]一节中也会讨论更高级的图例应用。

虽然大多数的plt函数都可以直接转换为ax的方法进行调用(例如plt.plot() → ax.plot(),plt.legend() → ax.legend()等),但是并不是所有的命令都能应用这种情况。特别是用于设置极值、标签和标题的函数都有一定的改变。下表列出了将 MATLAB 风格的函数转换为面向对象的方法的区别:

在面向对象接口中,与其逐个调用上面的方法来设置属性,更常见的使用ax.set()方法来一次性设置所有的属性:

另一种常用的图表类型是简单散点图,它是折线图的近亲。不像折线图,图中的点连接起来组成连线,散点图中的点都是独立分布的点状、圆圈或其他形状。本节开始我们也是首先将需要用到的图表工具和函数导入到 notebook 中:

在上一节中,我们介绍了plt.plot/ax.plot方法绘制折线图。这两个方法也可以同样用来绘制散点图:

传递给函数的第三个参数是使用一个字符代表的图表绘制点的类型。就像你可以使用'-'或'--'来控制线条的风格那样,点的类型风格也可以使用短字符串代码来表示。所有可用的符号可以通过plt.plot文档或 Matplotlib 在线文档进行查阅。大多数的代码都是非常直观的,我们使用下面的例子可以展示那些最通用的符号:

我要回帖

更多关于 带直线的散点图 的文章

 

随机推荐