2022年 11月 13日

Python绘制柱状图之可视化神器pyecharts(一)

目录

pyecharts介绍

特性

优势

展示

柱状图模板系列

水晶柱状图

解决X轴标签过长的柱状图

自定义平均刻度标签(方便查看超出范围)

翻转X Y轴柱状图

可以移动的X轴柱状图(适合数据类别过多)

可以移动的Y轴柱状图(适合数据类别过多)

二维简单柱状图(主题可选择)

动画延迟柱状图

直方图按照颜色区分

每文一语


pyecharts介绍

pyecharts是python与echarts链接,一个用于生成Echarts图标的第三方库,pyecharts分为v0.5.X和v1两个大版本,两者互不兼容,v1是一个全新的版本,经研发团队决定,前者将不再进行更新维护。下面是我个人整理的关于pyecharts绘制柱状图的案例大全,收集整理不易,多多支持!

特性

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

优势

pyecharts可以输出网页版的链接,直接调用资源渲染图表,方便快捷,输出不是图片,而是一个可以调节的页面,动态,炫酷,都是它的天地!它可以支持在手机端浏览界面,也可以修改相关参数,总的来说方便至极,而且主题都可以随意搭配,颜色自己调。适用于公司可视化报表,企业展示,日常办公,由于图表过于炫酷,不大适合做科研论文展示,后期会介绍另外一个库,可以作为科研党的首选——matplotlib

展示

 

 

 

总之pyecharts科研绘制很多一般绘制不了的图形,作为一个可视化神器它的便利之处,只有用过的小伙伴才知道,什么叫 “工欲善其事必先利其器”的道理。

 

柱状图模板系列

 

水晶柱状图

 

水晶柱状图适用于几个数据的对比,生成的柱状图具有一种玲珑剔透,清水出芙蓉的美感和清新,最适合做可视化展示。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 18:47
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 水晶柱状图.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. from pyecharts.commons.utils import JsCode
  10. data_x = ['可乐', '雪碧', '橙汁', '绿茶', '奶茶', '百威', '青岛']
  11. data_y = [147, 53, 27, 123, 94, 118, 48]
  12. c = (
  13. Bar()
  14. .add_xaxis(data_x)
  15. .add_yaxis("商家A", data_y, category_gap="60%")
  16. .set_series_opts(
  17. itemstyle_opts={
  18. "normal": {
  19. "color": JsCode(
  20. """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
  21. offset: 0,
  22. color: 'rgba(0, 244, 255, 1)'
  23. }, {
  24. offset: 1,
  25. color: 'rgba(0, 77, 167, 1)'
  26. }], false)"""
  27. ),
  28. "barBorderRadius": [30, 30, 30, 30],
  29. "shadowColor": "rgb(0, 160, 221)",
  30. }
  31. }
  32. )
  33. .set_global_opts(title_opts=opts.TitleOpts(title="标题"),
  34. xaxis_opts=opts.AxisOpts(
  35. name='类别',
  36. name_location='middle',
  37. name_gap=30, # 标签与轴线之间的距离,默认为20,最好不要设置20
  38. name_textstyle_opts=opts.TextStyleOpts(
  39. font_family='Times New Roman',
  40. font_size=16 # 标签字体大小
  41. )),
  42. yaxis_opts=opts.AxisOpts(
  43. name='数量',
  44. name_location='middle',
  45. name_gap=30,
  46. name_textstyle_opts=opts.TextStyleOpts(
  47. font_family='Times New Roman',
  48. font_size=16
  49. # font_weight='bolder',
  50. )),
  51. # toolbox_opts=opts.ToolboxOpts() # 工具选项
  52. )
  53. .render("水晶柱状图.html")
  54. )

 

 

 

解决X轴标签过长的柱状图

 

有时候我们在绘制柱状图的时候,X轴标签过长导致图形显示的不正常,修改字数之后又怕展示效果不够明显。此图例解决了这个难题,适合展示X轴标签过长的问题。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 16:15
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 解决X轴标签过长的问题.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. c = (
  10. Bar()
  11. .add_xaxis(
  12. [
  13. "名字很长的X轴标签1",
  14. "名字很长的X轴标签2",
  15. "名字很长的X轴标签3",
  16. "名字很长的X轴标签4",
  17. "名字很长的X轴标签5",
  18. "名字很长的X轴标签6",
  19. ]
  20. )
  21. .add_yaxis("商家A", [10, 20, 30, 40, 50, 40])
  22. .add_yaxis("商家B", [20, 10, 40, 30, 40, 50])
  23. .set_global_opts(
  24. xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15),
  25. # name='类型',
  26. # name_location='middle',
  27. # name_gap=30, # 标签与轴线之间的距离,默认为20,最好不要设置20
  28. # name_textstyle_opts=opts.TextStyleOpts(
  29. # font_family='Times New Roman',
  30. # font_size=16 # 标签字体大小
  31. # )
  32. ),
  33. yaxis_opts=opts.AxisOpts(
  34. name='数量',
  35. name_location='middle',
  36. name_gap=30,
  37. name_textstyle_opts=opts.TextStyleOpts(
  38. font_family='Times New Roman',
  39. font_size=16
  40. # font_weight='bolder',
  41. )),
  42. title_opts=opts.TitleOpts(title="标题1", subtitle="标题2"),
  43. # toolbox_opts=opts.ToolboxOpts() # 工具选项
  44. )
  45. .render("解决X轴标签过长问题.html")
  46. )
  47. print("图表已生成!请查收!")

 

 

自定义平均刻度标签(方便查看超出范围)

 

有时候数据过于多,柱状图过于密集,我们知道一个平均数,需要快速的查看那些数据超过了这个阈值,那些数据低于平均值,这时候我们可以自己定义一个刻度标签,方便我们理解。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 19:06
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 自定义平均刻度.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. from pyecharts.globals import ThemeType
  10. data_x=['周一', '周二', '周三', '周四', '周五', '周六', '周日']
  11. data_y_1=[40, 119, 79, 83, 107, 133, 95]
  12. data_y_2=[20, 143, 74, 97, 92, 53, 66]
  13. c = (
  14. Bar({"theme": ThemeType.MACARONS})
  15. .add_xaxis(data_x)
  16. .add_yaxis("商家A", data_y_1)
  17. .add_yaxis("商家B", data_y_2)
  18. .set_series_opts(
  19. label_opts=opts.LabelOpts(is_show=False),
  20. markline_opts=opts.MarkLineOpts(
  21. data=[opts.MarkLineItem(y=50, name="yAxis=50")]
  22. ),
  23. )
  24. .set_global_opts(title_opts=opts.TitleOpts(title="标题"),
  25. xaxis_opts=opts.AxisOpts(
  26. name='类别',
  27. name_location='middle',
  28. name_gap=30, # 标签与轴线之间的距离,默认为20,最好不要设置20
  29. name_textstyle_opts=opts.TextStyleOpts(
  30. font_family='Times New Roman',
  31. font_size=16 # 标签字体大小
  32. )),
  33. yaxis_opts=opts.AxisOpts(
  34. name='数量',
  35. name_location='middle',
  36. name_gap=40,
  37. name_textstyle_opts=opts.TextStyleOpts(
  38. font_family='Times New Roman',
  39. font_size=16
  40. # font_weight='bolder',
  41. )),
  42. # datazoom_opts=opts.DataZoomOpts(type_="inside"), #鼠标可以滑动控制
  43. # toolbox_opts=opts.ToolboxOpts() # 工具选项
  44. # brush_opts=opts.BrushOpts() #可以保存选择
  45. )
  46. .render("显示平均刻度.html")
  47. )
  48. print("图表已生成!请查收!")

 

翻转X Y轴柱状图

 

直观的展示柱状图过于单调,有时候我们需要适当的调整一下这个主题,把xy轴翻转一下,这样更能直观的对比显示,适用多个数据类别进行比较。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 18:53
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 翻转XY轴.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. data_x = ['可乐', '雪碧', '橙汁', '绿茶', '奶茶', '百威', '青岛']
  10. data_y = [147, 53, 27, 123, 94, 118, 48]
  11. c = (
  12. Bar()
  13. .add_xaxis(data_x)
  14. .add_yaxis("商家A", data_y)
  15. .add_yaxis("商家B", data_y)
  16. .reversal_axis()
  17. .set_series_opts(label_opts=opts.LabelOpts(position="right"))
  18. .set_global_opts(title_opts=opts.TitleOpts(title="标题"),
  19. xaxis_opts=opts.AxisOpts(
  20. name='数量',
  21. name_location='middle',
  22. name_gap=30, # 标签与轴线之间的距离,默认为20,最好不要设置20
  23. name_textstyle_opts=opts.TextStyleOpts(
  24. font_family='Times New Roman',
  25. font_size=16 # 标签字体大小
  26. )),
  27. yaxis_opts=opts.AxisOpts(
  28. name='类别',
  29. name_location='middle',
  30. name_gap=40,
  31. name_textstyle_opts=opts.TextStyleOpts(
  32. font_family='Times New Roman',
  33. font_size=16
  34. # font_weight='bolder',
  35. )),
  36. # datazoom_opts=opts.DataZoomOpts(type_="inside"), #鼠标可以滑动控制
  37. # toolbox_opts=opts.ToolboxOpts() # 工具选项
  38. # brush_opts=opts.BrushOpts() #可以保存选择
  39. )
  40. .render("翻转XY轴.html")
  41. )
  42. print("图表已生成!请查收!")

 

 

