100天精通Python(可视化篇)——第92天:Pyecharts绘制炫酷柱状图、条形图实战大全

文章目录

  • 专栏导读
  • 1. 基础柱状图
  • 2. 旋转x轴标签
  • 3. 旋转坐标轴
  • 4. 添加坐标轴名称
  • 5. 添加标记点
  • 6. 添加标注线
  • 7. 添加数据
  • 8. 添加自定义背景图
  • 9. 堆叠柱状图
  • 10. 柱状图与折线图组合
  • 11. 三维柱状图
  • 12. 水平滑动、鼠标滚轮缩放柱状图

专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等

1. 基础柱状图

首先,我们导入了options模块,并使用Bar()函数创建了一个Bar对象。然后,我们使用add_xaxis()方法添加x轴的数据,使用add_yaxis()方法添加y轴的数据,并设置了系列的名称为”基本柱状图”。接下来,我们使用set_global_opts()方法设置了图表的标题,包括主标题和副标题。最后,我们使用render_notebook()方法在jupyter notebook中渲染图表。

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_global_opts(title_opts=opts.TitleOpts(title="我是主标题", subtitle="我是副标题"))  # 设置全局配置项,包括标题
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

2. 旋转x轴标签

设置x轴标签旋转角度为-15度xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15))

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_global_opts(title_opts=opts.TitleOpts(title="我是主标题"),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)) # 设置x轴标签旋转角度为-15度
                     )  # 设置全局配置项,包括标题
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

3. 旋转坐标轴

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_global_opts(
        title_opts=opts.TitleOpts(title="我是主标题"),  # 设置全局配置项,包括标题
        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=0))  # 设置y轴标签不旋转
    )
    .reversal_axis()  # 将柱状图转为横向柱状图
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

4. 添加坐标轴名称

通过在全局配置项中设置xaxis_opts=opts.AxisOpts(name="课程类别")yaxis_opts=opts.AxisOpts(name="课程成绩")添加坐标轴名称:

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_global_opts(title_opts=opts.TitleOpts(title="我是主标题"),
                     xaxis_opts=opts.AxisOpts(name="课程类别"), # 添加x坐标轴名称
                     yaxis_opts=opts.AxisOpts(name="课程成绩"), # 添加y坐标轴名称
                     )  # 设置全局配置项,包括标题
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

5. 添加标记点

通过 markline_opts=opts.MarkPointOpts添加最小值、最大值、平均值

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markpoint_opts=opts.MarkPointOpts(# 标记点配置项
            data=[ # 标记点数据
                opts.MarkPointItem(type_="max", name="最大值"),#MarkPointItem:标记点数据项
                opts.MarkPointItem(type_="min", name="最小值"),
                opts.MarkPointItem(type_="average", name="平均值"),
            ]
        ),
    )
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

6. 添加标注线

通过 markline_opts=opts.MarkLineOpts添加最小值、最大值、平均值线

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        ),
    )
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

7. 添加数据

通过设置.add_yaxis(stack=‘’)参数给某柱状图图加数据:

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]
add_value2 = [10, 10, 10, 10, 10, 10] #学生B是三好学生每门课程加10分

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2, stack = "stack1")  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .add_yaxis("加分", add_value2, stack = "stack1") # 添加数据
 
    .set_series_opts(
        title_opts=opts.TitleOpts(title="我是主标题"),
        xaxis_opts=opts.AxisOpts(name="课程类别"),  # 添加x坐标轴名称
        yaxis_opts=opts.AxisOpts(name="课程成绩"),  # 添加y坐标轴名称
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        ),
    )
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

8. 添加自定义背景图

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]
add_value2 = [10, 10, 10, 10, 10, 10]  # 学生B是三好学生每门课程加10分

# 创建柱状图实例
bar = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))  # 使用CHALK主题
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2, stack="stack1")  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .add_yaxis("加分", add_value2, stack="stack1")  # 添加数据

    .set_series_opts(
        title_opts=opts.TitleOpts(title="我是主标题"),
        xaxis_opts=opts.AxisOpts(name="课程类别"),  # 添加x坐标轴名称
        yaxis_opts=opts.AxisOpts(name="课程成绩"),  # 添加y坐标轴名称
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        ),
    )
)

