PyEcharts
所有文章不设限,我们相遇偶然,相散坦然,互不打扰,各自安好,向阳而生
pyecharts中文手册:https://pyecharts.org/#/
查看版本
import pyecharts
pyecharts.__version__
'1.9.1'
版本安装说明
jupyter lab使用注意事项
导入库
from pyecharts.globals import ThemeType, SymbolType, ChartType
import seaborn as sns
#警告
import warnings
from pylab import *
from collections import Counter
from pyecharts.commons.utils import JsCode
from pyecharts import options as opts
#散点图
from pyecharts.charts import Scatter
#日历
from pyecharts.charts import Calendar
#饼图
from pyecharts.charts import Pie
#折线
from pyecharts.charts import Line
#柱状图
from pyecharts.charts import Bar
#3D地球视图
from pyecharts.charts import Geo
#图像合并
from pyecharts.charts import Grid
#图像组合组件
from pyecharts.charts import Page
#地图
from pyecharts.charts import Map
#仪表盘
from pyecharts.charts import Gauge
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import jieba
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
mpl.rcParams['font.sans-serif'] = ['SimHei']
#忽略警告
warnings.filterwarnings("ignore")
数据读取
首先读取数据:
import pandas as pd
data = pd.read_excel('../data/xlsx/房价与工资.xlsx')
数据预览
data.head(5)
城市 | 省份 | 房屋均价 | 人均工资 | |
---|---|---|---|---|
0 | 北京市 | 北京 | 63239 | 9240 |
1 | 重庆市 | 重庆 | 10351 | 5962 |
2 | 广州市 | 广东 | 30894 | 7409 |
3 | 上海市 | 上海 | 52240 | 8962 |
4 | 深圳市 | NaN | 52456 | 8315 |
柱形图可视化
# 下面指定x轴和y轴:
x = list(data['城市'])
y1 = list(data['房屋均价'])
y2 = list(data['人均工资'])
# '''水平条形图'''
from pyecharts.charts import Bar
bar = Bar(
# 设置主题
init_opts=opts.InitOpts(theme=ThemeType.LIGHT),
)
bar.set_global_opts(
# 设置标题样式
title_opts=opts.TitleOpts(
# 标题名称
title='城市房屋均价,人均工资',
# 设置标题位置
pos_left='40%',
),
# 设置图例样式
legend_opts=opts.LegendOpts(
# 是否显示图例
is_show=True,
# 设置图例位置
pos_top='10%',
# 设置图例形状
legend_icon='circle'
),
# 设置工具框样式
toolbox_opts=opts.ToolboxOpts(
# 是否显示工具框
is_show=True,
# 设置位置(方法一致)
pos_left='70%',
pos_top='20%'
)
)
# 添加 x 轴数据
bar.add_xaxis(x)
# 添加 y 轴数据
bar.add_yaxis(
# 设置 y1图例的名称
series_name='房屋均价',
# 设置 y1 数据
y_axis=y1,
)
bar.add_yaxis('人均工资', y2)
# 加载js
bar.load_javascript()
<pyecharts.render.display.Javascript at 0x16ce7437a30>
# 显示图像
bar.render_notebook()
折线图可视化
x=['2022','2023','2024','2025','2026']
y=[10000,15000,20000,30000,40000]
line = Line(
# 设置主题
init_opts=opts.InitOpts(theme=ThemeType.LIGHT,
bg_color='rgba(255,250,205,0.2)'),
)
line.add_xaxis(x)
line.add_yaxis(
# 设置 y1轴图例名称
series_name='年预期营销额',
# 设置 y1轴图例数据
y_axis=y,
# 数据标记是否显示(此处显示)
is_symbol_show=True,
# 标记大小
symbol_size=15,
# 设置线条样式
linestyle_opts=opts.LineStyleOpts(
# 设置线条颜色
color='#FF6600',
# 设置线条粗细
width=5,
# 设置线条透明度
opacity=0.9
)
)
line.load_javascript()
line.render_notebook()
饼图可视化
数据整合
# x 轴的标签数据
inner_x_data =['房屋租赁','店面设计','设备购置','办公用具','员工输出','营销培训','维护增值']
# y 轴的数值数据
inner_y_data =[20000,5000,5000,5000,10000,2000,5000]
# 数据压缩打包|
inner_data_pair = [list(z) for z in zip(inner_x_data, inner_y_data)]
pie = Pie(
# 设置主题
init_opts=opts.InitOpts(theme=ThemeType.LIGHT,
bg_color='rgba(255,250,205,0.2)'),
)
# 设置全局属性
pie.set_global_opts(
# 设置标题属性
title_opts=opts.TitleOpts(
# 设置标题名称
title='初期投入预算',
# 设置标题位置
pos_top='15%',
# 设置标题样式
title_textstyle_opts=opts.TextStyleOpts(
# 颜色
color='orange',
# 字体大小
font_size=25,
# 字体样式
font_family='楷体'
)
),
# 设置工具框样式
toolbox_opts=opts.ToolboxOpts(
# 是否显示工具框
is_show=True,
# 设置位置(方法一致)
pos_left='70%',
pos_top='20%'
)
)
pie.add(
series_name='初期投入预算',
data_pair=inner_data_pair
)
pie.load_javascript()
pie.render_notebook()
上下绘制条形图和线图
# 柱状图
bar = Bar()
bar.add_xaxis(x)
bar.add_yaxis('房屋均价', y1)
bar.add_yaxis("人均工资", y2)
bar.render_notebook()
# 折线图
line = Line()
line.add_xaxis(x)
line.add_yaxis('房屋均价', y1)
line.add_yaxis('人均工资', y2)
line.render_notebook()
# 图例合并
# 调用了page组件
page = Page(layout=Page.DraggablePageLayout)
# 将上面定义好的图添加到 page
page.add(
bar,
line,
)
page.load_javascript()
<pyecharts.render.display.Javascript at 0x1c04d3e5bb0>
page.render_notebook()
条形图上叠加线图
# 柱状图
bar = Bar()
bar.add_xaxis(x)
bar.add_yaxis(
series_name='房屋均价',
y_axis=y1,
# 设置柱状图标签属性(避免图像太乱)
label_opts=opts.LabelOpts(
# 设置柱状图标签属性隐藏
is_show=False
),
)
bar.add_yaxis(
series_name="人均工资",
y_axis=y2,
# 设置柱状图标签属性
label_opts=opts.LabelOpts(
# 设置柱状图标签属性隐藏
is_show=False
),
)
# 折线图
line = Line()
line.add_xaxis(x)
line.add_yaxis(
series_name='房屋均价',
y_axis=y1,
# 设置折线属性(容易识别)
linestyle_opts=opts.LineStyleOpts(
# 颜色
color='#66CCFF',
# 粗细
width=6
)
)
line.add_yaxis(
series_name='人均工资',
y_axis=y2,
# 设置折线属性(容易识别)
linestyle_opts=opts.LineStyleOpts(
color='#FFCCCC',
width=6
)
)
bar.overlap(line)
bar.load_javascript()
<pyecharts.render.display.Javascript at 0x1c04d2dcb20>
bar.render_notebook()
仪表盘可视化
c = (
Gauge()
.add(
"指示器",
[("完成比率", 75.5)],
# 设置仪表盘大小
radius="60%",
# 设置起始、终止刻度
min_=0, max_=260,
title_label_opts=opts.LabelOpts(
font_size=20, color="black", font_family="Microsoft YaHei" # 设置字体、颜色、大小
),
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(
# 设置区间颜色、仪表宽度
color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")],
# 设置仪表盘宽度
width=25
)
),
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="仪 表 盘 可 视 化",
pos_left='41%'
),
legend_opts=opts.LegendOpts(
is_show=False
),
)
)
c.render_notebook()
地图
Pyecharts这个库,实现地图可视化的时候,地图一直加载不出来。
自从 v0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件。
如用户需要用到地图图表,可自行安装对应的地图文件包。
全球国家地图: echarts-countries-pypkg:世界地图和 213 个国家,包括中国地图。
中国省级地图: echarts-china-provinces-pypkg:23 个省,5 个自治区。
中国市级地图: echarts-china-cities-pypkg:370 个中国城市
中国县区级地图:echarts-china-counties-pypkg:2882 个中国县·区
中国区域地图:echarts-china-misc-pypkg:11 个中国区域地图,比如华南、华北。
英国2016选区图: echarts-united-kingdom-pypkg:英国选区图可以用来画与政治经济相关的数据
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg
全国省份地图
data = [('北京', 12.54), ('天津', 13.02), ('河北', 13.0), ('山西', 11.53), ('内蒙古', 11.48), ('辽宁', 15.43), ('吉林', 13.21), ('黑龙江', 13.03), ('上海', 15.07), ('江苏', 15.99), ('浙江', 13.89), ('安徽', 15.01), ('福建', 11.42), ('江西', 11.44), ('山东', 14.75), ('河南', 12.73), ('湖北', 13.93), ('湖南', 14.54), ('广东', 9.73), ('广西', 13.12), ('海南', 11.33), ('重庆', 17.42), ('四川', 16.3), ('贵州', 12.84), ('云南', 11.06), ('西藏', 7.67), ('陕西', 12.85), ('甘肃', 12.44), ('青海', 9.45), ('宁夏', 9.67), ('新疆', 9.66)]
city=[]
value=[]
for i in range(len(data)):
city.append(data[i][0])
value.append(data[i][1])
inner_data_pair = [list(z) for z in zip(city, value)]
map= Map()
map.add('',inner_data_pair,'china')
map.set_global_opts(
title_opts=opts.TitleOpts(title="各省总体情况",
pos_right="center",
pos_top="5%"),
visualmap_opts=opts.VisualMapOpts(
max_=18,
min_=9
)
)
map.load_javascript()
<pyecharts.render.display.Javascript at 0x1c04d350e50>
map.render_notebook()
指定省份城市地图
#数据引入
from pyecharts.faker import Faker
c = (
Map()
.add("广东省", [list(z) for z in zip(Faker.guangdong_city, Faker.values())], "广东")
.set_global_opts(
title_opts=opts.TitleOpts(title="广东地图"), visualmap_opts=opts.VisualMapOpts()
)
)
c.load_javascript()
<pyecharts.render.display.Javascript at 0x1c04d3fe4f0>
c.render_notebook()