【pyecharts有两种基本图表】
1. 带x轴和y轴的直角坐标系图表
.add_xaxis()
.add_yaxis()
2. 不带x轴和y轴的基本图表(饼图,词云图,雷达图,桑基图)
.add()
【组合图表:轮播多图】组合图表,也是一种特殊的图表类型
并行多图: 就是往组合图表里面填充各种图表(Bar,Line,Scatter) —— 往图表里面填充图表
我的第一个柱形图
# 【pyecharts绘图思路】
# 0.导入需要用到的图表类(Bar,Line,Scatter,Pie)
from pyecharts.charts import Bar, Line, Scatter, Pie
import pyecharts.options as opts
# 1. 准备数据(数据爬取-数据清洗-数据结构化): 数据格式要符合传参的需求
bar_x = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
bar_height1 = [5, 20, 36, 10, 75, 90]
bar_height2 = [15, 25, 33, 11, 75, 90]
# 2.通过导入的图表类,创建图表实例
bar = Bar() # 柱形图实例
# 3.往图表实例填充数据,即完成绘图
bar.add_xaxis( bar_x )
bar.add_yaxis("商家A", bar_height1 )
bar.add_yaxis("商家B", bar_height2 )
# 4.设置“系列配置项”和“全局配置项”--> 可做可不做(类似于matplotlib的:图表辅助元素的定制和样式美化)
# 全局配置项中,“图例”和“提示框”是默认打开的。
# 系列配置项中,有些参数在set_global_opts设置中会生效,而有些参数却在set_series_opts设置中生效:
# 设置“全局配置项”(设置图表外部元素的样式)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="这是我的第一个pyechars柱形图", subtitle="我感觉不难嘛"), # 标题
legend_opts=opts.LegendOpts(), # 图例
tooltip_opts=opts.TooltipOpts( border_width= 2, border_color='red'), # 提示框
toolbox_opts=opts.ToolboxOpts(pos_left = '10%', pos_top='20%' ), # 工具箱
datazoom_opts=opts.DataZoomOpts(), # 区域缩放条
visualmap_opts=opts.VisualMapOpts(), # 视觉映射条(用来通过颜色筛选展示)
# 通过“轴配置项”,配置x轴
xaxis_opts=opts.AxisOpts(name='我是X轴', name_rotate=60, name_gap=45,
axislabel_opts=opts.LabelOpts(color='red',
font_size=10,
font_style='italic',
margin=20, # 轴标签与轴脊的距离
)
),
# 通过“轴配置项”,配置y轴
yaxis_opts=opts.AxisOpts(name='我是Y轴', # 轴的名称
min_ =0, max_ = 200, # 刻度范围
interval = 20, # 配合min_和max_参数,调整刻度位置
axistick_opts=opts.AxisTickOpts(is_show=True, is_inside=True, length=40),
axislabel_opts=opts.LabelOpts(color='red',
font_size=10,
font_style='italic',)
), #
)
# 设置“系列配置项”(设置图表内部元素的样式)
bar.set_series_opts(
label_opts=opts.LabelOpts(color='green',
font_size=20,
font_style='italic',
position ='top',
distance = 30,
)
)
# 5. 展示图表(渲染图表)
bar.render_notebook() # 渲染到jupyter notebook编辑器页面
展示图表如下:
【桑基图展示: 红一方面军(中央红军)长征兵力流向】
from pyecharts import options as opts
from pyecharts.charts import Sankey
# 定义节点
nodes = [
{"name": "江西"},
{"name": "广东"},
{"name": "福建"},
{"name": "广西"},
{"name": "湖南"},
{"name": "牺牲"},
{"name": "贵州"},
]
# 定义数据流向
links = [
# 源头source --> 目标target
{"source": "江西", "target": "广东", "value": 84000},
{"source": "江西", "target": "福建", "value": 2000},
{"source": "广东", "target": "湖南", "value": 65000},
{"source": "广东", "target": "牺牲", "value": 19000},
{"source": "湖南", "target": "贵州", "value": 30000},
{"source": "湖南", "target": "牺牲", "value": 35000},
]
# 拿破仑东征图(最原始的桑基图)
c = (
Sankey()
.add(
"sankey",
nodes,
links,
linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
label_opts=opts.LabelOpts(position="right"),
)
#.set_global_opts(title_opts=opts.TitleOpts(title="Sankey-基本示例"))
)
c.render_notebook()
桑基图的特点:一种特殊的流程图,描述第一组节点到第二组节点的数据流向及流量大小。
第一组节点的总数据量 等于 第二组节点的总数据量(流出=流入,能量守恒)
展示图表如下:
地图Map
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker'
data = [
['江西省', 86000],
['福建省', 85000], ['广东省', 82000], ['湖南省', 65000], ['广西省', 65000],
['贵州省', 30000], ['云南省', 20000], ['四川省', 10000], ['甘肃省', 5000],
['陕西省', 7000], # 星星之火可以燎原,《毛泽东选集1-4卷》,唯物辩证法——实践论和矛盾论
]
c = (
Map()
.add("聚集", data, "china") # 第三个参数为:地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-广东地图"), visualmap_opts=opts.VisualMapOpts()
)
)
c.render_notebook()
统计地图构建数据时, 地区名要跟地图上的名字完全对应,不可以增减字数。
统计地图的地图类型选取,需要注意:
1. 中国地图传入: 'china'
2. 外国地图传入: '美国', '英国', '俄罗斯'
3. 中国省份和城市: '广东', '梅州', '新疆
展示图表如下:
词云图
import pyecharts.options as opts
from pyecharts.charts import WordCloud
data = [
("王俊凯", "999"), # 《长城》
("易烊千玺", "3000"), # 演技派 《少年的你》 —— 校园霸凌
("王源", "777"),
("我爱你", "688"),
("演技派", "588"),
("唱歌好听", "516"),
("喜欢你", "515"),
]
wordcloud = (
WordCloud()
.add(series_name="热点分析", data_pair=data,
word_size_range=[20, 50], # 词的字号
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
)
wordcloud.render_notebook()
展示图表如下:
【组合图表:并行多图】
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
from pyecharts.faker import Faker
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar"))
)
line = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
# 通过联合调整pos_bottom, pos_top, pos_left, pos_right这四个参数,可以精细布局图例在整张画布中的位置
legend_opts=opts.LegendOpts(pos_bottom="30%",pos_top="65%",
pos_left="10%",pos_right="75%",
textstyle_opts = opts.TextStyleOpts(font_size=3),
),
)
)
line1 = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
)
)
line2 = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
)
)
grid = (
# 1.创建一个Grid图表
Grid()
# 2.往Grid图表里面填充其他图表(Bar,Line,Scatter)
# 通过联合调整pos_bottom, pos_top, pos_left, pos_right这四个参数,可以精细布局图表在整张画布中的位置
.add(bar, grid_opts=opts.GridOpts(pos_bottom="55%",pos_top="1%",
pos_left="10%",pos_right="10%",
))
.add(line, grid_opts=opts.GridOpts(pos_bottom="1%",pos_top="60%",
pos_left="1%",pos_right="80%",
))
.add(line1, grid_opts=opts.GridOpts(pos_bottom="1%",pos_top="60%",
pos_left="30%",pos_right="30%",
))
.add(line2, grid_opts=opts.GridOpts(pos_bottom="1%",pos_top="60%",
pos_left="80%",pos_right="1%",
))
)
grid.render_notebook()
展示图表如下: