最近碰巧需要用到pyecharts,但是實數門外漢,完全不懂怎么使用。網上找了一些教程和博客,不是CV大法,就是通篇代碼,既沒有代碼里的注釋,也沒有文字解釋。看了半天還是不知道各項屬性是什么意思,怎么使用,到頭來還要自己慢慢摸索。(以上純屬個人吐槽,并非貶低所有博主,也沒有表示我寫的就好。只是單純覺得有一些博文語焉不詳,并沒有什么實際意義。同時告誡自己。)
歡迎交流,噴子勿擾,侵權刪除。
?
回歸正題
pyecharts有一個官方API文檔,幾乎包攬了全部內容。便于查看。如果有一定的基礎,建議直接在API中尋找所需內容,不建議去看別人的博客了。畢竟很多東西都是要自己實踐過后才能得出答案。
?
官方API文檔
https://pyecharts.org/#/zh-cn/intro
官方文檔是中文的,清晰簡潔。有目錄欄,方便查看。各項屬性和介紹都有。
安裝
https://pyecharts.org/#/zh-cn/quickstart?id=%e5%a6%82%e4%bd%95%e5%ae%89%e8%a3%85
依舊是官方文檔里有說明。
使用
寫法
總的來說,寫法分成4部分
- 引用(即import)
- 數據(即data)
- 配置屬性(即option)
- 生成文件(即render)
調用方式有兩種,一種是鏈式調用,一種是單獨調用。
官方文檔里其實還是給出了說明,我這里CV過來了。
from pyecharts.charts import Bar
from pyecharts import options as opts
# V1 版本開始支持鏈式調用
# 你所看到的格式其實是 `black` 格式化以后的效果
# 可以執行 `pip install black` 下載使用
bar = (
Bar()
.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.set_global_opts(title_opts=opts.TitleOpts(title="主標題", subtitle="副標題"))
# 或者直接使用字典參數
# .set_global_opts(title_opts={"text": "主標題", "subtext": "副標題"})
)
bar.render()
# 不習慣鏈式調用的開發者依舊可以單獨調用方法
bar = Bar()
bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.set_global_opts(title_opts=opts.TitleOpts(title="主標題", subtitle="副標題"))
bar.render()
這里可以清楚的看到,兩種寫法之間的區別,怎么寫隨你的心意。
上面這張圖基本反映出了所有需要配置的配置項,如果需要設置相應的配置項,可以根據API里的描述,去進行設置。
實例
這里做一個全國地圖的實例。
展示地圖,并保存為指定的html文件
# encoding: utf-8
'''
# @Author : ccq
# @File : demo11.py
# @Time : 2019/7/29 17:20
'''
from example.commons import Faker
from pyecharts import options as opts # 導入模塊
from pyecharts.charts import Map # 導入模塊
customMap = (
Map()
.add("商家A", # 圖例
[list(z) for z in zip(Faker.provinces, Faker.values())], # 數據項
"china" # 地圖
)
.set_global_opts( # 設置全局項
title_opts=opts.TitleOpts( # 設置標題項
title="中國地圖" # 設置標題名稱
)
)
)
customMap.render("demo11.html") # 生成名為demo11的本地html文件
效果展示如下:
?可以看到標題在左上角,圖例在中間最頂上。這似乎有些不符合我們的審美,那接下來我們把標題居中,把圖例放到右下角。
標題居中,圖例放到右下角
# encoding: utf-8
'''
# @Author : ccq
# @File : demo11.py
# @Time : 2019/7/29 17:20
'''
from example.commons import Faker
from pyecharts import options as opts # 導入模塊
from pyecharts.charts import Map # 導入模塊
customMap = (
Map()
.add("商家A", # 圖例
[list(z) for z in zip(Faker.provinces, Faker.values())], # 數據項
"china" # 地圖
)
.set_global_opts( # 設置全局項
title_opts=opts.TitleOpts( # 設置標題配置項
title="中國地圖", # 設置標題名稱
pos_left="center" # 設置標題居中
),
legend_opts=opts.LegendOpts( # 設置圖例配置項
pos_right="right", # 設置為水平居左
pos_bottom="bottom" # 設置為垂直居下
)
)
)
customMap.render("demo11.html") # 生成名為demo11的本地html文件
?效果圖展示:
?
?當然啦,如果我們的圖上想加上一些視覺映射配置,例如下面這樣:
?那我需要再增加代碼。
增加視覺映射配置(分段式)
# encoding: utf-8
'''
# @Author : ccq
# @File : demo11.py
# @Time : 2019/7/29 17:20
'''
from example.commons import Faker
from pyecharts import options as opts # 導入模塊
from pyecharts.charts import Map # 導入模塊
customMap = (
Map()
.add("商家A", # 圖例
[list(z) for z in zip(Faker.provinces, Faker.values())], # 數據項
"china" # 地圖
)
# 設置系列配置項
.set_series_opts(
label_opts=opts.LabelOpts( # 設置標簽配置項
is_show=False # 設置不顯示Label
)
)
# 設置全局項
.set_global_opts(
title_opts=opts.TitleOpts( # 設置標題配置項
title="中國地圖", # 設置標題名稱
pos_left="center" # 設置標題居中
),
# 設置圖例配置項
legend_opts=opts.LegendOpts(
pos_right="right", # 設置為水平居左
pos_bottom="bottom" # 設置為垂直居下
),
# 設置視覺映射配置項
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True, # 設置為分段
pieces=[ # 自定義分段名稱和顏色
{"value": "1", "label": "A", "color": "red"},
{"value": "2", "label": "B", "color": "orange"},
{"value": "3", "label": "C", "color": "yellow"},
{"value": "4", "label": "D", "color": "green"},
{"value": "5", "label": "E", "color": "blue"},
{"value": "6", "label": "F", "color": "cyan"},
{"value": "7", "label": "G", "color": "purple"}
]
)
)
)
customMap.render("demo11.html") # 生成名為demo11的本地html文件
效果圖如下
?
{"value": "1", "label": "A", "color": "red"},這段代碼是用來寫自定義視覺映射項的
"value": "1"? :值為1,后面會提到為什么這樣設置
"label": "A"? :標簽名稱為A
"color": "red"? :顏色為紅色
?
那么接下來就是配置數據和圖例項了
配置數據
之前我們使用的是官方提供的數據,
[list(z) for z in zip(Faker.provinces, Faker.values())]
這個是別人提供的,但是我們想用自己的,那么怎么操作呢?
當然先自己定義一個數據項,然后把這個換成自己的數據項。
mydata1 = [
("云南", 1)
]
mydata2 = [
("廣東", 2)
]
mydata3 = [
("浙江", 3)
]
這是數據項的配置。因為我們使用的map圖,因此,沒有經緯度要填寫,要寫的只是,省份和對應的value值,熟悉嗎?value,剛剛在上面提到的,自定義視覺映射項時的value值要和這里的值對應哦。
配置圖例項
.add("圖例1", # 圖例
mydata1, # 數據項
"china" # 地圖
)
.add("圖例2", # 圖例
mydata2, # 數據項
"china" # 地圖
)
.add("圖例3", # 圖例
mydata3, # 數據項
"china" # 地圖
)
.add里有3個參數,第一個是圖例名稱,第二個是數據,第三個是地圖種類。
綜合
# encoding: utf-8
'''
# @Author : ccq
# @File : demo11.py
# @Time : 2019/7/29 17:20
'''
from example.commons import Faker
from pyecharts import options as opts # 導入模塊
from pyecharts.charts import Map # 導入模塊
mydata1 = [
("云南", 1)
]
mydata2 = [
("廣東", 2)
]
mydata3 = [
("浙江", 3)
]
customMap = (
Map()
.add("圖例1", # 圖例
mydata1, # 數據項
"china" # 地圖
)
.add("圖例2", # 圖例
mydata2, # 數據項
"china" # 地圖
)
.add("圖例3", # 圖例
mydata3, # 數據項
"china" # 地圖
)
# 設置系列配置項
.set_series_opts(
label_opts=opts.LabelOpts( # 設置標簽配置項
is_show=False # 設置不顯示Label
)
)
# 設置全局項
.set_global_opts(
title_opts=opts.TitleOpts( # 設置標題配置項
title="中國地圖", # 設置標題名稱
pos_left="center" # 設置標題居中
),
# 設置圖例配置項
legend_opts=opts.LegendOpts(
pos_right="right", # 設置為水平居左
pos_bottom="bottom" # 設置為垂直居下
),
# 設置視覺映射配置項
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True, # 設置為分段
pieces=[ # 自定義分段名稱和顏色
{"value": "1", "label": "A", "color": "red"},
{"value": "2", "label": "B", "color": "orange"},
{"value": "3", "label": "C", "color": "yellow"},
{"value": "4", "label": "D", "color": "green"},
{"value": "5", "label": "E", "color": "blue"},
{"value": "6", "label": "F", "color": "cyan"},
{"value": "7", "label": "G", "color": "purple"}
]
)
)
)
customMap.render("demo11.html") # 生成名為demo11的本地html文件
效果圖
?
OK,這樣一個自定義的就完成了!有問題歡迎交流!
?
#2019/7/29 21:00更新
使用Geo圖新完成了一個有大量數據的地圖
# encoding: utf-8
'''
# @Author : ccq
# @File : demo02.py
# @Time : 2019/7/29 13:57
'''
from pyecharts import options as opts # 導入模塊
from pyecharts.charts import Geo # 導入模塊
# 設置數據
persondata = [('云南', '1'), ('云南', '3'), ('北京', '4'), ('甘肅', '4'), ('廣西', '4'), ('廣西', '3'), ('廣西', '6'),
('廣東', '4'), ('廣東', '1'), ('廣東', '2'), ('安徽', '4'), ('貴州', '4'), ('河南', '4'), ('湖北', '5'),
('山西', '4'), ('陜西', '4'), ('上海', '4'), ('四川', '4'), ('四川', '5'), ('四川', '3'), ('四川', '6'),
('新疆', '3'), ('新疆', '4'), ('浙江', '4'), ('浙江', '5'), ('浙江', '6'), ('云南', '5'), ('云南', '3'),
('重慶', '4'), ]
chickendata = [('北京', '4'), ('廣西', '4'), ('廣西', '3'), ('河南', '4'), ('河南', '3'), ('江蘇', '4'), ('江西', '4'),
('江西', '5'), ('山東', '4'), ('上海', '4'), ('四川', '4'), ('四川', '5'), ('四川', '3'), ('廣東', '4'), ('廣東', '3'), ]
duckdata = [('北京', '4'), ('山東', '4'), ('浙江', '4'), ('廣東', '4'), ('廣東', '3'), ]
pigdata = [('廣西', '4'), ('廣西', '5'), ('廣東', '4'), ('黑龍江', '4'), ('江西', '4'), ('江西', '5'), ('山東', '4'), ]
seafooddata = [('廣東', '4'), ]
mousedata = [('河南', '4'), ]
cattledata = [('新疆', '3'), ]
sheepdata = [('新疆', '3'), ]
geo = Geo() # 初始化配置項
geo.add_schema(maptype="china") # 設置地圖類型
geo.add(#添加圖例
'鼠',#圖例名稱
persondata,#數據源
symbol='circle',#圖例形狀
)
geo.add(
'牛',
chickendata,
symbol='rect',
)
geo.add(
'虎',
duckdata,
symbol='roundRect',
)
geo.add(
'兔',
pigdata,
symbol='triangle',
)
geo.add(
'龍',
seafooddata,
symbol='diamond',
)
geo.add(
'蛇',
mousedata,
symbol='pin',
)
geo.add(
'馬',
cattledata,
symbol='arrow',
)
geo.add(
'羊',
sheepdata,
symbol='none',
)
geo.set_global_opts( # 設置全局項
title_opts=opts.TitleOpts( # 設置標題配置項
title="中國地圖", # 設置標題名稱
pos_left="center" # 設置標題距離容器左邊的位置 這里為居中
),
visualmap_opts=opts.VisualMapOpts( # 設置視覺映射配置項
is_piecewise=True, # 設置是否為分段型
pos_left="left", # 設置視覺映射距離容器左邊的位置 這里為居左
pos_bottom="bottom", # 設置視覺映射距離容器底部的位置 這里為底部
orient="vertical", # 設置水平('horizontal')或者豎直('vertical')
pieces=[ # 設置每段的范圍、文字、顏色
{"value": "1", "label": "A", "color": "red"},
{"value": "2", "label": "B", "color": "orange"},
{"value": "3", "label": "C", "color": "yellow"},
{"value": "4", "label": "D", "color": "green"},
{"value": "5", "label": "E", "color": "blue"},
{"value": "6", "label": "F", "color": "cyan"},
{"value": "7", "label": "G", "color": "purple"}
],
),
legend_opts=opts.LegendOpts( # 設置圖例配置項
pos_right="right",
pos_top="top",
orient="vertical",
),
)
geo.set_series_opts(
label_opts=opts.LabelOpts( # 設置標簽配置項
is_show=False # 設置不顯示Label
)
)
geo.render("demo03.html") # 生成名為"demo03"的本地html文件
與Map不同在于:
Map中add的時候需要添加地圖屬性'china',但是Geo中只需要額外添加一句
geo.add_schema(maptype="china") ?# 設置地圖類型
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
