Pyecharts基础和基本应用 超炫酷的数据可视化图表

文章目录

    • Pyecharts使用
    • 切换主题颜色
    • 柱状图数据堆叠和并列
    • 柱状图带窗口滑块
    • 3D柱状图
    • Line(折线/面积图)
    • Pie饼图
    • 涟漪特效的散点图
    • Funnel(漏斗图)
    • Geo(地理坐标系)
    • 水球图
    • 雷达图
    • 词云图

最新常用的数据可视化模块是matplotlib,但是这篇文章我们不介绍matplotlib,而是来说一下Pyecharts模块。先来看一下Pyecharts介绍:

  • Pyecharts和Echarts模块结合(百度开源的数据可视化库,想了解百度一下)
  • Pyecharts和Web前端结合(更强的交互性)
  • 超强的交互性(这篇文章带你了解有多强)
  • 国人开发的项目(意味着我们可以轻松的看懂文档)

官方文档:http://pyecharts.org/

安装非常的简单,使用pip命令就可以成功安装:pip install pyecharts
想要体验超强的交互性,就需要你自己敲代码运行体验,或者打开评论的链接查看效果!
图表绘制流程

所有类型的图标,基本的流程都是:

1.chart_name=图表类型() # 初始化具体类型图表
2.chart_name.add_xaxis() # 添加横坐标名称
3.chart_name.add_yaxis() # 添加纵坐标数据
4.chart_name.render()    # 生成.html文件

每次运行代码都会在程序运行目录下生成对应的html文件,打开它就可以体验到超强的交互性!

Pyecharts使用

导入pyecharts模块及随机虚构数据模块(自动生成的数据)

from pyecharts.faker import Faker # 虚构数据模块
from pyecharts import options as opts # 配置
from pyecharts.charts import Bar # Bar图表

创建一个Bar图(柱状图/条形图),添加数据:add_xaxis(x轴标签列表);add_yaxis(名称,y轴数据列表)

bar=Bar()
# 添加数据
bar.add_xaxis(
    ['西瓜','香蕉','菠萝','黑凤梨','可乐','果汁','梨子']
)
bar.add_yaxis(
    "水果",
    ['100','120','233','200','300','345','532']
)
bar.render()
数据必须是python的list列表类型,如果是numpy的数组类型需要使用.tolist()转换成list

同样我们可以添加虚构的数据

bar=Bar()
# 添加数据

bar.add_xaxis(
  Faker.choose()
)
bar.add_yaxis(
    "水果",
   Faker.values()
)
bar.render()
# 'G:\\jupyter\\render.html'

运行任意一个代码,会返回render.html文件的路径,找到并打开它

如果使用的是虚构的数据,每次刷新都会发生变化。
添加图表标题和副标题

使用set_global_opts方法

bar.set_global_opts(
    title_opts=opts.TitleOpts(title="Bar-基本实例",subtitle="我是副标题")
)

切换主题颜色

更多主题配色参考:http://pyecharts.org/#/zh-cn/themes,这里鳄鱼君Ba使用CHALK吧!

from pyecharts.globals import ThemeType
bar=Bar(
    init_opts=opts.InitOpts(theme=ThemeType.CHALK)
)

更改图表尺寸,在配置主题的时候就可以对图表的尺寸进行配置:

bar=Bar(
    init_opts=opts.InitOpts(
    theme=ThemeType.CHALK,
    width="850",
    heigth="450"
   )    
)

旋转X轴坐标,有时候x轴的内容太长,会导致x轴名称重复,可以旋转x轴,这样就永远不会重复(rotate=旋转角度 -90~90之间):

bar.set_global_opts(
    title_opts=opts.TitleOpts(
    title="Bar-基本示例",
    subtitle="我是副标题"),
  xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30))    
)

柱状图数据堆叠和并列

传入两组数据,stack=’stack1’表示两组数据堆叠在stack1这一组

from pyecharts.globals import ThemeType
bar=Bar(
    init_opts=opts.InitOpts(theme=ThemeType.CHALK)
)
# 添加数据
bar.add_xaxis(
  Faker.choose()
)
bar.add_yaxis("商家A",Faker.values(),stack="stack1")
bar.add_yaxis("商家B",Faker.values(),stack="stack1")