可以移动的X轴柱状图(适合数据类别过多)

 

可以移动的X轴,我们可以通过鼠标的控制展示我们想要展示的X轴的维度,这个用于数据类别过多,一般的可视化无法展示的情况,比如展示一个的销售额,我们可以用这个,显示30个数据类别。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 17:31
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 可以变动的X轴.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. from pyecharts.globals import ThemeType
  10. data_x=['0天', '1天', '2天', '3天', '4天', '5天', '6天', '7天', '8天', '9天', '10天', '11天', '12天', '13天', '14天', '15天', '16天', '17天', '18天', '19天', '20天', '21天', '22天', '23天', '24天', '25天', '26天', '27天', '28天', '29天']
  11. data_y=[5, 27, 27, 7, 13, 5, 1, 2, 29, 20, 21, 28, 5, 22, 23, 4, 20, 26, 25, 1, 3, 14, 23, 11, 4, 8, 2, 22, 13, 22]
  12. c = (
  13. Bar({"theme": ThemeType.MACARONS})
  14. .add_xaxis(data_x)
  15. .add_yaxis("商家A", data_y)
  16. .set_global_opts(
  17. title_opts=opts.TitleOpts(title="标题"),
  18. datazoom_opts=opts.DataZoomOpts(),
  19. # 需要的时候可以加入,添加列表形式即可
  20. # datazoom_opts=opts.DataZoomOpts(type_="inside")
  21. )
  22. .render("变动X轴柱状图.html")
  23. )
  24. print("图表已生成!请查收!")

 

 

可以移动的Y轴柱状图(适合数据类别过多)

 

既然X轴可以,那么Y轴必然也可以,下面来看看这个效果如何。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 18:27
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 可以变动的Y轴.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. from pyecharts.globals import ThemeType
  10. data_x = ['0天', '1天', '2天', '3天', '4天', '5天', '6天', '7天', '8天', '9天', '10天', '11天', '12天', '13天', '14天', '15天', '16天',
  11. '17天', '18天', '19天', '20天', '21天', '22天', '23天', '24天', '25天', '26天', '27天', '28天', '29天']
  12. data_y = [5, 27, 27, 7, 13, 5, 1, 2, 29, 20, 21, 28, 5, 22, 23, 4, 20, 26, 25, 1, 3, 14, 23, 11, 4, 8, 2, 22, 13, 22]
  13. c = (
  14. Bar({"theme": ThemeType.MACARONS})
  15. .add_xaxis(data_x)
  16. .add_yaxis("商家A", data_y)
  17. .set_global_opts(
  18. title_opts=opts.TitleOpts(title="标题"),
  19. datazoom_opts=opts.DataZoomOpts(orient="vertical"),
  20. )
  21. .render("变动Y轴柱状图.html")
  22. )
  23. print("图表已生成!请查收!")

 

 

二维简单柱状图(主题可选择)

 

一个柱状图里面可以展示多种类别的数据,主题可以选择,便于我们对数据进行直观的对比和理解。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 17:03
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 柱状图-主题可选择.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts.charts import Bar
  8. # from pyecharts.faker import Faker
  9. from pyecharts.globals import ThemeType
  10. from pyecharts import options as opts
  11. from pyecharts.charts import Bar
  12. data_0=['周一', '周二', '周三', '周四', '周五', '周六', '周日']
  13. data1=[23, 52, 108, 93, 110, 108, 48]
  14. data2=[97, 81, 118, 149, 134, 47, 66]
  15. c = (
  16. Bar({"theme": ThemeType.MACARONS})
  17. .add_xaxis(data_0)
  18. .add_yaxis("商家A", data1) #gap="0%" 这个可设置柱状图之间的距离
  19. .add_yaxis("商家B", data2) #gap="0%" 这个可设置柱状图之间的距离
  20. .set_global_opts(title_opts={"text": "B标题1", "subtext": "标题2"}, #该标题的颜色跟随主题
  21. # 该标题默认为黑体显示,一般作为显示常态
  22. # title_opts=opts.TitleOpts(title="标题")
  23. xaxis_opts=opts.AxisOpts(
  24. name='星期',
  25. name_location='middle',
  26. name_gap=30, # 标签与轴线之间的距离,默认为20,最好不要设置20
  27. name_textstyle_opts=opts.TextStyleOpts(
  28. font_family='Times New Roman',
  29. font_size=16 # 标签字体大小
  30. )),
  31. yaxis_opts=opts.AxisOpts(
  32. name='数量',
  33. name_location='middle',
  34. name_gap=30,
  35. name_textstyle_opts=opts.TextStyleOpts(
  36. font_family='Times New Roman',
  37. font_size=16
  38. # font_weight='bolder',
  39. )),
  40. # datazoom_opts=opts.DataZoomOpts(type_="inside"), #鼠标可以滑动控制
  41. # toolbox_opts=opts.ToolboxOpts() # 工具选项
  42. # brush_opts=opts.BrushOpts() #可以保存选择
  43. )
  44. .render("简单柱状图.html")
  45. )
  46. print("图表已生成!请查收!")

 

 

动画延迟柱状图

 

个人感觉这个就是设置的一个元素,延迟展示了一下,没有什么太大的用处,当然也可以用到需要的场景。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 19:03
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 动画延迟.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. from pyecharts.faker import Faker
  10. c = (
  11. Bar(
  12. init_opts=opts.InitOpts(
  13. animation_opts=opts.AnimationOpts(
  14. animation_delay=1000, animation_easing="elasticOut"
  15. )
  16. )
  17. )
  18. .add_xaxis(Faker.choose())
  19. .add_yaxis("商家A", Faker.values())
  20. .add_yaxis("商家B", Faker.values())
  21. .set_global_opts(title_opts=opts.TitleOpts(title="标题"),
  22. xaxis_opts=opts.AxisOpts(
  23. name='类别',
  24. name_location='middle',
  25. name_gap=30, # 标签与轴线之间的距离,默认为20,最好不要设置20
  26. name_textstyle_opts=opts.TextStyleOpts(
  27. font_family='Times New Roman',
  28. font_size=16 # 标签字体大小
  29. )),
  30. yaxis_opts=opts.AxisOpts(
  31. name='数量',
  32. name_location='middle',
  33. name_gap=40,
  34. name_textstyle_opts=opts.TextStyleOpts(
  35. font_family='Times New Roman',
  36. font_size=16
  37. # font_weight='bolder',
  38. )),
  39. # datazoom_opts=opts.DataZoomOpts(type_="inside"), #鼠标可以滑动控制
  40. # toolbox_opts=opts.ToolboxOpts() # 工具选项
  41. # brush_opts=opts.BrushOpts() #可以保存选择
  42. )
  43. .render("动画延迟.html")
  44. )
  45. print('图表已生成!请查收!')

 

 

直方图按照颜色区分

 

直方图更加的直观的展示,这个案例更是可以运用到统计里面,颜色的区分让我们更加的快速理解。

 

  1. # -*- coding : utf-8 -*-
  2. # @Time : 2021/1/29 18:32
  3. # @author : 王小王
  4. # @Software : PyCharm
  5. # @File : 直方图.py
  6. # @CSDN : https://blog.csdn.net/weixin_47723732
  7. from pyecharts import options as opts
  8. from pyecharts.charts import Bar
  9. from pyecharts.faker import Faker
  10. x = Faker.dogs + Faker.animal
  11. xlen = len(x)
  12. y = []
  13. for idx, item in enumerate(x):
  14. if idx <= xlen / 2:
  15. y.append(
  16. opts.BarItem(
  17. name=item,
  18. value=(idx + 1) * 10,
  19. itemstyle_opts=opts.ItemStyleOpts(color="#749f83"),
  20. )
  21. )
  22. else:
  23. y.append(
  24. opts.BarItem(
  25. name=item,
  26. value=(xlen + 1 - idx) * 10,
  27. itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
  28. )
  29. )
  30. c = (
  31. Bar()
  32. .add_xaxis(x)
  33. .add_yaxis("series0", y, category_gap=0, color=Faker.rand_color())
  34. .set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图(颜色区分)"),
  35. xaxis_opts=opts.AxisOpts(
  36. name='类别',
  37. name_location='middle',
  38. name_gap=30, # 标签与轴线之间的距离,默认为20,最好不要设置20
  39. name_textstyle_opts=opts.TextStyleOpts(
  40. font_family='Times New Roman',
  41. font_size=16 # 标签字体大小
  42. )),
  43. yaxis_opts=opts.AxisOpts(
  44. name='数量',
  45. name_location='middle',
  46. name_gap=30,
  47. name_textstyle_opts=opts.TextStyleOpts(
  48. font_family='Times New Roman',
  49. font_size=16
  50. # font_weight='bolder',
  51. )),
  52. # toolbox_opts=opts.ToolboxOpts() # 工具选项
  53. # brush_opts=opts.BrushOpts() #可以保存选择
  54. )
  55. .render("直方图.html")
  56. )
  57. print("图表已生成!请查收!")

 

 

本期可视化案例就介绍到这里了,下期继续更新柱状图案例合集,欢迎大家支持!

 

每文一语

最好的投资就是投资自己;只有经济独立,才能灵魂挺拔!