什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了

您所在的位置:网站首页 怎么绘制对比折线图视频 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了

什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了

2024-07-04 05:42| 来源: 网络整理| 查看: 265

导读:数据分析时经常用到的折线图,你真的懂了吗?可以用来呈现哪些数据关系?在数据分析过程中可以解决哪些问题?怎样用Python绘制折线图?本文逐一为你解答。

作者:屈希峰,资深Python工程师,知乎多个专栏作者

来源:大数据DT(ID:hzdashuju)

01 概述

折线图(Line)是将排列在工作表的列或行中的数据进行绘制后形成的线状图形。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,非常适用于显示在相等时间间隔下数据的趋势。

在折线图中,数据是递增还是递减、增减的速率、增减的规律(周期性、螺旋性等)、峰值等特征都可以清晰地反映出来。所以,折线图常用来分析数据随时间的变化趋势,也可用来分析多组数据随时间变化的相互作用和相互影响。

例如,可用来分析某类商品或是某几类相关的商品随时间变化的销售情况,从而进一步预测未来的销售情况。在折线图中,一般水平轴(x轴)用来表示时间的推移,并且间隔相同;而垂直轴(y轴)代表不同时刻的数据的大小。如图0所示。

▲图0 折线图

02 实例

折线图代码示例如下所示。

代码示例①

运行结果如图1所示。

▲图1 代码示例①运行结果

代码示例①仍以最简单的方式绘制第一张折线图。line()方法的参数说明如下。

p.line(x, y, **kwargs)参数说明x (:class:`~bokeh.core.properties.NumberSpec` ) : x坐标。y (:class:`~bokeh.core.properties.NumberSpec` ) : y坐标。line_alpha (:class:`~bokeh.core.properties.NumberSpec` ) : (default: 1.0) 轮廓线透明度。line_cap ( :class:`~bokeh.core.enums.LineCap` ) : (default: 'butt') 线端。line_color (:class:`~bokeh.core.properties.ColorSpec` ) : (default: 'black') 轮廓线颜色,默认:黑色。line_dash (:class:`~bokeh.core.properties.DashPattern` ) : (default: []) 虚线,类型可以是序列,也可以是字符串('solid', 'dashed', 'dotted', 'dotdash', 'dashdot')。line_dash_offset (:class:`~bokeh.core.properties.Int` ) : (default: 0) 虚线偏移。line_join (:class:`~bokeh.core.enums.LineJoin` ) : (default: 'bevel')。line_width (:class:`~bokeh.core.properties.NumberSpec` ) : (default: 1) 线宽。name (:class:`~bokeh.core.properties.String` ) : 图元名称。tags (:class:`~bokeh.core.properties.Any` ) :图元标签。alpha (float) : 一次性设置所有线条的透明度。color (Color) : 一次性设置所有线条的颜色。source (ColumnDataSource) : Bokeh特有数据格式(类似于Pandas Dataframe)。legend (str) : 图元的图例。x_range_name (str) : x轴范围名称。y_range_name (str) : y轴范围名称。level (Enum) : 图元渲染级别。代码示例②

运行结果如图2所示。

▲图2 代码示例②运行结果

代码示例②第3行使用multi_line()方法,实现一次性绘制两条折线,同时,在参数中定义不同折线的颜色。如果使用Pandas Dataframe,则可以同时绘制不同列的数据。multi_line()方法的参数说明如下。

p.multi_line(xs, ys, **kwargs)参数说明xs (:class:`~bokeh.core.properties.NumberSpec` ) :x坐标,列表。ys (:class:`~bokeh.core.properties.NumberSpec` ) :y坐标,列表。

其他参数同line。

代码示例③

运行结果如图3所示。

▲图3 代码示例③运行结果

代码示例③第13、15、16行使用line()方法逐一绘制折线,该方法的优点是基本数据清晰,可在不同线条绘制过程中直接定义图例。读者也可以使用multi_line()方法一次性绘制三条折线,然后再绘制折线上的数据点。同样,既可以在函数中预定义图例,也可以用Lengend方法单独进行定义,在后会对图例进行详细说明。

代码示例④

运行结果如图4所示。

▲图4 代码示例④运行结果

代码示例④在代码示例③的基础上增加了图例的位置、显示或隐藏图形属性;通过点击图例,可实现图形的显示或隐藏,当折线数目较多或者颜色干扰阅读时,可以通过该方法实现对某一条折线数据的重点关注。这种通过图例、工具条、控件实现数据人机交互的可视化方式,正是Bokeh得以在GitHub火热的原因,建议在工作实践中予以借鉴。

代码示例⑤

运行结果如图5所示。

▲图5 代码示例⑤运行结果

代码示例⑤第15、16行使用line()方法绘制两组不同颜色的曲线。

代码示例⑥

运行结果如图6所示。

▲图6 代码示例⑥运行结果

代码示例⑥第19行中,生成绘图数据时,同时生成图例名称列表;第37、43行使用multi_line()方法一次性绘制6条曲线,并预定义图例。

代码示例⑦

运行结果如图7所示。

▲图7 代码示例⑦运行结果

代码示例⑦与代码示例③相似,第10、19、21行对曲线的属性进行自定义,注意虚线的几种形式('solid', 'dashed', 'dotted', 'dotdash', 'dashdot'),读者可以自行替换测试。

代码示例⑧

运行结果如图8所示。

▲图8 代码示例⑧运行结果

代码示例⑧第22、23行通过line()方法绘制两条曲线,严格上讲这两条曲线并不是Bokeh时间序列的标准绘制方法。第17行定义了x轴刻度的间隔以及中间刻度数,读者可以尝试将num_minor_ticks=10的显示效果与图8进行对比;第18行定义了y轴的数据显示格式。

代码示例⑨

运行结果如图9所示。

▲图9 代码示例⑨运行结果

代码示例⑨使用multi_line()方法在二维空间展示洛伦兹空间向量,示例中的数据生成稍微有点复杂,可以直观感受可视化之下的数据之美,有兴趣的读者可以深入了解。

代码示例⑩

运行结果如图10所示。

▲图10 代码示例⑩运行结果

代码示例⑩增加了Bokeh控件复选框,第12、13、14行使用line()方法绘制3条曲线;第16行定义复选框,并在18行定义回调函数,通过该回调函数控制3条曲线的可视状态;第24行将复选框、绘图并在一行进行显示。

代码示例⑪

运行结果如图11所示。

▲图11 代码示例⑪运行结果

代码示例⑪增加点击曲线的交互效果,第20、21、22行使用line()方法绘制3条曲线;第26行定义曲线再次被点击时的效果:图11中左下方会动态显示当前选中的是哪条颜色的曲线。

代码示例⑫

运行结果如图12所示。

▲图12 代码示例⑫运行结果

代码示例⑫使用models接口进行曲线绘制,注意第10、17、20行的绘制方法,这种绘图方式在实践中基本很少用到,仅作了解。

关于作者:屈希峰,资深Python工程师,Bokeh领域的实践者和布道者,对Bokeh有深入的研究。擅长Flask、MongoDB、Sklearn等技术,实践经验丰富。知乎多个专栏(Python中文社区、Python程序员、大数据分析挖掘)作者,专栏累计关注用户十余万人。

本文摘编自《Python数据可视化:基于Bokeh的可视化绘图》,经出版方授权发布。

推荐语:从图形绘制、数据动态展示、Web交互等维度全面讲解Bokeh功能和使用,不含复杂数据处理和算法,深入浅出,适合零基础入门,包含大量案例。

有话要说?

Q: 很常见的折线图,你玩出了哪些花样?

欢迎留言与大家分享



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3