pyecharts繪圖

基本介紹

pyecharts是一個基於百度開發的echarts的一個第三方庫,它繪製的圖像功能更強大。交互性比較強,在用作展示等方面是一個值得使用的第三方庫。在瞭解這個第三方庫之前我們瞭解一下Echarts.

ECharts是一個免費的、功能強大的、可視化的一個庫。它可以非常簡單的往軟件產品中添加直觀的、動態的和高度可定製化的圖表。它是一個全新的基於zrender的用純JavaScript打造完成的canvas庫。

如果你想了解詳細的話,可以去官方網站查看。

pyecharts介紹

Echarts是一個由百度開源的數據可視化,能夠進行良好的交互性,精巧的圖表設計,得到了衆多開發者的認可。而Python是一門富有表達力的語言,很適合用於數據處理。分析遇上數據可視化時,pyecharts誕生了。
✨特性
簡潔的API設計,使用如絲滑般流暢,支持鏈式調用
囊括了30+種常見圖表,應有盡有
支持主流Notebook環境,Jupyter Notebook和JupyterLab
可輕鬆集成至Flask,Django等主流Web框架
高度靈活的配置項,可輕鬆搭配出精美的圖表
詳細的文檔和示例,幫助開發者重啓的上手項目
超過400多個地圖文件以及原生的百度地圖,爲地理數據可視化提供有意義的支持。
下面我們來學習具體如何使用。

入門繪製

pyecharts分爲v0.5.X和v1兩個大版本,v0.5.X和v1間不兼容,v1是一個全新的版本,在echarts中版本不同,對應的操作區別還是很大的。爲了方便大家入門學習,我希望大家都採用我下面的版本號的pyecharts第三方庫。

import pyecharts
print(pyecharts.__version__)

運行結果爲:

1.5.1

版本不同的時候,我們採用對應的pip命令先卸載這個第三方庫,在pip安裝我們對應版本號的pyecharts第三方庫。

pip install pyecharts==1.5.1

柱狀圖

下面我們開始繪製圖像。首先以柱狀圖爲例:

import pyecharts.charts as pyec
x = ['甲','乙','丙','丁']
y =[300,400,340,450]
bar = pyec.Bar()#實例化對象
bar.add_xaxis(x)#給一個空白柱狀圖添加橫座標數據
bar.add_yaxis(series_name='公司A',yaxis_data=y)#圖例和y軸的座標
bar.render_notebook()#顯示在notebook筆記本上

運行結果爲:
在這裏插入圖片描述
pyecharts更突出的特點的是交互性強,偏向用來展示,直觀的觀察保存圖片和其他第三方庫沒區別。我們還可以保存爲html文件這樣更便於觀察。

import pyecharts.charts as pyec
x = ['a','b','c','d']
y =[300,400,340,450]
bar = pyec.Bar()
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y)
#bar.render_notebook()#顯示在notebook筆記本上
bar.render(r'C:\Users\lixue\Desktop\學習資料\數據可視化\render.html')#保存路徑

bar.render()是設置保存的路徑,我們也可以不設置,但它默認保存的是當前工作路徑下。在剛入門學習,我還是推薦用jupyter notebook環境下顯示。一個個保存的話查看起來不是特別方便。
我們還可以繼續添加類別,比如上個圖,我們可以另外還加一個B公司。

import pyecharts.charts as pyec
x = ['甲','乙','丙','丁']
y1=[300,400,340,450]
y2 =[200,100,300,500]
bar = pyec.Bar()
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1)
bar.add_yaxis(series_name='公司B',yaxis_data=y2)
bar.render_notebook()

運行結果是:
在這裏插入圖片描述
我們還可以點擊圖例,來控制我們希望顯示的公司數據:
在這裏插入圖片描述
然後我們可以拖動鼠標到柱形圖的頂部,會顯示對應的信息,通過這兩個細節我們可以大致瞭解到它的交互性,突出它的優點不同於其他繪圖庫。
我們還可以給圖表添加標題:

import pyecharts.options as opts
bar.set_global_opts(title_opts=opts.TitleOpts(title ='比較圖'))#加一個標題,全局標題
bar.render_notebook()

運行結果是:
在這裏插入圖片描述
我們還可以添加副標題以及在多一個類別:

import pyecharts.options as opts
y3=[200,300,400,700]
bar.set_global_opts(title_opts=opts.TitleOpts(title ='比較圖',subtitle='副標題'))#加一個標題,全局標題,subtitle是副標題
bar.add_yaxis(series_name='公司C',yaxis_data=y3)
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述
我們還可以改變柱狀圖的大小以及,我們可以這樣操作:

import pyecharts.charts as pyec
x = ['甲','乙','丙','丁']
y1=[300,400,340,450]
y2 =[200,100,300,500]
bar = pyec.Bar()
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1,category_gap="60%",color='#87CEFF')#category_gap同一系列的柱間距離,默認爲類目間距的 20%,可設固定值,color設置柱狀圖的顏色
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述
還有我們想輸出的是一個水平條形圖,我們可以這樣操作:

bar.reversal_axis()#交換x,y軸,水平條形圖顯示
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述
我們還可以將柱狀圖改爲堆積形式的圖表:

import pyecharts.charts as pyec
x = ['甲','乙','丙','丁']
y1=[300,400,340,450]
y2 =[200,100,300,500]
bar = pyec.Bar()
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1,category_gap="60%",color='#87CEFF', stack='11')#stack可以修改柱狀圖爲堆積型,但同一個類別的stack要保持一致
bar.add_yaxis(series_name='公司B',yaxis_data=y2,category_gap="60%",color='#00B2EE', stack='11')
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述
我們還可以控制不同柱狀圖之間的距離:

import pyecharts.charts as pyec
x = ['甲','乙','丙','丁']
y1=[300,400,340,450]
y2 =[200,100,300,500]
bar = pyec.Bar()
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1,category_gap="60%",color='#FFBBFF')
bar.add_yaxis(series_name='公司B',yaxis_data=y2,category_gap="60%",color='#FF3E96', gap='90%')#gap控制不同系列之間柱狀圖間的距離,如果想要兩個系列的柱子重疊,可以設置 gap 爲 '-100%'。這在用柱子做背景的時候有用。
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述

折線圖

在常用的統計圖表中,折線圖也是一種很常見的圖表,下面我們可以來看看如何繪製,大部分操作和上面條形圖的繪製是一樣的,除了函數不同,基本沒有區別。

import pyecharts.charts as pyec
import pyecharts.options as opts
line =pyec.Line()
line.add_xaxis(x)
line.add_yaxis(series_name='A',y_axis=y1)
line.add_yaxis(series_name='B',y_axis=y2)
line.add_yaxis(series_name='B',y_axis=y2)
line.render_notebook()

首先都是實例化,然後給對象添加對應的橫縱座標以及一些其他配置,最後再顯示。我們可以看看下面的運行結果:
在這裏插入圖片描述
我們也還是可以點擊圖例來改變顯示的折線:
在這裏插入圖片描述
我們還可以類似上面添加一些設置:

line.set_global_opts(title_opts=opts.TitleOpts('我的第一幅折線圖',subtitle='test',pos_left=30),#添加圖像主標題,subtitle='test'添加副標題,pos_left=30標題距離左邊的距離
    legend_opts =opts.LegendOpts(is_show=True),#默認展示圖例
    tooltip_opts =opts.TooltipOpts(trigger='axis',axis_pointer_type='cross'),
    toolbox_opts =opts.ToolboxOpts(is_show=True,orient='horizontal')#添加工具箱配置#vertial豎直工具欄
                    )
line.render_notebook()

運行結果爲:
在這裏插入圖片描述
我們生成了一個帶有工具欄以及主標題和副標題,水平線等的折線圖,我們還可以點擊工具欄中的data view來查看數據和修改數據:
在這裏插入圖片描述
我們還可以對圖表進行縮放顯示,當數據比較多,我們可以採用這種方式,由於折線圖不是很明顯,我們可以用條形圖來做示例:

