pyecharts官网,官网上基本模型的介绍都挺详细的,还有例子。
1、pyecharts基本演示
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
c = (
Pie()
.add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
.render("pie_set_color.html")
)
2、柱状图
#导入配置项
from pyecharts import options as opts
#导入画图包
# from pyecharts.charts import Bar, Pie, Line
from pyecharts.charts import Bar
# 主题
from pyecharts.globals import ThemeType
# 官方写法
"""
c = (
Bar() # 实例化柱状图的对象
.add_xaxis(["华东", "中南", "东北", "华北", "西南", "西北"]) # 增加x轴数据
# x轴数据 必须2个参数; series_name(指明数据的含义), y_axis(数据)
.add_yaxis(series_name="销售额", y_axis=[468, 413, 268, 244, 130, 81])
.render("销售数据可视化.html") # 输出图像;渲染图像
)
"""
# 推荐写法
bar = Bar(
# 初始化配置项
init_opts=opts.InitOpts(
width="1200px", # 画布宽度
height="500px", # 画布高度,
# page_title="XXXXXXXXXXXXX", #网页标题
bg_color='white',
# theme=ThemeType.WONDERLAND
)
) # 实例化柱状图的对象
bar.add_xaxis(["华东", "中南", "东北", "华北", "西南", "西北"])
bar.add_yaxis(series_name="销售额", y_axis=[468, 413, 268, 244, 130, 81])
# 增加一组 销售数量
bar.add_yaxis(series_name="销售数量", y_axis=[200, 300, 350, 210, 170, 150])
# 增加标题 ----> 去全局配置项中增加
bar.set_global_opts(
# 关于标题的参数 -----去官网全局配置项->标题配置项中查看
title_opts=opts.TitleOpts(
title='各地区销售情况',
pos_left='center', # 标题居中
pos_top="5%"
),
# 图例
legend_opts=opts.LegendOpts(
pos_top="10%"
),
# 工具箱
toolbox_opts=opts.ToolboxOpts(
# orient='vertical'
is_show=True, # 是否显示这个内容
),
# 提示框
tooltip_opts=opts.TooltipOpts(
axis_pointer_type="cross" # 十字锥形
),
# 区域缩放
# datazoom_opts=opts.DataZoomOpts()
)
# 将柱状图翻转一下
bar.reversal_axis()
# 设置系列配置项
bar.set_series_opts(label_opts=opts.LabelOpts(
# position='right'
position='inside'
))
bar.render("销售数据可视化.html")
3、饼图
# 导入配置项
from pyecharts import options as opts
# 导入绘图包
from pyecharts.charts import Pie
label_name = ["华北", "东北", "西南"]
data = (200, 210, 380)
# 整理为数据对(列表嵌套的形式)
data_pair = [[i, j] for i, j in zip(label_name, data)]
print(data_pair)
# 1. 实例化
pie = Pie()
# 2. 增加数据
pie.add(series_name="销售额",
# 数据对,系列数据项,格式为 [(key1, value1), (key2, value2)]
# data_pair=[["华北", 20], ["东北",30]]
data_pair=data_pair,
# 半径,内半径 外半径
radius=["50%", "75%"],
# 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
# radius:扇区圆心角展现数据的百分比,半径展现数据的大小
# area:所有扇区圆心角相同,仅通过半径展现数据大小
# rosetype='radius'
# rosetype='area'
)
pie.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter="{a}<br/>{b} {d}%")
)
# 希望百分比在label上显示
pie.set_series_opts(label_opts=opts.LabelOpts(
formatter="{b} {d}%"
))
# 3.渲染输出
pie.render("饼图.html")
4、图
from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd
df=pd.read_excel("D:\pycharm\pythonProject\day19_pyecharts可视化./截至2月17日22时37分疫情数据.xlsx")
#湖北省各个城市的确诊数
con1=df["省份"]=='湖北'
con2=df["城市"]!='湖北'
df=df.loc[con1&con2,["城市","确诊数"]]
# data_pair=[[i,j]for i,j in zip(df["城市"],df["确诊数"])]
data_pair=df.values.tolist()
print(data_pair)
pie=Pie()
# 2. 增加数据
pie.add(series_name="确诊数",
# 数据对,系列数据项,格式为 [(key1, value1), (key2, value2)]
# data_pair=[["华北", 20], ["东北",30]]
data_pair=data_pair,
# 半径,内半径 外半径
radius=["50%", "75%"],
)
pie.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter="{a}<br/>{b} {d}%"),
title_opts=opts.TitleOpts(title="湖北省各城市的确诊占比"),
legend_opts=opts.LegendOpts(
type_='scroll', #图例显示为滚动的效果
pos_left='30%'
)
)
# 希望百分比在label上显示
pie.set_series_opts(label_opts=opts.LabelOpts(
formatter="{b} {d}%"
))
# 3.渲染输出
pie.render("湖北省各城市的确诊占比.html")
5、地图
from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd
df = pd.read_excel("D:\pycharm\pythonProject\day19_pyecharts可视化./截至2月17日22时37分疫情数据.xlsx")
# 湖北上各个城市的确诊数
con1 = df["省份"] == '湖北'
con2 = df["城市"] != '湖北'
df = df.loc[con1 & con2, ["城市", "确诊数"]]
df.iloc[:-1, 0] = df.iloc[:-1, 0] + "市"
print(df)
data_pair = df.values.tolist()
# print(data_pair)
# 实例化地图
hubei_map = Map()
hubei_map.add(
# 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
maptype="湖北",
series_name="确诊数",
# data_pair=[["武汉市", 200]]
data_pair=data_pair,
is_map_symbol_show=False, # 关闭地图上的小红点
)
# 视觉映射配置--->全局配置项
hubei_map.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=45000,
is_piecewise=True, # 颜色以分段的形式呈现
pieces=[
# 没有写最小值,默认是-inf
# 没有写最大值,默认是inf
# 每个字典是一段数据,指定最小值 最大值,显示的信息 显示的颜色
{
"min": 10001, "label": ">10000", "color": "#4b0101"},
{
"max": 10000, "min": 5001, "label": "5001-10000", "color": "#4a0100"},
{
"max": 5000, "min": 1001, "label": "1001-5000", "color": "#8A0808"},
{
"max": 1000, "min": 500, "label": "500-1000", "color": "#B40404"},
{
"max": 499, "min": 100, "label": "100-499", "color": "#DF0101"},
{
"max": 99, "min": 10, "label": "10-99", "color": "#F5A9A9"},
{
"max": 9, "min": 1, "label": "1-9", "color": "#FFFFFF"},
# {"min": 10001, "label": ">10000", "color": "#4b0101"},
# {"max": 10000, "min": 5001, "label": "5001-10000", "color": "#4a0100"},
# {"max": 5000, "min": 1001, "label": "1001-5000", "color": "blue"},
# {"max": 1000, "min": 500, "label": "500-1000", "color": "green"},
# {"max": 499, "min": 100, "label": "100-499", "color": "pink"},
# {"max": 99, "min": 10, "label": "10-99", "color": "gray"},
# {"max": 9, "min": 1, "label": "1-9", "color": "white"},
]
)
)
hubei_map.render("湖北地图.html")
6、地理流向图
from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType, SymbolType
ru_01_20 = "孝感、黄冈、鄂州、荆州、黄石、襄阳"
chu_01_20 = "孝感、黄冈、荆州、襄阳、黄石、荆门、鄂州、随州、仙桃"
city_name = set() # python 中集合元素不能重复
data_pair = []
for city in ru_01_20.split("、"):
data_pair.append([city, "武汉"])
city_name.add(city)
for city in chu_01_20.split("、"):
data_pair.append(["武汉", city])
city_name.add(city)
print(data_pair)
print("所有城市名称", [[i, 1] for i in city_name])
# 实例化
geo = Geo()
# 添加地图类型
geo.add_schema(
maptype="湖北",
# itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
label_opts=opts.LabelOpts(is_show=True) # 显示地图上的 城市名称
)
geo.add(
"",
# [("孝感市", 1), ("武汉市", 1)],
[[i, 1] for i in city_name],
type_=ChartType.EFFECT_SCATTER,
color="red",
)
# 添加数据
geo.add(
series_name="XXXXXXXX",
# data_pair=[["孝感市", "武汉市"]],
data_pair=data_pair,
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW, symbol_size=6, color="blue"
),
linestyle_opts=opts.LineStyleOpts(curve=0.2)
)
# 关闭label信息
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False), # 关闭图例
title_opts=opts.TitleOpts("湖北省人口流向图",
pos_left='center',
)
)
geo.render("地理流向图.html")
7、地理流向图_时间轮转
from pyecharts.charts import Geo, Timeline # Timeline 时间线、时间轮播多图
from pyecharts import options as opts
from pyecharts.globals import ChartType, SymbolType
# 原始数据
ru_01_20 = "孝感、黄冈、鄂州、荆州、黄石、襄阳"
chu_01_20 = "孝感、黄冈、荆州、襄阳、黄石、荆门、鄂州、随州、仙桃"
ru_01_21 = "孝感、黄冈、荆州、鄂州、黄石"
ru_01_22 = "孝感、黄冈、鄂州、荆州、咸宁、黄石"
chu_01_22 = "孝感、黄冈、荆州、襄阳、荆州、随州、宜昌、黄石、鄂州"
def get_data_pair(ru_data, chu_data):
data_pair = []
for city in ru_data.split("、"):
data_pair.append([city, "武汉"])
# 判断如果没有出的数据,不做任何操作
if chu_data == "":
pass
else:
for city in chu_data.split("、"):
data_pair.append(["武汉", city])
return data_pair
data_pair_20 = get_data_pair(ru_01_20, chu_01_20)
data_pair_21 = get_data_pair(ru_01_21, "")
data_pair_22 = get_data_pair(ru_01_22, chu_01_22)
data_pair = [data_pair_20,
data_pair_21,
data_pair_22
]
t1 = Timeline()
t1.add_schema(is_auto_play=True) # 自动播放
for i, val in zip(range(3), ["01_20", "01_21", "01_22"]):
geo = (
# 实例化
Geo()
# 添加地图类型
.add_schema(
maptype="湖北",
# itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
label_opts=opts.LabelOpts(is_show=True) # 显示地图上的 城市名称
)
# 添加数据
.add(
series_name="XXXXXXXX",
data_pair=data_pair[i],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW, symbol_size=6, color="blue"
),
linestyle_opts=opts.LineStyleOpts(curve=0.2)
)
# 关闭label信息
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False), # 关闭图例
title_opts=opts.TitleOpts(f"湖北省2020-{
val}人口流向图",
pos_left='center',
)
)
)
t1.add(geo, "2020-{}的情况".format(val))
t1.render("地理流向图_轮播多图.html")
8、世界地图
from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd
from translate import Translator # pip install translate
from day19_pyecharts可视化.map_transform import cn_en
df = pd.read_excel("E:\pycharm\pythonProject\day19_pyecharts可视化./截至2月17日22时37分疫情数据.xlsx")
con = df["省份"].str[-1] == '洲'
df = df.loc[con, ["城市", "确诊数"]]
def trans_en(val):
if val in cn_en:
return cn_en[val]
else:
return val
df["城市"] = df["城市"].transform(trans_en)
print(df)
# 世界地图中,国家名称必须是英文的
# cn_en_trans = Translator(from_lang="chinese", to_lang='english')
# en_name = cn_en_trans.translate("法国")
# print("对应的英文名称", en_name)
world_map = Map()
world_map.add(series_name="",
# data_pair=[["China", 100], ["France", 200]],
data_pair=df.values.tolist(),
maptype="world",
is_map_symbol_show=False
)
world_map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
world_map.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=45000,
is_piecewise=True, # 颜色以分段的形式呈现
pieces=[
# 没有写最小值,默认是-inf
# 没有写最大值,默认是inf
# 每个字典是一段数据,指定最小值 最大值,显示的信息 显示的颜色
{
"min": 10001, "label": ">10000", "color": "#4b0101"},
{
"max": 10000, "min": 5001, "label": "5001-10000", "color": "#4a0100"},
{
"max": 5000, "min": 1001, "label": "1001-5000", "color": "#8A0808"},
{
"max": 1000, "min": 500, "label": "500-1000", "color": "#B40404"},
{
"max": 499, "min": 100, "label": "100-499", "color": "#DF0101"},
{
"max": 99, "min": 10, "label": "10-99", "color": "#F5A9A9"},
{
"max": 9, "min": 1, "label": "1-9", "color": "#FFFFFF"},
]
)
)
world_map.render("世界确诊情况.html")
9、不同数量级折线图
import pandas as pd
import matplotlib.pyplot as plt
from pyecharts.charts import * # 导入所有图表
from pyecharts import options as opts
df = pd.read_excel("D:\pycharm\pythonProject\day19_pyecharts可视化./疫情历史数据.xls", index_col=0)
# 按照时间排序
df.sort_values(by="时间", inplace=True)
print(df)
# 随着时间的变化 死亡数和治愈数的变化
date_time = df["时间"].astype(str).tolist() # pyechart遇到数组、series、df记得转列列表
print(date_time)
death_nun = df["死亡数"].tolist()
cure_nun = df["治愈数"].tolist()
Suspected_nun = df["疑似数"].tolist()
ensure_nun = df["确诊数"].tolist()
# 死亡数和疑似数 数据不在一个量级,如果使用matplotlib进行绘制,其中数据少的一组,就乎为一条直线
# plt.plot(date_time, death_nun)
# plt.plot(date_time, Suspected_nun)
# plt.show()
line = Line()
line.add_xaxis(date_time)
line.add_yaxis(series_name="死亡数", y_axis=death_nun,
yaxis_index=1, # 参考哪个y轴
)
line.add_yaxis(series_name="疑似数", y_axis=Suspected_nun,
yaxis_index=0
)
# 默认轴的编号为0
line.set_global_opts(yaxis_opts=opts.AxisOpts(
name="疑似数",
min_=1000,
max_=30000
))
# 增加一个y轴,首先设置默认的y轴, 默认y轴在全局配置项中设置 # 新增的轴编号1
line.extend_axis(
yaxis=opts.AxisOpts(
name="死亡数",
min_=0,
max_=600
)
)
line.render("疫情历史数据.html")
# 要求:死亡数和治愈数绘制为柱状图,疑似数和确诊数绘制为折线图;放在一个图中