最近研究python作圖台夺,看了一些作圖的第三方庫(kù),發(fā)現(xiàn)作不同的圖用不同的第三方庫(kù)的效果不同媒区,例如靡砌,如果要作出如下帶中國(guó)地圖+條形圖的樣式已脓,pyecharts這個(gè)庫(kù)還是很不錯(cuò)的。雖然有個(gè)硬傷通殃,就是渲染成圖片度液,花費(fèi)的時(shí)間較長(zhǎng),一張圖渲染花費(fèi)了大概20多s。
圖片效果如下:
代碼如下:
#繪制地圖用pyecharts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
# 使用 snapshot-selenium 渲染圖片恨诱,圖片渲染慢媳瞪,一張圖要20多秒
# 要裝chromedrive
from snapshot_selenium import snapshot
import numpy as np
from pyecharts.charts import Map,Bar,Grid
from pyecharts import options as opts
# 地圖
# 模擬數(shù)據(jù)
data={
"data": [
{"name": "臺(tái)灣", "value": 183},
{"name": "香港", "value": 54},
{"name": "江蘇", "value": 34},
{"name": "上海", "value": 22},
{"name": "山東", "value": 45},
{"name": "遼寧", "value": 12},
{"name": "廣東", "value": 56},
{"name": "四川", "value": 87},
{"name": "河南", "value": 98},
{"name": "黑龍江", "value":23},
{"name": "湖北", "value":2},
{"name": "廣西", "value":3}
],
}
areas=[d["name"] for d in data['data']]
values=[d["value"] for d in data['data']]
#排序,用于條形圖
data_sort=[list(z) for z in zip(areas, values)]
data_sort.sort(key=lambda x:(x[1]),reverse=True)
areas=[x[0] for x in data_sort]
values=[x[1] for x in data_sort]
# 地圖
map_chart=Map()
map_chart.add(series_name='',
data_pair=[list(z) for z in zip(areas, values)],
maptype='china',
is_map_symbol_show=False)
map_chart.set_series_opts(label_opts=opts.LabelOpts(is_show=True,font_size=9)) # {a}(系列名稱(chēng))照宝,蛇受(區(qū)域名稱(chēng)),{c}(合并數(shù)值), 7byvoux(無(wú))
map_chart.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_calculable=True,dimension=0,
min_=min(values),
max_=max(values),
# type_='color',
pos_right='100',
pos_top='center',
range_text=['樣本數(shù)量',''],
# range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(font_size=10)))
# 條形圖
bar=Bar()
bar.add_xaxis(xaxis_data=areas)
bar.add_yaxis(series_name="",
yaxis_data=values,
yaxis_index=1,
label_opts=opts.LabelOpts(is_show=True,position='right',formatter='厕鹃:{c}',font_size=9))
bar.reversal_axis()
bar.set_global_opts(
xaxis_opts=opts.AxisOpts(is_show=False,axislabel_opts=opts.LabelOpts(is_show=False)),#不顯示x軸及標(biāo)簽
yaxis_opts=opts.AxisOpts(is_show=True,is_inverse=True,axislabel_opts=opts.LabelOpts(is_show=False),#不顯示y軸標(biāo)簽
axistick_opts=opts.AxisTickOpts(is_show=False), #不顯示y軸tick
axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='rgba(0,0,0,0.5)'))), #y軸線設(shè)置
visualmap_opts=opts.VisualMapOpts(is_calculable=True,dimension=0,#設(shè)置dimension兢仰,條形圖每個(gè)itme和visualmap對(duì)應(yīng)
min_=min(values),
max_=max(values),
# type_='color',
pos_right='100',
pos_top='center',
range_text=['樣本數(shù)量',''],
# range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(font_size=10)))
# 地圖+條形圖的組合圖
grid_chart=Grid()
grid_chart.add(bar, grid_opts=opts.GridOpts( pos_left="10", pos_right="80%", pos_top="70%", pos_bottom="5",is_contain_label=False))
grid_chart.add(map_chart,grid_opts=opts.GridOpts())
# 在工作目錄下生成html
grid_chart.render()
# 渲染成圖片
make_snapshot(snapshot, grid_chart.render(), "grid_chart.png")
以上用的是pyecharts的v1版本,相關(guān)文檔見(jiàn)pyecharts剂碴,里面關(guān)于配置項(xiàng)和相關(guān)函數(shù)介紹的還是很詳細(xì)的把将,前期是看網(wǎng)上的樣例寫(xiě)的,后期要修改細(xì)節(jié)啥的忆矛,就是看著相關(guān)文檔進(jìn)行修改察蹲。
如果不是大批量的要求速度快的生成圖片,這個(gè)庫(kù)生成的圖片以及在設(shè)置上的靈活性還是很不錯(cuò)的催训。