x = ['a','b','c','d','g','f','n','e']
y1=[300,400,340,450,600,200,100,900]
y2=[350,500,390,450,800,600,300,700]
bar =pyec.Bar()
bar.set_global_opts(title_opts=opts.TitleOpts('我的第一幅折線圖',subtitle='test',pos_left=30),#添加圖像主標題,subtitle='test'添加副標題,pos_left=30標題距離左邊的距離
    legend_opts =opts.LegendOpts(is_show=True),#默認展示圖例
    tooltip_opts =opts.TooltipOpts(trigger='axis',axis_pointer_type='cross'),
    toolbox_opts =opts.ToolboxOpts(is_show=True,orient='horizontal'),#添加工具箱配置#vertial豎直工具欄
    datazoom_opts =opts.DataZoomOpts(type_='slider',range_start=0,range_end=2500)
                    )
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1)
bar.add_yaxis(series_name='公司B',yaxis_data=y2)
bar.render_notebook()

生成的圖表是:
在這裏插入圖片描述
我們可以滑動圖表最下方的那一塊來放大需要觀察部分的條形圖:
在這裏插入圖片描述
折線圖也可以這樣操作,我們只需要修改部分代碼就可以:

x = ['a','b','c','d','g','f','n','e']
y1=[300,400,340,450,600,200,100,900]
y2=[350,500,390,450,800,600,300,700]
line =pyec.Line()
line.set_global_opts(title_opts=opts.TitleOpts('我的第一幅折線圖',subtitle='test',pos_left=30),#添加圖像主標題,subtitle='test'添加副標題,pos_left=30標題距離左邊的距離
    legend_opts =opts.LegendOpts(is_show=True),#默認展示圖例
    tooltip_opts =opts.TooltipOpts(trigger='axis',axis_pointer_type='cross'),
    toolbox_opts =opts.ToolboxOpts(is_show=True,orient='horizontal'),#添加工具箱配置#vertial豎直工具欄
    datazoom_opts =opts.DataZoomOpts(type_='slider',range_start=0,range_end=2500)
                    )
line.add_xaxis(x)
line.add_yaxis(series_name='公司A',y_axis=y1)
line.add_yaxis(series_name='公司B',y_axis=y2)
line.render_notebook()

運行結果爲:
在這裏插入圖片描述

餅狀圖

在統計圖表中,還有一個常見的圖表類型就是餅狀圖,我們可以來了解一下怎麼繪製。

x_data =["甲",'乙','丙','丁']
y_data =[737,3784,3433,3456]
data_pair =list(zip(x_data,y_data))
pie = pyec.Pie()
pie.add(series_name='推廣渠道',data_pair=data_pair)
pie.render_notebook()

我們採用列表中包含元組的形式來傳入數據,我們可以看看生成的結果:
在這裏插入圖片描述
我們可以嘗試修改添加一些參數,來讓圖表顯示更加美觀,比如我們可以修改餅狀圖在圖中的位置。

x_data =["甲",'乙','丙','丁']
y_data =[737,3784,3433,3456]
data_pair =list(zip(x_data,y_data))
pie = pyec.Pie()
pie.add(series_name='推廣渠道',data_pair=data_pair,center=['30%','50%'])## 餅圖的中心(圓心)座標,數組的第一項是橫座標,第二項是縱座標
# 默認設置成百分比,設置成百分比時第一項是相對於容器寬度,第二項是相對於容器高度
pie.render_notebook()

運行結果爲:
在這裏插入圖片描述
我們還可以修改餅圖內外半徑讓它變成環狀圖:

pie1 =pyec.Pie()
pie1.add(series_name='推廣渠道',data_pair=data_pair,radius =['60%','80%'])
pie1.set_global_opts()
pie.render_notebook()

運行結果爲:
在這裏插入圖片描述
餅狀圖對應的參數也有很多,有興趣瞭解的可以去官網瞭解一下。

詞雲圖

pyecharts也提供了詞雲圖,我們可以看看:

s = '''The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!'''
s = s.lower().split()
d = {}
for i in s:
    d[i] = d.get(i,0) + 1