bar.set_global_opts(
    title_opts=opts.TitleOpts(
    title="Bar-基本示例",
    subtitle="我是副标题"),
  xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30))    
)
bar.render()

堆叠效果图如下

两两堆叠,stack=’stack1’表示两组数据堆叠在stack1这一组;stack=’stack2’表示两组数据堆叠在stack2这一组

# 添加数据
bar.add_xaxis(
  Faker.choose()
)
bar.add_yaxis("商家A",Faker.values(),stack="stack1")
bar.add_yaxis("商家B",Faker.values(),stack="stack1")
bar.add_yaxis("商家C",Faker.values(),stack="stack2")
bar.add_yaxis("商家D",Faker.values(),stack="stack2")

柱状图标记点和标记线

from pyecharts.globals import ThemeType
bar=Bar(
    init_opts=opts.InitOpts(theme=ThemeType.CHALK)
)
bar.add_xaxis(
  Faker.choose()
)
bar.add_yaxis("商家A",Faker.values(),stack="stack1")
bar.add_yaxis("商家B",Faker.values(),stack="stack1")

bar.set_global_opts(
    title_opts=opts.TitleOpts(
    title="Bar-基本示例",
    subtitle="我是副标题"),
  xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30))    
)
bar.set_series_opts(
    label_opts=opts.LabelOpts(is_show=False), # 不显示数字
    markpoint_opts=opts.MarkPointOpts( # 点
        data=[
            opts.MarkPointItem(type_="max",name="最大值"),
            opts.MarkPointItem(type_="min",name="最小值"),
        ]
    ),
    markline_opts=opts.MarkLineOpts( # 点
        data=[
            opts.MarkLineItem(type_="average",name="平均值"),
        ]
    )
)
bar.render()

柱状图X轴和Y轴交换

bar.reversal_axis()

柱状图带窗口滑块

添加global参数datazoom_opts=[opts.DataZoomOpts()]

from pyecharts.globals import ThemeType
bar=Bar(
    init_opts=opts.InitOpts(theme=ThemeType.CHALK)
)
bar.add_xaxis(Faker.days_attrs)
bar.add_yaxis("商家A",Faker.days_values)
bar.set_global_opts(
    title_opts=opts.TitleOpts(
        title="Bar-基本示例",
        subtitle="我是副标题"),
    datazoom_opts=[opts.DataZoomOpts()]
)
bar.render()

3D柱状图

添加图表并渲染,首先创建数据data,格式:一个列表,每一项都是一个三个元素组成的列表/元组[X坐标,Y坐标,Z轴高度]

data=[(i,j,random.randint(0,12)) for i in range(25) for j in range(25)]

bar3d=Bar3D() # 创建3D图表实例
bar3d.add(
    "", # 名称
    data, # 数据
    xaxis3d_opts=opts.Axis3DOpts(Faker.clock,type_="category"), # x轴
    yaxis3d_opts=opts.Axis3DOpts(Faker.week_en,type_="category"), # y轴
    zaxis3d_opts=opts.Axis3DOpts(type_="value"), # z轴为数据
)
bar3d.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(max_20),
    title_opts=opts.TitleOpts(title="Bar3D-基本示例"),
    subtitle="我是副标题"),
)
bar3d.render()

Line(折线/面积图)

is_smooth是否让折线变平滑

from pyecharts.faker import Faker # 虚构数据模块
from pyecharts import options as opts # 配置
from pyecharts.charts import Line 
line=Line()
line.add_xaxis(Faker.choose())
line.add_yaxis("商家A",Faker.values(),is_smooth=True)
line.add_yaxis("商家B",Faker.values())

line.set_global_opts(
    title_opts=opts.TitleOpts(title="Line-基本示例",
    subtitle="我是副标题"),
)
line.render()

line.add_yaxis(
    "商家A",
    Faker.values(),
    is_smooth=True,
    areastyle_opts=opts.AreaStyleOpts(
        opacity=0.2, #填充区域透明度
        color='#000') # 填充区域颜色
    )
)

对于color也支持渐变及纹理,设置x轴不变,y轴从0渐变到1(red到blue)

