pyecharts的使用介绍
介绍
软件功能:
生成Echarts图表的类库。实际上就是 Echarts 与 Python 的对接。Echarts图表是百度开源的一个数据可视化 JS 库,主要用于数据可视化。使用 pyecharts 可以生成独立的网页,也可以在 flask , Django 中集成使用。
特性:
简洁的 API 设计,使用如丝滑般流畅,支持链式调用
囊括了 30+ 种常见图表,应有尽有
支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
可轻松集成至 Flask,Django 等主流 Web 框架
高度灵活的配置项,可轻松搭配出精美的图表
详细的文档和示例,帮助开发者更快的上手项目
多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
包含的图表
Bar(柱状图/条形图)
Bar3D(3D 柱状图)
Boxplot(箱形图)
EffectScatter(带有涟漪特效动画的散点图)
Funnel(漏斗图)
Gauge(仪表盘)
Geo(地理坐标系)
Graph(关系图)
HeatMap(热力图)
Kline(K线图)
Line(折线/面积图)
Line3D(3D 折线图)
Liquid(水球图)
Map(地图)
Parallel(平行坐标系)
Pie(饼图)
Polar(极坐标系)
Radar(雷达图)
Sankey(桑基图)
Scatter(散点图)
Scatter3D(3D 散点图)
ThemeRiver(主题河流图)
WordCloud(词云图)
用户自定义
Grid 类:并行显示多张图
Overlap 类:结合不同类型图表叠加画在同张图上
Page 类:同一网页按顺序展示多图
Timeline 类:提供时间线轮播多张图
安装:
使用pip install pyecharts
Pie图
# 设置
from pyecharts import options as opts
# 利用Faker数据
from pyecharts.faker import Faker
# 导入pie模块
from pyecharts.charts import Pie
# 为了运行完代码就显示html文件
import os
c = (
Pie() # 生成图表的主体
.add(
"",
[list(z) for z in zip(Faker.choose(), Faker.values())] #数据类容
) # 一个add就会出现一个图
.set_colors(
["blue", "green", "yellow", "red", "pink", "orange", "purple"] # 自定义设置数据颜色
)
.set_global_opts(
title_opts=opts.TitleOpts(title="环饼图"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%")
) # 全局配置内容
.set_series_opts(
label_opts=opts.LabelOpts(formatter="{b}:{c}")
) # 系列配置内容
.render("环饼图test1.html") # //生成本地文件,路径可以自定义,默认当前文件
)
os.system("环饼图test1.html")
全局配置
通过set_global_opts方法设置。
from pyecharts import options as opts
from pyecharts.charts import *
c = (
Bar() # 生成图表的主体
...... # 其他业务逻辑
.set_global_opts(
...... # 具体全局配置的内容
)
.render("xxxx.html")
)
系列配置
关于formatter的abcd等参数
其中变量a、b、c在不同图表类型下代表数据含义为:
折线(区域)图、柱状(条形)图:
a(系列名称),b(类目值),c(数值), d(无)
散点图(气泡)图
a(系列名称),b(数据名称),c(数值数组), d(无)
饼图、雷达图
a(系列名称),b(数据项名称),c(数值), d(百分比)
弦图
a(系列名称),b(项1名称),c(项1-项2值),d(项2名称), e(项2-项1值)
力导向图
节点 : a(类目名称),b(节点名称),c(节点值)
边 : a(系列名称),b(源名称-目标名称),c(边权重), d(如果为true的话则数据来源是边)
参考:
ECharts中的 formatter中的a,b,c,d等参数的意义
主题风格
Faker数据集
Faker 数据集是 Pyecharts 自带的数据集,Pyecharts 图表案例中使用的可视化数据都来源于 pyecharts 中的 faker.py 文件。
Faker数据有很多类型,如下:
类别数据
clothes = ["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]
drinks = ["可乐", "雪碧", "橙汁", "绿茶", "奶茶", "百威", "青岛"]
phones = ["小米", "三星", "华为", "苹果", "魅族", "VIVO", "OPPO"]
fruits = ["草莓", "芒果", "葡萄", "雪梨", "西瓜", "柠檬", "车厘子"]
animal = ["河马", "蟒蛇", "老虎", "大象", "兔子", "熊猫", "狮子"]
cars = ["宝马", "法拉利", "奔驰", "奥迪", "大众", "丰田", "特斯拉"]
dogs = ["哈士奇", "萨摩耶", "泰迪", "金毛", "牧羊犬", "吉娃娃", "柯基"]
时间数据
week = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
week_en = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]
clock = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a ", "11a", "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"]
months = ["{}月".format(i) for i in range(1, 13)]
days_attrs = ["{}天".format(i) for i in range(30)]
days_values = [random.randint(1, 30) for _ in range(30)]
颜色数据
visual_color = [
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026",
]
地理数据
provinces = ["广东", "北京", "上海", "江西", "湖南", "浙江", "江苏"]
guangdong_city = ["汕头市", "汕尾市", "揭阳市", "阳江市", "肇庆市", "广州市", "惠州市"]
country = [
"China",
"Canada",
"Brazil",
"Russia",
"United States",
"Africa",
"Germany",
]
世界人口数据
POPULATION = [
["Country (or dependency)", "Population\n(2019)"],
["China", 1420062022],
["India", 1368737513],
["United States", 329093110],
["Indonesia", 269536482],
["Brazil", 212392717],
["Pakistan", 204596442],
["Nigeria", 200962417],
["Bangladesh", 168065920],
["Russia", 143895551],
["Mexico", 132328035],
["Japan", 126854745],
["Ethiopia", 110135635],
["Philippines", 108106310],
["Egypt", 101168745],
["Vietnam", 97429061],
["DR Congo", 86727573],
["Turkey", 82961805],
["Iran", 82820766],
["Germany", 82438639],
["Thailand", 69306160],
["United Kingdom", 66959016],
["France", 65480710],
["Tanzania", 60913557],
["Italy", 59216525],
["South Africa", 58065097],
["Myanmar", 54336138],
["Kenya", 52214791],
["South Korea", 51339238],
["Colombia", 49849818],
["Spain", 46441049],
["Uganda", 45711874],
["Argentina", 45101781],
["Ukraine", 43795220],
["Algeria", 42679018],
["Sudan", 42514094],
["Iraq", 40412299],
["Poland", 38028278],
["Canada", 37279811],
["Afghanistan", 37209007],
["Morocco", 36635156],
["Saudi Arabia", 34140662],
["Peru", 32933835],
["Uzbekistan", 32807368],
["Venezuela", 32779868],
["Malaysia", 32454455],
["Angola", 31787566],
["Mozambique", 31408823],
["Ghana", 30096970],
["Nepal", 29942018],
["Yemen", 29579986],
["Madagascar", 26969642],
["North Korea", 25727408],
["Côte d'Ivoire", 25531083],
["Cameroon", 25312993],
["Australia", 25088636],
["Taiwan", 23758247],
["Niger", 23176691],
["Sri Lanka", 21018859],
["Burkina Faso", 20321560],
["Malawi", 19718743],
["Mali", 19689140],
["Romania", 19483360],
["Kazakhstan", 18592970],
["Syria", 18499181],
["Chile", 18336653],
["Zambia", 18137369],
["Guatemala", 17577842],
["Zimbabwe", 17297495],
["Netherlands", 17132908],
["Ecuador", 17100444],
["Senegal", 16743859],
["Cambodia", 16482646],
["Chad", 15814345],
["Somalia", 15636171],
["Guinea", 13398180],
["South Sudan", 13263184],
["Rwanda", 12794412],
["Benin", 11801595],
["Tunisia", 11783168],
["Burundi", 11575964],
["Belgium", 11562784],
["Cuba", 11492046],
["Bolivia", 11379861],
["Haiti", 11242856],
["Greece", 11124603],
["Dominican Republic", 10996774],
["Czechia", 10630589],
["Portugal", 10254666],
["Jordan", 10069794],
["Sweden", 10053135],
["Azerbaijan", 10014575],
["United Arab Emirates", 9682088],
["Hungary", 9655361],
["Honduras", 9568688],
["Belarus", 9433874],
["Tajikistan", 9292000],
["Austria", 8766201],
["Serbia", 8733407],
["Switzerland", 8608259],
["Papua New Guinea", 8586525],
["Israel", 8583916],
["Togo", 8186384],
["Sierra Leone", 7883123],
["Hong Kong", 7490776],
["Laos", 7064242],
["Bulgaria", 6988739],
["Paraguay", 6981981],
["Libya", 6569864],
["El Salvador", 6445405],
["Nicaragua", 6351157],
["Kyrgyzstan", 6218616],
["Lebanon", 6065922],
["Turkmenistan", 5942561],
["Singapore", 5868104],
["Denmark", 5775224],
["Finland", 5561389],
["Congo", 5542197],
["Slovakia", 5450987],
["Norway", 5400916],
["Eritrea", 5309659],
["State of Palestine", 5186790],
["Oman", 5001875],
["Costa Rica", 4999384],
["Liberia", 4977720],
["Ireland", 4847139],
["Central African Republic", 4825711],
["New Zealand", 4792409],
["Mauritania", 4661149],
["Kuwait", 4248974],
["Panama", 4226197],
["Croatia", 4140148],
["Moldova", 4029750],
["Georgia", 3904204],
["Puerto Rico", 3654978],
["Bosnia and Herzegovina", 3501774],
["Uruguay", 3482156],
["Mongolia", 3166244],
["Albania", 2938428],
["Armenia", 2936706],
["Jamaica", 2906339],
["Lithuania", 2864459],
["Qatar", 2743901],
["Namibia", 2641996],
["Botswana", 2374636],
["Lesotho", 2292682],
["Gambia", 2228075],
["Gabon", 2109099],
["North Macedonia", 2086720],
["Slovenia", 2081900],
["Guinea-Bissau", 1953723],
["Latvia", 1911108],
["Bahrain", 1637896],
["Swaziland", 1415414],
["Trinidad and Tobago", 1375443],
["Equatorial Guinea", 1360104],
["Timor-Leste", 1352360],
["Estonia", 1303798],
["Mauritius", 1271368],
["Cyprus", 1198427],
["Djibouti", 985690],
["Fiji", 918757],
["Réunion", 889918],
["Comoros", 850910],
["Bhutan", 826229],
["Guyana", 786508],
["Macao", 642090],
["Solomon Islands", 635254],
["Montenegro", 629355],
["Luxembourg", 596992],
["Western Sahara", 582478],
["Suriname", 573085],
["Cabo Verde", 560349],
["Micronesia", 536579],
["Maldives", 451738],
["Guadeloupe", 448798],
["Brunei", 439336],
["Malta", 433245],
["Bahamas", 403095],
["Belize", 390231],
["Martinique", 385320],
["Iceland", 340566],
["French Guiana", 296847],
["French Polynesia", 288506],
["Vanuatu", 288017],
["Barbados", 287010],
["New Caledonia", 283376],
["Mayotte", 266380],
["Sao Tome & Principe", 213379],
["Samoa", 198909],
["Saint Lucia", 180454],
["Guam", 167245],
["Channel Islands", 166828],
["Curaçao", 162547],
["Kiribati", 120428],
["St. Vincent & Grenadines", 110488],
["Tonga", 110041],
["Grenada", 108825],
["Aruba", 106053],
["U.S. Virgin Islands", 104909],
["Antigua and Barbuda", 104084],
["Seychelles", 95702],
["Isle of Man", 85369],
["Andorra", 77072],
["Dominica", 74679],
["Cayman Islands", 63129],
["Bermuda", 60833],
["Greenland", 56673],
["Saint Kitts & Nevis", 56345],
["American Samoa", 55727],
["Northern Mariana Islands", 55246],
["Marshall Islands", 53211],
["Faeroe Islands", 49692],
["Sint Maarten", 40939],
["Monaco", 39102],
["Liechtenstein", 38404],
["Turks and Caicos", 36461],
["Gibraltar", 34879],
["San Marino", 33683],
["British Virgin Islands", 32206],
["Caribbean Netherlands", 25971],
["Palau", 22206],
["Cook Islands", 17462],
["Anguilla", 15174],
["Wallis & Futuna", 11617],
["Tuvalu", 11393],
["Nauru", 11260],
["Saint Pierre & Miquelon", 6375],
["Montserrat", 5220],
["Saint Helena", 4096],
["Falkland Islands", 2921],
["Niue", 1628],
["Tokelau", 1340],
["Holy See", 799],
]
数据随机选择方法
def choose(self) -> list:
return random.choice(
[
self.clothes,
self.drinks,
self.phones,
self.fruits,
self.animal,
self.dogs,
self.week,
]
)
@staticmethod
def values(start: int = 20, end: int = 150) -> list:
return [random.randint(start, end) for _ in range(7)]
@staticmethod
def rand_color() -> str:
return random.choice(
[
"#c23531",
"#2f4554",
"#61a0a8",
"#d48265",
"#749f83",
"#ca8622",
"#bda29a",
"#6e7074",
"#546570",
"#c4ccd3",
"#f05b72",
"#444693",
"#726930",
"#b2d235",
"#6d8346",
"#ac6767",
"#1d953f",
"#6950a1",
]
)
@staticmethod
def img_path(path: str, prefix: str = "images") -> str:
return os.path.join(prefix, path)
Faker = _Faker()
class Collector:
charts = []
@staticmethod
def funcs(fn):
Collector.charts.append((fn, fn.__name__))
一些问题
pyecharts中怎么显示整数?浮点数??
利用f_string将data转成相应的数据。
pycharts中x轴显示不全?
将x轴旋转一定角度,即在set_global_opts()属性中添加:
set_global_opts(
title_opts=opts.TitleOpts(title='名字'),
xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":45})
)
小tips
- 数据中如有省市等元素,用map图更好。