# 设置全局配置项
bar.set_global_opts(
    # 添加自定义背景图
    graphic_opts=[
        opts.GraphicImage(
            graphic_item=opts.GraphicItem(
                id_="background",
                right=20,
                bottom=20,
                z=-10,
                bounding="raw",
                origin=[75, 75],
            ),
            graphic_imagestyle_opts=opts.GraphicImageStyleOpts(
                image="https://kr.shanghai-jiuxin.com/file/bizhi/20220927/4gzitkl1lyv.jpg", #  指定一下路径。也可以用文件路径
                width=650,
                height=450,
                opacity=0.3,
            ),
        )
    ],
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

9. 堆叠柱状图

在代码中,我们使用了add_yaxis方法三次,分别添加了三种不同的数据,并将它们设置为堆叠模式。通过设置stack参数为相同的值,将它们归为同一堆叠组

from pyecharts import options as opts
from pyecharts.charts import Bar

# 定义x轴的数据
x_data = ['A', 'B', 'C', 'D', 'E']

# 定义三种数据的y轴数据
y_data1 = [10, 20, 30, 40, 50]
y_data2 = [15, 25, 35, 45, 55]
y_data3 = [5, 15, 25, 35, 45]

# 创建柱状图实例
bar = (
    Bar()
    .add_xaxis(x_data)
    .add_yaxis("数据1", y_data1, stack="stack1")  # 设置数据1为堆叠模式,堆叠组为stack1
    .add_yaxis("数据2", y_data2, stack="stack1")  # 设置数据2为堆叠模式,堆叠组为stack1
    .add_yaxis("数据3", y_data3, stack="stack1")  # 设置数据3为堆叠模式,堆叠组为stack1
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))
    .set_global_opts(title_opts=opts.TitleOpts(title="三种数据堆叠柱状图"))
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

10. 柱状图与折线图组合

通过line创建折线图对象,并bar.overlap(line)将柱状图与折线图组合显示:

from pyecharts import options as opts  # 导入pyecharts的配置模块
from pyecharts.charts import Bar  # 导入柱状图模块

# 定义x轴的数据
x_data = ["语文", "数学", "英语", "历史", "政治", "地理", "体育"]
# 定义学生A的成绩数据
y_value1 = [99, 85, 90, 95, 70, 92, 98]
# 定义学生B的成绩数据
y_value2 = [90, 95, 88, 85, 96, 80, 76]

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_global_opts(title_opts=opts.TitleOpts(title="我是主标题"),
                     xaxis_opts=opts.AxisOpts(name="课程类别"), # 添加x坐标轴名称
                     yaxis_opts=opts.AxisOpts(name="课程成绩"), # 添加y坐标轴名称
                     )  # 设置全局配置项,包括标题
)

# 创建折线图实例
line = (
    Line()  # 使用Line()函数创建一个Line对象
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("学生A", y_value1)  # 添加学生A的成绩数据,设置系列名称为"学生A"
    .add_yaxis("学生B", y_value2)  # 添加学生B的成绩数据,设置系列名称为"学生B"
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 不显示标签
)

# 将柱状图和折线图组合在一起
bar.overlap(line)

# 在jupyter notebook中渲染图表
bar.render_notebook()

运行结果:

11. 三维柱状图

在代码中,通过定义x、y、z轴的数据,创建了一个Bar3D对象,并使用add()方法添加数据。在add()方法中,通过列表推导式生成了三维坐标数据。然后使用set_global_opts()方法设置全局配置项,包括可视化映射的最大值、标题。最后使用render_notebook()方法在jupyter notebook中渲染图表。

from pyecharts.charts import Bar3D
from pyecharts import options as opts

# 定义x、y、z轴的数据
x_data = ["A", "B", "C", "D", "E"]
y_data = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
z_data = [
    [1, 2, 3, 4, 5, 6, 7],
    [2, 3, 4, 5, 6, 7, 8],
    [3, 4, 5, 6, 7, 8, 9],
    [4, 5, 6, 7, 8, 9, 10],
    [5, 6, 7, 8, 9, 10, 11]
]

# 创建三维柱状图实例
bar3d = (
    Bar3D()  # 使用Bar3D()函数创建一个Bar3D对象
    .add(
        "",
        [[i, j, z_data[i][j]] for i in range(len(x_data)) for j in range(len(y_data))],
        xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="category"),
        yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="category"),
        zaxis3d_opts=opts.Axis3DOpts(type_="value"),
        grid3d_opts=opts.Grid3DOpts(width=200, height=80, depth=80),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(max_=11),
        title_opts=opts.TitleOpts(title="三维柱状图"),
    )
)

# 在jupyter notebook中渲染图表
bar3d.render_notebook()

运行结果:

12. 水平滑动、鼠标滚轮缩放柱状图

设置datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], DataZoom组件设置滑动条和内置型

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

# 创建柱状图实例
bar = (
    Bar()  # 使用Bar()函数创建一个Bar对象
    .add_xaxis(Faker.days_attrs)  # 添加x轴数据
    .add_yaxis("出售量", Faker.days_values, color=Faker.rand_color())  # 添加y轴数据,设置系列名称为"出售量",颜色随机生成
    .set_global_opts(
        title_opts=opts.TitleOpts(title="水平滑动、鼠标滚轮缩放柱状图"),  # 设置标题
        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],  # 设置DataZoom组件,包括滑动条和内置型
    )
)

# 在jupyter notebook中渲染图表
bar.render_notebook()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年7月6日
下一篇 2023年7月6日

相关推荐