使用pyecharts1.5進行數據分析可視化


使用pyecharts 1.5進行數據可視化

安裝 pip install pyecharts
直接使用該命令安裝的版本為最新版本為1.5。語法與之前版本大不一樣,因此本文僅針對1.5及之后版本說明。若想使用之前版本請使用命令pip install pyecharts == 0.1.5.19
注:建議在jupyter notebook中coding,方便debug。

開始使用

基本套路就是先創建一個你需要的空圖層,然后使用.set_global_opts修改全局項再用.set_series_opts修改具體的相關配置就可以。當然最好的學習地址一定是官方文檔,但是里面介紹的太過復雜了,這里僅以快速上手使用為目標進行幾個例子來說明套路。

地圖

pyecharts比較好的就是繪制地圖,這里以2019-nCov項目中安徽省地圖繪制為例。

首先導入需要的包

from pyecharts.charts import Pie ,Grid,Bar,Line
from pyecharts.faker import Faker #數據包
from pyecharts.charts import Map,Geo
from pyecharts import options as opts
from pyecharts.globals import ThemeType

OK,我現在有一個省份的一組數據,大概長這樣

locate =['合肥市', '阜陽市', '亳州市', '安慶市', '馬鞍山市', '銅陵市', '六安市', '滁州市', '池州市','蚌埠市','蕪湖市','宿州市','宣城市','淮北市','淮南市','黃山市']`
data =['115','105','72','66','30','22','41','11','11','88','27','27','5','22','14','9']

這也是接觸到的需要繪制地圖的數據格式,兩個list,一個是地名,一個是每個城市對應的數據,現在執行以下代碼就可以得到安徽省的疫情地圖。

list1 = [[locate[i],data[i]] for i in range(len(locate))] #首先創建數據
map_1 = Map(init_opts=opts.InitOpts(width="400px", height="460px")) #創建地圖,其中括號內可以調整大小,也可以修改主題顏色。
map_1.add("安徽疫情", list1, maptype="安徽") #添加安徽地圖
map_1.set_global_opts( #設置全局配置項
    #title_opts=opts.TitleOpts(title="安徽疫情"), 添加標題
    visualmap_opts=opts.VisualMapOpts(max_=120, is_piecewise=True),#最大數據范圍 並且使用分段
    legend_opts=opts.LegendOpts(is_show=False), #是否顯示圖例
    )
map_1.render_notebook() #直接在notebook中顯示
# map_1.render('map1.html') 將地圖以html形式保存在工作目錄下
1gSvTJ.png

當然地圖還有很多可以自定義的配置項,選擇需要的配置項添加到對應的函數中即可。

    # 數據項 (坐標點名稱,坐標點值)
    data_pair: Sequence,

    # 地圖類型,具體參考 pyecharts.datasets.map_filenames.json 文件
    maptype: str = "china",

    # 是否選中圖例
    is_selected: bool = True,

    # 是否開啟鼠標縮放和平移漫游。
    is_roam: bool = True,

    # 當前視角的中心點,用經緯度表示
    center: Optional[Sequence] = None,

    # 當前視角的縮放比例。
    zoom: Optional[Numeric] = 1,

    # 自定義地區的名稱映射
    name_map: Optional[dict] = None,

    # 標記圖形形狀
    symbol: Optional[str] = None,

    # 是否顯示標記圖形
    is_map_symbol_show: bool = True,

    # 標簽配置項,參考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 提示框組件配置項,參考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 圖元樣式配置項,參考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

    # 高亮標簽配置項,參考 `series_options.LabelOpts`
    emphasis_label_opts: Union[opts.LabelOpts, dict, None] = None,

    # 高亮圖元樣式配置項,參考 `series_options.ItemStyleOpts`
    emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

餅圖

最簡單的一個餅圖

from pyecharts.faker import Faker #導入官方數據示例包
c = (
    Pie() #創建一個餅圖 ()里面可以添加配置項
    .add("", [list(z) for z in zip(Faker.choose(), Faker.values())]) #添加數據
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例")) #全局配置項
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) #圖形配置項 配置標簽
)
c.render_notebook() #展示圖
1gprBF.png

餅圖的更多配置項

    # 系列名稱,用於 tooltip 的顯示,legend 的圖例篩選。
    series_name: str,

    # 系列數據項,格式為 [(key1, value1), (key2, value2)]
    data_pair: Sequence,

    # 系列 label 顏色
    color: Optional[str] = None,

    # 餅圖的半徑,數組的第一項是內半徑,第二項是外半徑
    # 默認設置成百分比,相對於容器高寬中較小的一項的一半
    radius: Optional[Sequence] = None,

    # 餅圖的中心(圓心)坐標,數組的第一項是橫坐標,第二項是縱坐標
    # 默認設置成百分比,設置成百分比時第一項是相對於容器寬度,第二項是相對於容器高度
    center: Optional[Sequence] = None,

    # 是否展示成南丁格爾圖,通過半徑區分數據大小,有'radius'和'area'兩種模式。
    # radius:扇區圓心角展現數據的百分比,半徑展現數據的大小
    # area:所有扇區圓心角相同,僅通過半徑展現數據大小
    rosetype: Optional[str] = None,

    # 餅圖的扇區是否是順時針排布。
    is_clockwise: bool = True,

    # 標簽配置項,參考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 提示框組件配置項,參考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 圖元樣式配置項,參考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

繼續使用地圖里的數據繪制餅圖,現在想看安徽各地區疫情分布比,就可以考慮使用餅圖(玫瑰圖)。詳細代碼

map_2 = (
    Pie(init_opts=opts.InitOpts(width="600px", height="500px")) 創建一個餅圖
    .add(
        "", #圖名
        [[locate[i],data[i]] for i in range(len(locate))], #添加數據
        radius=["40%", "75%"], # 調整半徑
    )
    .set_global_opts(
        legend_opts=opts.LegendOpts( 
            orient="vertical", pos_top="10%", pos_left="88%" #圖例設置
        ),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) #設置標簽
)
map_2.render_notebook() #直接在notebook中顯示
#map_2.render('map2.html') #保存到本地
1gpSYR.png

柱狀圖

demo

c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values()) #數據配置
    .add_yaxis("商家B", Faker.values()) #數據配置
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副標題")) #全局配置標題
)
c.render_notebook()
1g9OIJ.png

通過添加配置項可以調整標題、圖例、粗細、位置、背景圖等等

    # 系列數據
    yaxis_data: Sequence[Numeric, opts.BarItem, dict],

    # 是否選中圖例
    is_selected: bool = True,

    # 使用的 x 軸的 index,在單個圖表實例中存在多個 x 軸的時候有用。
    xaxis_index: Optional[Numeric] = None,

    # 使用的 y 軸的 index,在單個圖表實例中存在多個 y 軸的時候有用。
    yaxis_index: Optional[Numeric] = None,

    # 系列 label 顏色
    color: Optional[str] = None,

    # 數據堆疊,同個類目軸上系列配置相同的 stack 值可以堆疊放置。
    stack: Optional[str] = None,

    # 同一系列的柱間距離,默認為類目間距的 20%,可設固定值
    category_gap: Union[Numeric, str] = "20%",

    # 不同系列的柱間距離,為百分比(如 '30%',表示柱子寬度的 30%)。
    # 如果想要兩個系列的柱子重疊,可以設置 gap 為 '-100%'。這在用柱子做背景的時候有用。
    gap: Optional[str] = None,

    # 標簽配置項,參考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 標記點配置項,參考 `series_options.MarkPointOpts`
    markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,

    # 標記線配置項,參考 `series_options.MarkLineOpts`
    markline_opts: Union[opts.MarkLineOpts, dict, None] = None,

    # 提示框組件配置項,參考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 圖元樣式配置項,參考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

同一圖層繪制多圖

如果想要同時疊加繪制圖形可以采用參考以下方法

def two_pic() -> Bar: 
    x = Faker.choose() #選擇數據
    bar = (  #先繪制bar
        Bar()
        .add_xaxis(x)
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(title_opts=opts.TitleOpts(title="Overlap-line+scatter"))
    )
    line = ( #再添加line
        Line()
        .add_xaxis(x)
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
    )
    bar.overlap(line)
    return bar
two_pic().render_notebook()
1gP80O.png

總結

使用新版pyecharts並不難,基本套路都和上面一樣,只要先學會畫圖套路,再多讀官方文檔就可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM