Pyecharts 折线图

Pyecharts 折线图语法

在 Pyecharts 中,我们可以使用 Line 这个模块来绘制一个折线图。折线图的主要作用是:观察 “因变量 y” 随着 “自变量 x” 的变化而变化的趋势。

语法:

line = Line()
line.add_xaxis(xaxis_data)
line.add_yaxis(series_name, y_axis)

说明:

首先我们需要使用 Line() 来创建一个折线图对象 line,然后调用 add_xaxis() 方法来添加 x 轴数据,并且调用 add_yaxis() 方法来添加 y 轴数据。

对于 add_xaxis() 方法来说,参数 xaxis_data 用于定义 x 轴数据。对于 add_yaxis() 方法来说,参数 series_name 用于定义系列名,参数 y_axis 用于定义 y 轴数据。

有一点我们要非常清楚:Pyecharts 的大多数方法接收的参数应为列表,虽然在某些情况下可以使用 Series 或 DataFrame,但不建议这样做。

示例 1:Pyecharts 绘制一条折线

import pandas as pd
from pyecharts.charts import Line

# 数据
data = [
    ['1月', 450],
    ['2月', 420],
    ['3月', 560],
    ['4月', 480],
    ['5月', 530],
    ['6月', 620]
]
df = pd.DataFrame(data, columns=['月份', '上衣'])

# 绘图
line = Line()
line.add_xaxis(xaxis_data=list(df['月份']))
line.add_yaxis(series_name='上衣', y_axis=list(df['上衣']))

# 渲染
line.render()

运行之后,当前项目目录下会多了一个 render.html,如下图所示。在浏览器中打开 render.html,此时效果如下图所示。

pyecharts折线图的项目结构

pyecharts绘制一条折线

分析:

from pyecharts.charts import Line 表示导入 Line 这个模块。Line 模块本质上是一个类,所以 line = Line() 其实就是使用 Line 这个类来创建一个实例对象。

因为 Pyecharts 是用于 Web 开发的,所以它会把图表渲染成一个 HTML 文件。如果你使用的是 VSCode 进行开发,那么可以安装一个名为 “Live Server” 的插件,然后界面右下角可以找到一个【Go Live】的按钮,如下图所示。

VSCode Go Live 按钮

我们首先点击打开 render.html,然后再点击【Go Live】按钮,这样就可以自动使用浏览器查看 render.html 的效果了,如下图所示。

pyecharts折线图在浏览器的效果

对于 add_xaxis() 和 add_yaxis() 这两个方法来说,它的参数名是可以省略的,下面 2 种方式是等价的。不过在实际开发中,我们还是建议把参数名写上。

# 不省略参数名
line.add_xaxis(xaxis_data=list(df['月份']))
line.add_yaxis(series_name='上衣', y_axis=list(df['上衣']))

# 省略参数名
line.add_xaxis(list(df['月份']))
line.add_yaxis('上衣', list(df['上衣']))

由于 Pyecharts 中所有的方法都支持链式调用,所以对于这个例子来说,下面 2 种方式的等价的。

# 方式1:分开调用
line.add_xaxis(xaxis_data=list(df['月份']))
line.add_yaxis(series_name='上衣', y_axis=list(df['上衣']))
line.render()

# 方式2:链式调用
line.add_xaxis(xaxis_data=list(df['月份'])).add_yaxis(series_name='上衣', y_axis=list(df['上衣'])).render()

当然了,当链式调用的代码比较长时,我们可以分行来显示每一个方法。不过如果是分行显示,我们需要在外层加一个 “()”,如果不加就会报错,代码如下。

# 分行显示
(
    line.add_xaxis(xaxis_data=list(df['月份']))
    .add_yaxis(series_name='上衣', y_axis=list(df['上衣']))
    .render()
)

需要特别说明的是:一般情况下,Pyecharts 中的数据要求是一个列表,而不能是 Series 或 DataFrame。某些情况下,虽然使用 Series 或 DataFrame 不会报错,但我们并不建议这样去做。

那么问题来了:“明明这里可以直接使用列表的方式来操作,为什么我们还使用 Pandas 来操作呢?这不是多此一举吗?” 之所以使用 Pandas,有以下 2 个非常重要的原因。

  • Pyecharts 并未提供能够读取文件的简单方法,而 Pandas 却可以很轻松地读取一个文件中的数据(包括 CSV、Excel 等)。如果不使用 Pandas,那么就得使用最原始的方式来读取,这是非常麻烦的。
  • Pandas 可以很轻松地获取某一列的内容,比如想要获取 “衬衫” 这一列,只需要使用 df['衬衫'] 就可以了。由于数据要求是一个列表,我们再使用 list() 函数将其转换成列表就可以了,非常的简单。

Pyecharts 绘制的图表用户体验非常好,并且具备非常强大的交互功能。首先打开页面的时候,所有图表都会有一个动画效果。然后当我们将鼠标移到某一个节点上时,会弹出一个提示框来显示该节点的数据,如下图所示。

pyecharts折线图的提示框

提示框由 2 部分组成:第 1 行是描述文本,第 2 行是数据信息。对于 add_yaxis() 方法来说,参数 series_name 用于定义系列名。这个 “系列名” 指的就是提示框中第一行的描述文本以及图例内容,如下图所示。如果修改 series_name 的值,那么这 2 个地方也会同时被修改。

pyecharts series_name(系列名)

示例 2:Pyecharts 绘制多条折线

import pandas as pd
from pyecharts.charts import Line

# 数据
data = [
    ['1月', 450, 110],
    ['2月', 420, 220],
    ['3月', 560, 150],
    ['4月', 480, 310],
    ['5月', 530, 250],
    ['6月', 620, 160]
]
df = pd.DataFrame(data, columns=['月份', '上衣', '裤子'])

# 绘图
line = Line()
line.add_xaxis(xaxis_data=list(df['月份']))
# 第1条折线
line.add_yaxis(series_name='上衣', y_axis=list(df['上衣']))
# 第2条折线
line.add_yaxis(series_name='裤子', y_axis=list(df['裤子']))

# 渲染
line.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts绘制多条折线

分析:

由于这 2 条折线共享 x 轴数据,也就是说它们的 x 轴数据是一样的,所以这里只需要调用一次 add_xaxis() 方法就可以了。而 add_yaxis() 方法用于设置 y 轴数据,由于这里有 2 条折线,所以需要调用 2 次。当然了,如果有 n 条折线,那么就调用 n 次 add_yaxis() 方法。

示例 3:x 轴数据要求是一个字符串

import pandas as pd
from pyecharts.charts import Line

# 数据
data = [
    [1, 450],
    [2, 420],
    [3, 560],
    [4, 480],
    [5, 530],
    [6, 620]
]
df = pd.DataFrame(data, columns=['月份', '上衣'])

# 绘图
line = Line()
line.add_xaxis(xaxis_data=list(df['月份']))
line.add_yaxis(series_name='上衣', y_axis=list(df['上衣']))

# 渲染
line.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts折线图x轴数据是“整型”

分析:

这里绘制出来折线图效果比较奇怪,当 x 轴坐标为 2 时,对应的 y 轴坐标应该是 420,而不是 450(x 轴坐标为 1 时才是 450)。很明显,这里的坐标数据并没有正确对应,而是整体向右偏移了 1 个单位。为什么会出现这种情况呢?

这是因为 Pyecharts 中要求 x 轴数据是一个字符串,而不能是其他类型数据。如果是其他类型数据,就可能会出现坐标数据不对应的情况。至于 pyecharts 为什么要这样做,我们不必纠结太多,只需要按照语法规定来就可以了。

对于这个例子来说,我们可以使用 DataFrame 的 astype() 方法来将 df['月份'] 这一列数据修改成字符串型。修改后的代码如下,再次运行后的效果如下图所示。

line.add_xaxis(xaxis_data=list(df['月份'].astype('str')))

pyecharts 折线图x轴数据是“字符串”

小伙伴们一定要记住一点:Pyecharts 大多数图表都要求 x 轴数据是字符串,而不能是整型或浮点型

Pyecharts 折线图样式

在 Pyecharts 中,我们还可以对折线图进行一些样式的自定义,主要包括 3 个方面:① 平滑线;② 线条外观;③ 面积图。

示例 4:折线图使用平滑线

import pandas as pd
from pyecharts.charts import Line

# 数据
data = [
    ['1月', 450, 110],
    ['2月', 420, 220],
    ['3月', 560, 150],
    ['4月', 480, 310],
    ['5月', 530, 250],
    ['6月', 620, 160]
]
df = pd.DataFrame(data, columns=['月份', '上衣', '裤子'])

# 绘图
line = Line()
line.add_xaxis(xaxis_data=list(df['月份']))
# 第1条折线
line.add_yaxis(series_name='上衣', y_axis=list(df['上衣']), is_smooth=True)
# 第2条折线
line.add_yaxis(series_name='裤子', y_axis=list(df['裤子']), is_smooth=True)

# 渲染
line.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts折线图使用平滑线

分析:

对于折线图来说,我们可以使用 add_yaxis() 方法的 is_smooth 参数来定义线条为平滑线。当 is_smooth = True 时,线条为平滑线;当 is_smooth = False 时,线条为直线。其中 is_smooth 默认值为 False。

示例 5:折线图的线条外观

import pandas as pd
from pyecharts.charts import Line
import pyecharts.options as opts

# 数据
data = [
    ['1月', 450, 110],
    ['2月', 420, 220],
    ['3月', 560, 150],
    ['4月', 480, 310],
    ['5月', 530, 250],
    ['6月', 620, 160]
]
df = pd.DataFrame(data, columns=['月份', '上衣', '裤子'])

# 绘图
line = Line()
line.add_xaxis(xaxis_data=list(df['月份']))
# 第1条折线
line.add_yaxis(
    series_name='上衣',
    y_axis=list(df['上衣']),
    linestyle_opts=opts.LineStyleOpts(type_='dashed')
)
# 第2条折线
line.add_yaxis(
    series_name='裤子',
    y_axis=list(df['裤子']),
    linestyle_opts=opts.LineStyleOpts(type_='dotted')
)

# 渲染
line.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts折线图自定义线条外观

分析:

如果想要改变线条的样式,我们可以使用 add_yaxis() 方法的 linestyle_opts 参数来实现。需要注意的是,linestyle_opts 参数的取值比较特殊,它的取值是 Pyecharts.options 模块下一个方法的返回值。所以我们首先需要使用 import pyecharts.options as opts 来导入 pyecharts.options 才行。

当 linestyle_opts 取值为 opts.LineStyleOpts(type_='dashed'),表示定义线条为 “虚线” ;当 linestyle_opts 取值为 opts.LineStyleOpts(type_='dotted') 时,表示定义线条为 “点线” 。可能很多初学的小伙伴会觉得这种语法方式非常奇怪,为什么不直接定义成 linestyle_opts='dashed',而是定义成 linestyle_opts= opts.LineStyleOpts(type_='dashed') 呢?

语法这东西是官方规定的,我们只需要遵循规则就可以了。就像红绿灯一样,我们没必要纠结为什么是 “绿灯走红灯停”,而不是 “绿灯停红灯走”。像上面这种语法方式,我们后面会经常遇到,多接触几次就懂了。

示例 6:Pyecharts 面积图

import pandas as pd
from pyecharts.charts import Line
import pyecharts.options as opts

# 数据
data = [
    ['1月', 450, 110],
    ['2月', 420, 220],
    ['3月', 560, 150],
    ['4月', 480, 310],
    ['5月', 530, 250],
    ['6月', 620, 160]
]
df = pd.DataFrame(data, columns=['月份', '上衣', '裤子'])

# 绘图
line = Line()
line.add_xaxis(xaxis_data=list(df['月份']))
# 第1条折线
line.add_yaxis(
    series_name='上衣',
    y_axis=list(df['上衣']),
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
)
# 第2条折线
line.add_yaxis(
    series_name='裤子',
    y_axis=list(df['裤子']),
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
)

# 渲染
line.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts面积图

分析:

如果想要使用面积图来表示,我们可以使用 add_yaxis() 方法的 areastyle_opts 参数来实现。areastyle_opts 和 linestyle_opts 一样,也需要使用 import pyecharts.options as opts 导入 pyecharts.options 这个模块。

对于自定义样式,有以下非常重要的 2 点需要跟小伙伴们说明一下的。

  • 对于绝大多数图表的自定义样式,我们都是使用 add_yaxis() 方法提供的参数来实现的,而不是使用其他方法。
  • 如果参数名是 “xxx_opts” 这种形式的,那么该参数的取值肯定就是 Pyecharts.options 下的一个属性或方法。

上一篇: Pyecharts 教程

下一篇: Pyecharts 柱状图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号