color={
    'type':'linear',
    'x':0, 
    'y':0,
    'x2':0,
    'y2':1,
    'colorStops':[
        {'offset':0.'color':'red'},
        {'offset':1,'color':'blue'}
    ]
}

具体效果不在展示,自行尝试!

Pie饼图

数据为**[ (key1,value1),(key2,value2) ]**的格式

from pyecharts.faker import Faker # 虚构数据模块
from pyecharts import options as opts # 配置
from pyecharts.charts import Pie 
pie=Pie()
data=[list(z) for z in zip(Faker.choose(),Faker.values())]
pie.add(
    "", 
    data
)
pie.set_global_opts(
    title_opts=opts.TitleOpts(title="Line-基本示例",
    subtitle="我是副标题"),
)
pie.set_series_opts(
    label_opts=opts.LabelOpts(formatter="{b}:{c}") # 数据显示的格式    
)
pie.render()

创建环装饼图,radius:内环和外环半径,列表类型

pie.add(
    "", 
    data,
    radius=['30%','70%']
)

创建玫瑰饼图,rosetype设置玫瑰饼图模式;radius扇区圆心角展现数据的百分比,半径展现数据的大小;area所有扇区圆心角相同,仅通过半径展现数据大小

pie.add(
    "", 
    data,
    radius=['30%','70%'],
    rosetype="area"
)

涟漪特效的散点图

from pyecharts.faker import Faker # 虚构数据模块
from pyecharts import options as opts # 配置
from pyecharts.charts import EffectScatter
from pyecharts.globals import SymbolType

effect_scatter=EffectScatter()
effect_scatter.add_xaxis(Faker.choose()) # x轴数据
effect_scatter.add_yaxis( # y轴数据
    "",
    Faker.values(),
    symbol=SymbolType.ARROW  # 点的样式
)
effect_scatter.set_global_opts(
    title_opts=opts.TitleOpts(title="EffectScatter-基本示例")
)
effect_scatter.render()

Funnel(漏斗图)

from pyecharts.faker import Faker # 虚构数据模块
from pyecharts import options as opts # 配置
from pyecharts.charts import Funnel

funnel=Funnel()
data=[list(z) for z in zip(Faker.choose(),Faker.values())]
funnel.add( # y轴数据
    "内容",
    data,
   label_opts=opts.LabelOpts(position="inside") # 标签居中
)
funnel.set_global_opts(
    title_opts=opts.TitleOpts(title="Funnel-基本示例")
)
funnel.render()

Geo(地理坐标系)

这个很多服务器厂商都在使用,用于展示自己服务器的地理位置,实现也比较简单。数据为**[ (key1,value1),(key2,value2) ]**的格式

from pyecharts.faker import Faker # 虚构数据模块
from pyecharts import options as opts # 配置
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
geo=Geo()
data=[list(z) for z in zip(Faker.provinces,Faker.values())]
geo.add_schema(maptype="china")
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.add(
    "geo",
    data,
    #type_=ChartType.HEATMAP, # 热力原点
)
geo.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(),
    title_opts=opts.TitleOpts(title="Geo-基本示例"),
)
geo.render()

水球图

创建一个水球图

from pyecharts import options as opts # 配置
from pyecharts.charts import Liquid
liquid=Liquid()
liquid.add(
    "Liquid",
    [0.4,0.6,0.8],
#     is_outline_show=False, # 是否显示外边框
#     is_animation=False, # 是否显示动画效果


#     shape # 边框形状,和symbol可用形状类似,可丁丁一SVG
)
liquid.set_global_opts(
    title_opts=opts.TitleOpts(title="Liquid-基本示例")
)
liquid.render()

自定义形状需要在shape参数填入SVG图标的path路径,字符串开头是path://。SVG图标可到:https://www.iconfont.cn/下载获取,只需要path的值,比方说一个SVG格式的图标:

<svg class="icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M667.786667 117.333333C832.864 117.333333 938.666667 249.706667 938.666667 427.861333c0 138.250667-125.098667 290.506667-371.573334 461.589334a96.768 96.768 0 0 1-110.186666 0C210.432 718.368 85.333333 566.112 85.333333 427.861333 85.333333 249.706667 191.136 117.333333 356.213333 117.333333c59.616 0 100.053333 20.832 155.786667 68.096C567.744 138.176 608.170667 117.333333 667.786667 117.333333z m0 63.146667c-41.44 0-70.261333 15.189333-116.96 55.04-2.165333 1.845333-14.4 12.373333-17.941334 15.381333a32.32 32.32 0 0 1-41.770666 0c-3.541333-3.018667-15.776-13.536-17.941334-15.381333-46.698667-39.850667-75.52-55.04-116.96-55.04C230.186667 180.48 149.333333 281.258667 149.333333 426.698667 149.333333 537.6 262.858667 675.242667 493.632 834.826667a32.352 32.352 0 0 0 36.736 0C761.141333 675.253333 874.666667 537.6 874.666667 426.698667c0-145.44-80.853333-246.218667-206.88-246.218667z" /></svg>

你只需要找到path属性的值:

shape="paht://M667.786667 117.333333C832.864 117.333333 938.666667 249.706667 938.666667 427.861333c0 138.250667-125.098667 290.506667-371.573334 461.589334a96.768 96.768 0 0 1-110.186666 0C210.432 718.368 85.333333 566.112 85.333333 427.861333 85.333333 249.706667 191.136 117.333333 356.213333 117.333333c59.616 0 100.053333 20.832 155.786667 68.096C567.744 138.176 608.170667 117.333333 667.786667 117.333333z m0 63.146667c-41.44 0-70.261333 15.189333-116.96 55.04-2.165333 1.845333-14.4 12.373333-17.941334 15.381333a32.32 32.32 0 0 1-41.770666 0c-3.541333-3.018667-15.776-13.536-17.941334-15.381333-46.698667-39.850667-75.52-55.04-116.96-55.04C230.186667 180.48 149.333333 281.258667 149.333333 426.698667 149.333333 537.6 262.858667 675.242667 493.632 834.826667a32.352 32.352 0 0 0 36.736 0C761.141333 675.253333 874.666667 537.6 874.666667 426.698667c0-145.44-80.853333-246.218667-206.88-246.218667z"

雷达图

可以理解为游戏中的人物KD图。创建两张雷达图数据v1和v2,v1中有两个数据,v2中有一个数据

v1=[
    [44,75,66,32,57],
    [45,37,57,76,47]
]
v2=[ [23,56,73,56,34] ]

创建雷达图

from pyecharts import options as opts # 配置
from pyecharts.charts import Radar
radar=Radar()
v1=[
    [44,75,66,32,57],
    [45,37,57,76,47]
]
v2=[ [23,56,73,56,34] ]
radar.add_schema(
    schema=[
        opts.RadarIndicatorItem(name="生存",max_=100),
        opts.RadarIndicatorItem(name="总积分",max_=100),
        opts.RadarIndicatorItem(name="战斗",max_=100),
        opts.RadarIndicatorItem(name="支援",max_=100),
         opts.RadarIndicatorItem(name="吃鸡率",max_=100),
    ]
)
radar.add("玩家1",v1)
radar.add("玩家2",v2)
radar.set_series_opts(
    label_opts=opts.LabelOpts(is_show=False)
)
radar.set_global_opts(
    title_opts=opts.TitleOpts(title="Radar-基本示例")
)
radar.render()

词云图

创建一个词云图

from pyecharts import options as opts # 配置
from pyecharts.charts import WordCloud
words=[
    ("可爱",10000),
    ("幸福",99990),
    ("自由",88840),
    ("坚持",98870),
    ("享受",89790),
    ("约炮",33420)
]
wordcloud=WordCloud()
wordcloud.add(
    "words",
    words,
    word_size_range=[20,100]
)
wordcloud.set_global_opts(
    title_opts=opts.TitleOpts(title="WordCloud-基本示例")
)
wordcloud.render()

pyecharts可以和Web框架结合,比方说Django、Flask框架等等。更多内容参考:http://pyecharts.org/

cutecharts适合于可爱图标,文档:https://github.com/chenjiandongx/cutecharts

你可能感兴趣的:(Python)