di = list(d.items())

import pyecharts.charts as pyec
wordcloud = pyec.WordCloud()
wordcloud.add(series_name="",data_pair=di)
wordcloud.render_notebook()

運行結果爲:
在這裏插入圖片描述

總體配置

無論哪種圖表,它都存在它最初的配置,比如圖的背景,圖的標題等很多配置,在pyecharts中這個也是很常用的,我們可以來看一下:
在這裏插入圖片描述
我們修改這些時總局配置項可通過set_global_options方法設置,我這裏用背景做一個示例,有興趣的再自己嘗試一些其他的。

import pyecharts.charts as pyec
import pyecharts.options as opt
from pyecharts.globals import  ThemeType
x =['1','2','3','5']
y1 =[34,56,67,67]
y2 =[13,34,45,66]
y3 =[23,56,67,77]
y4 =[24,56,34,66]
bar = pyec.Bar()
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1)
bar.add_yaxis(series_name='公司B',yaxis_data=y2)
bar.add_yaxis(series_name='公司C',yaxis_data=y3)
bar.add_yaxis(series_name='公司D',yaxis_data=y4)
bar.set_global_opts(title_opts=opts.TitleOpts(title='默認主題類型',subtitle='副標題'))
bar.render_notebook()

這個採用的是默認的主題,我們可以看看:
在這裏插入圖片描述
我們只需修改theme 對應的值便可以修改主題,比如下面這個:

bar =pyec.Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))#設置主題類型
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1)
bar.add_yaxis(series_name='公司B',yaxis_data=y2)
bar.add_yaxis(series_name='公司C',yaxis_data=y3)
bar.add_yaxis(series_name='公司D',yaxis_data=y4)
bar.set_global_opts(title_opts=opts.TitleOpts(title='LIGHT',subtitle='副標題'))
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述
我們還嘗試一下其他幾種:

bar =pyec.Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND))#設置主題類型
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1)
bar.add_yaxis(series_name='公司B',yaxis_data=y2)
bar.add_yaxis(series_name='公司C',yaxis_data=y3)
bar.add_yaxis(series_name='公司D',yaxis_data=y4)
bar.set_global_opts(title_opts=opts.TitleOpts(title='WONDERLAND',subtitle='副標題'))
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述

bar =pyec.Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))#設置主題類型
bar.add_xaxis(x)
bar.add_yaxis(series_name='公司A',yaxis_data=y1)
bar.add_yaxis(series_name='公司B',yaxis_data=y2)
bar.add_yaxis(series_name='公司C',yaxis_data=y3)
bar.add_yaxis(series_name='公司D',yaxis_data=y4)
bar.set_global_opts(title_opts=opts.TitleOpts(title='CHALK',subtitle='副標題'))
bar.render_notebook()

運行結果爲:
在這裏插入圖片描述
pyecharts內置提供了10+種不同的風格,大家可以在自己電腦上多嘗試一下,看看效果,選擇一種自己喜歡的主題,也可以對自己定製主題,這一塊大家可以到官網上學習。至於其他總體配置項大家仿照這個,到官網查閱資料然後再來使用。pyecharts中每種圖表還有它對應的系列配置項,有興趣的大家可以去了解。關於pyecharts我介紹大致這些,最後我將官網上的一個圖表給大家看看,我們就可以知道pyecharts多麼的強大。

import datetime
import random

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


def calendar_base() -> Calendar:
    begin = datetime.date(2017, 1, 1)
    end = datetime.date(2017, 12, 31)
    data = [
        [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
        for i in range((end - begin).days + 1)
    ]

    c = (
        Calendar()
        .add("", data, calendar_opts=opts.CalendarOpts(range_="2017"))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Calendar-2017年微信步數情況"),
            visualmap_opts=opts.VisualMapOpts(
                max_=20000,
                min_=500,
                orient="horizontal",
                is_piecewise=True,
                pos_top="230px",
                pos_left="100px",
            ),
        )
    )
    return c
calendar_base().render_notebook()

運行結果爲:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章