10年前, 偶然看到一本excel图表书籍《图表之道》,当时惊叹excel作图也能如此商务, 连续几天看完了全书, 自己对图表的喜爱也是从那时开始。
除了excel, 现在有更多的工具可以做出好看、交互性强的图表, 比如python中的pyechart, 如果不懂编程该如何作图呢?
本文将介绍十余种工作中图表制作方法, 提供完整代码, 大家可从模仿中入门python数据可视化!
文章目录
-
- 工具包及主要参数介绍
- 模板1:世界地图
- 模板2:曲线图丨实际与预测、实际与实际对比
- 模板3:曲线图与柱形图组合图丨隐藏次坐标轴并显示同比
- 模板4:帕累托图、柱形图与曲线图组合
- 模板5:次坐标变主坐标,日期数据作为x轴
- 模板6:中国地图、省份地图丨2020年全国各省GDP
- 模板7:中国地图、省份地图丨人口迁徙图、轨迹图、流向图
- 模板8:世界地图丨2021年全球创新指数top20
- 模板9: 双坐标轴丨曲线图与柱形图组合图
- 模板10:中国地图 省份地图 市级地图丨全国主要城市空气质量排行榜
- 模板11:双坐标轴, 图表简化丨2020年全球智能个人音频设备出货量及增长率
- 模板12: 仪表盘丨2020年全球智能手机相关数据
- 模板13: 仪表盘 添加不同背景图
每个图的侧重点:
- 1 世界地图: 数据如何同图表中国家关联
- 2 曲线图: 设置多条曲线, 曲线设置不同样式
- 3 组合图: 设置图表间距
- 4 帕累托图: 突出标记某个点
- 5 曲线图: 次坐标变主坐标, x轴为日期数据
- 6 中国地图: 数据如何同图表中省份关联
- 7 中国地图: 设置移动轨迹
- 8 世界地图: 图例,布局设置
- 9 组合图: 双坐标轴
- 10 中国地图: 添加多个城市数据, 用散点显示
- 11 组合图: 图表简洁风格设置
- 12 仪表盘: 8个图表生成一个仪表盘布局
- 13 仪表盘: 自定义图表背景图
提前准备: 安装工具
- 安装Anaconda软件
下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
使用jupyter notebook 或者spyder - 安装pyechart工具包
pyechart工具包有1.0版本和0.5版本, 请下载1.0以上版本
pip install pyecharts -U
作图中有很多地方涉及颜色参数调整, 强烈建议将以下网址收藏:
https://colorhunt.co/palettes/blue
工具包及主要参数介绍
不同模块中用法可能不一样, 详细请参考官网: pyechart官网
-
options: pyechart中图表选项模块, 可设置图表各种参数, 在 pyecharts 中,一切皆 Options
-
pyecharts.charts: pyechart中作图模块. 如果在网上看到的代码是from pyecharts import Map, 说明使用的0.5版本的pyechart, 建议不用再看,两个版本不兼容
-
Map, Line, Bar,Pie: pyechart中具体的作图模块, 实例化例如:Map() , 可设置图表大小和主题风格
- width : 图表宽度
- height: 图表高度
- theme: 图表风格: ‘chalk’,‘dark’, # 黑色背景适合地图 ‘essos’ ‘infographic’,‘light’,‘macarons’,‘purple-passion’, # 灰色背景适合地图 ‘roma’,‘romantic’, # 灰色背景 适合地图 ‘shine’,‘vintage’, #浅粉色 适合地图’walden’, ‘westeros’, # 蓝色’white’, # 黑红 ‘wonderland’
-
pd.read_excel() : 读取数据
-
add(): 添加数据 , 一般为series, 或列表列表或元组列表
-
add_xaxis: 添加x轴数据, 需要是列表
-
add_yaxis: 添加一个系列
-
set_series_opts: 图表系列设置. 数据标签label_opts
-
set_global_opts: 图表全局设置. 标题title_opts, 视觉映射visualmap_opts, 图例legend_opts, 提示框tooltip_opts, y轴yaxis_opts, x轴xaxis_opts
-
render() : 输出html文件
-
extend_axis: 添加次坐标轴
-
overlap() : 图表组合
-
add_schema(): 设置风格
-
reversal_axis(): 坐标轴旋转, 条形图
模板1:世界地图
代码:
# 导入工具包
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map
# 作图数据
data = pd.read_excel('./data/GDPTOP20.xlsx',index_col=0)
data
# 作图
c = (
Map(init_opts=opts.InitOpts(width="1400px",height='600px')) # 图表大小
# 添加数据系列名称, 数据(list格式), 地图名称, 不显示小红点
.add("", [list(z) for z in zip(data['国家_re'], data['GDP(亿美元)'])], "world",is_map_symbol_show=False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 标签不显示(国家名称不显示)
.set_global_opts(
title_opts=opts.TitleOpts(title="2020年GDP前20国家",subtitle='单位: 亿美元'), # 主标题与副标题名称
visualmap_opts=opts.VisualMapOpts(max_=50000), # 值映射最大值
)
)
c.render("2020年GDP前20国家.html") # 生成html文件
模板2:曲线图丨实际与预测、实际与实际对比
import pandas as pd
import numpy as np
import pyecharts.options as opts
from pyecharts.charts import Line
data = pd.read_excel('C:/Users/yyz/Desktop/pyechart数据可视化/data/曲线图.xlsx')
data
line = (
Line(init_opts=opts.InitOpts(width="1400px", height="700px")) # 设置图表大小
.add_xaxis(data['月份'].tolist()) # 设置x轴, 需要加tolist
.add_yaxis("2021年预测",
data['2021年预测'],
is_connect_nones=True,# 缺失值的处理
symbol_size=10, # 标识的大小
is_smooth=True,# 线条样式 , 是否设置成圆滑曲线
linestyle_opts=opts.LineStyleOpts(width=3,color ='#f6c065',type_="dashed"), # 线条颜色和宽度
label_opts=opts.LabelOpts(is_show=True,position='top',color ='#f6c065'),# 文字标签的位置和颜色
itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color="#f6c065", color="#f6c065"),# 标识的颜色和宽度
)
.add_yaxis("2021年实际",
data['2021年实际'],
is_connect_nones=True,
#symbol="triangle" 标识的样式 三角形
symbol_size=10, # 标识的大小
is_smooth=True, # 线条样式 , 是否设置成圆滑曲线
linestyle_opts=opts.LineStyleOpts(width=3,color ='#16c79a'), # 线条颜色和宽度
label_opts=opts.LabelOpts(is_show=True,position='top',color ='#16c79a'),# 文字标签的位置和颜色
itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color='#16c79a', color='#16c79a'), # 标识的颜色和宽度
)
.add_yaxis("2020年实际",
data['2020年实际'],
is_connect_nones=True,
symbol_size=10,
is_smooth=True,
linestyle_opts=opts.LineStyleOpts(width=3,color ='#28527a'),
label_opts=opts.LabelOpts(is_show=True,position='bottom',color ='#28527a'),
itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color="#28527a", color="#28527a"),
)
.set_global_opts(title_opts=opts.TitleOpts(title="销售量趋势分析",subtitle="", # 主标题
title_textstyle_opts=opts.TextStyleOpts(font_size=30), #主标题字体大小
pos_left='6%'), # 主标题位置
legend_opts=opts.LegendOpts(is_show=True,# 是否显示图例
pos_top="3%",# 图例位置
item_width=15,# 宽度
item_height=15,#高度
item_gap=10,# 图例间隔
textstyle_opts=opts.TextStyleOpts(font_size=15)), # 图例文字大小
tooltip_opts=opts.TooltipOpts(trigger="axis"),# 提示框触发, 按坐标轴
yaxis_opts=opts.AxisOpts(type_="value",
axistick_opts=opts.AxisTickOpts(is_show=False), # 刻度线不显示
axisline_opts=opts.AxisLineOpts(is_show=False), # y轴线不显示
splitline_opts=opts.SplitLineOpts(is_show=True), # y轴网格线显示
axislabel_opts=opts.LabelOpts(formatter="{value} 万件")),# y轴刻度文字
xaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
is_scale=False,
boundary_gap=False))
)
line.render("C:/Users/yyz/Desktop/pyechart数据可视化/销售量趋势分析.html")
模板3:曲线图与柱形图组合图丨隐藏次坐标轴并显示同比
import pandas as pd
import numpy as np
import pyecharts.options as opts
from pyecharts.charts import Line,Bar,Grid
data = pd.read_excel('./data/添加次坐标轴.xlsx')
data
line = (
Line(init_opts=opts.InitOpts(width="1400px", height="700px")) # 图表大小
.add_xaxis(data['月份'].tolist()) # x轴
.add_yaxis("2019实际", # 系列名称
data['2019年实际'], # 数据
is_connect_nones=True, # 缺失值处理
symbol_size=10, # 标识的大小
is_smooth=True, # 线的类型, 直线还是圆滑曲线
linestyle_opts=opts.LineStyleOpts(width=3,color ='#28527a'), # 线宽度
label_opts=opts.LabelOpts(is_show=True,position='bottom',color ='#28527a'),# 文字标签的位置和颜色
itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color='#28527a', color='#28527a'), # 标识的颜色和宽度
)
.add_yaxis("2020年实际",
data['2020年实际'],
symbol_size=10, # 标识的大小
is_connect_nones=True, # 缺失值处理
is_smooth=True, # 线的类型, 直线还是圆滑曲线
linestyle_opts=opts.LineStyleOpts(width=3,color ='#f05454'), # 线宽 , 线的类型(虚线)
label_opts=opts.LabelOpts(is_show=True,position='top',color ='#f05454'),# 文字标签的位置和颜色
itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color='#f05454', color='#f05454'), # 标识的颜色和宽度
)
.extend_axis( # 设置次坐标轴
yaxis=opts.AxisOpts(
name="",
type_="value",
min_=-20,
max_=80,
is_show=False,
)
)
.set_global_opts(title_opts=opts.TitleOpts(title="销售趋势对比",
title_textstyle_opts=opts.TextStyleOpts(font_size=30), #主标题字体大小
subtitle="", # 次坐标轴
pos_left='6%'),
legend_opts=opts.LegendOpts(is_show=True,pos_top="4%"), # 图例
tooltip_opts=opts.TooltipOpts(trigger="axis"),
yaxis_opts=opts.AxisOpts(type_="value",
axistick_opts=opts.AxisTickOpts(is_show=False), # 刻度线
axisline_opts=opts.AxisLineOpts(is_show=False), # y轴线
splitline_opts=opts.SplitLineOpts(is_show=True), # y轴网格线
axislabel_opts=opts.LabelOpts(formatter="{value} 万件")),
)
)
bar = (
Bar()
.add_xaxis(xaxis_data=data['月份'].tolist())
.add_yaxis(
series_name="同比",
yaxis_index=1, # 次坐标
y_axis=data['同比%'].tolist(),
label_opts=opts.LabelOpts(is_show=True,position='top',formatter="{c} %"),
itemstyle_opts=opts.ItemStyleOpts(color="#78c4d4",opacity=0.6), # 柱形图颜色
)
)
line.overlap(bar) # 图表组合
line.render("./销售趋势对比分析.html")
模板4:帕累托图、柱形图与曲线图组合
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar,Line
data = pd.read_excel('./data/帕累托图.xlsx')
data
bar = (
Bar(init_opts=opts.InitOpts(width="1200px", height="500px")) # 设置图表大小
.add_xaxis(data['公司'].tolist()) # 设置柱形图的x轴, 必须写.tolist()
.add_yaxis(
series_name="采购额", # y轴系列名称
y_axis=data['采购额'].tolist(), # 系列书籍
label_opts=opts.LabelOpts(is_show=True,position='top',formatter="{c}"),# 数字标签显示样式
itemstyle_opts=opts.ItemStyleOpts(color="#78c4d4",opacity=0.5), # 柱形图颜色
)
.extend_axis( # 设置次坐标轴
yaxis=opts.AxisOpts(
name="",
type_="value",
min_=0, # 最小值
max_=1