目录
文章导航
一、介绍
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
[✨ 特性]
- 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
- 囊括了 30+ 种常见图表,应有尽有
- 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
- 可轻松集成至 Flask,Django 等主流 Web 框架
- 高度灵活的配置项,可轻松搭配出精美的图表
- 详细的文档和示例,帮助开发者更快的上手项目
- 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
二、安装Pyecharts
python
pip install pyecharts
三、主题风格
pyecharts有多种风格,可参考
https://pyecharts.org/#/zh-cn/themes
四、占比类图表
1、饼图
from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
# 按'SaleCondition'字段统计记录数
sale_condition_counts = df['SaleCondition'].value_counts().reset_index()
sale_condition_counts.columns = ['SaleCondition', 'Count']
# 将统计结果转换为列表,用于pyecharts饼图
data_pair = [(row['SaleCondition'], row['Count']) for index, row in sale_condition_counts.iterrows()]
c = (
Pie(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add("", data_pair)
#.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
.set_global_opts(title_opts=opts.TitleOpts(title="饼图"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
# 渲染图表到notebook
c.render_notebook()
2、环形图
from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
# 按'SaleCondition'字段统计记录数
sale_condition_counts = df['SaleCondition'].value_counts().reset_index()
sale_condition_counts.columns = ['SaleCondition', 'Count']
# 将统计结果转换为列表,用于pyecharts饼图
data_pair = [(row['SaleCondition'], row['Count']) for index, row in sale_condition_counts.iterrows()]
c = (
Pie(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add("", data_pair, radius=["40%", "75%"])
#.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
.set_global_opts(title_opts=opts.TitleOpts(title="环形图"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
# 渲染图表到notebook
c.render_notebook()
3、玫瑰图
from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
# 按'SaleCondition'字段统计记录数
sale_condition_counts = df['SaleCondition'].value_counts().reset_index()
sale_condition_counts.columns = ['SaleCondition', 'Count']
# 将统计结果转换为列表,用于pyecharts饼图
data_pair = [(row['SaleCondition'], row['Count']) for index, row in sale_condition_counts.iterrows()]
c = (
Pie(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add("", data_pair,
radius=["40%", "75%"],
rosetype="area") #radius/area
.set_global_opts(title_opts=opts.TitleOpts(title="玫瑰图"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
# 渲染图表到notebook
c.render_notebook()
4、玫瑰图-多图
from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
# 按'SaleCondition'字段统计记录数
sale_condition_counts = df['SaleCondition'].value_counts().reset_index()
sale_condition_counts.columns = ['SaleCondition', 'Count']
# 将统计结果转换为列表,用于pyecharts饼图
data_pair = [(row['SaleCondition'], row['Count']) for index, row in sale_condition_counts.iterrows()]
c = (
Pie(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add("", data_pair,
radius=["40%", "75%"],
center=["25%", "50%"],
rosetype="area") #radius/area
.add("", data_pair,
radius=["40%", "75%"],
center=["75%", "50%"],
rosetype="area") #radius/area
.set_global_opts(title_opts=opts.TitleOpts(title="玫瑰图-多图"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
# 渲染图表到notebook
c.render_notebook()
5、堆叠条形图
from pyecharts import options as opts
from pyecharts.charts import Bar
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
result = df.groupby('YrSold').agg({
'OverallQual': 'sum',
'GarageCars': 'sum',
'FullBath': 'sum'
}).reset_index()
result.columns = ['YrSold', 'OverallQual', 'GarageCars', 'FullBath']
result_sorted_des = result.sort_values('YrSold', ascending=True)
xaxis = result_sorted_des['YrSold'].tolist()
yaxis_1 = result_sorted_des['OverallQual'].tolist()
yaxis_2 = result_sorted_des['GarageCars'].tolist()
yaxis_3 = result_sorted_des['FullBath'].tolist()
c = (
Bar(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(xaxis)
.add_yaxis("商家A", yaxis_1, stack="stack1")
.add_yaxis("商家B", yaxis_2, stack="stack1")
.add_yaxis("商家C", yaxis_3, stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆叠条形图"))
)
# 渲染图表到notebook
c.render_notebook()
6、百分比堆叠条形图
from pyecharts import options as opts
from pyecharts.charts import Bar
import pandas as pd
from pyecharts.globals import ThemeType
# 读取数据并处理
df = pd.read_csv('train.csv')
result = df.groupby('YrSold').agg({
'OverallQual': 'sum',
'GarageCars': 'sum',
'FullBath': 'sum'
}).reset_index()
result.columns = ['YrSold', 'OverallQual', 'GarageCars', 'FullBath']
result_sorted_des = result.sort_values('YrSold', ascending=True)
# 计算每个年份的累计和
total_per_year = result_sorted_des[['OverallQual', 'GarageCars', 'FullBath']].sum(axis=1)
# 计算每个特征的百分比
result_sorted_des['OverallQual_pct'] = (result_sorted_des['OverallQual'] / total_per_year).round(2) * 100
result_sorted_des['GarageCars_pct'] = (result_sorted_des['GarageCars'] / total_per_year).round(2) * 100
result_sorted_des['FullBath_pct'] = (result_sorted_des['FullBath'] / total_per_year).round(2) * 100
# 提取数据用于图表
xaxis = result_sorted_des['YrSold'].tolist()
yaxis_1 = result_sorted_des['OverallQual_pct'].tolist()
yaxis_2 = result_sorted_des['GarageCars_pct'].tolist()
yaxis_3 = result_sorted_des['FullBath_pct'].tolist()
# 创建百分比堆叠条形图
c = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.WALDEN))
.add_xaxis(xaxis)
.add_yaxis("OverallQual", yaxis_1, stack="stack1")
.add_yaxis("GarageCars", yaxis_2, stack="stack1")
.add_yaxis("FullBath", yaxis_3, stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right",formatter="{c}%", rotate=0)) # 显示百分比
.set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=True, trigger="item"),
title_opts=opts.TitleOpts(title="百分比堆叠条形图"))
)
# 渲染图表到notebook
c.render_notebook()
五、比较排序类
1、条形图
from pyecharts import options as opts
from pyecharts.charts import Bar
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
result = df.groupby('YrSold').agg({
'OverallQual': 'sum',
'GarageCars': 'sum',
'FullBath': 'sum'
}).reset_index()
result.columns = ['YrSold', 'OverallQual', 'GarageCars', 'FullBath']
result_sorted_desc = result.sort_values('YrSold', ascending=False)
xaxis = result_sorted_desc['YrSold'].tolist()
yaxis_1 = result_sorted_desc['OverallQual'].tolist()
yaxis_2 = result_sorted_desc['GarageCars'].tolist()
yaxis_3 = result_sorted_desc['FullBath'].tolist()
c = (
Bar(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(xaxis)
.add_yaxis("商家A", yaxis_1)
.add_yaxis("商家B", yaxis_2)
.add_yaxis("商家C", yaxis_3)
# .reversal_axis() # 坐标轴反转
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="条形图"))
)
# 渲染图表到notebook
c.render_notebook()
2、雷达图
from pyecharts import options as opts
from pyecharts.charts import Radar
from pyecharts.globals import ThemeType
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
c = (
Radar(init_opts=opts.InitOpts(theme=ThemeType.WALDEN))
.add_schema(
schema=[
opts.RadarIndicatorItem(name="销售", max_=6500),
opts.RadarIndicatorItem(name="管理", max_=16000),
opts.RadarIndicatorItem(name="信息技术", max_=30000),
opts.RadarIndicatorItem(name="客服", max_=38000),
opts.RadarIndicatorItem(name="研发", max_=52000),
opts.RadarIndicatorItem(name="市场", max_=25000),
]
)
.add("预算分配", v1,areastyle_opts=opts.AreaStyleOpts(opacity=0.1,color="#CD0000"),linestyle_opts=opts.LineStyleOpts(color="#CD0000"))
.add("实际开销", v2,areastyle_opts=opts.AreaStyleOpts(opacity=0.2,color="#5CACEE"),linestyle_opts=opts.LineStyleOpts(color="#5CACEE"))
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
#legend_opts=opts.LegendOpts(selected_mode="single"),
title_opts=opts.TitleOpts(title="雷达图"),
)
)
# 渲染图表到notebook
c.render_notebook()
3、词云图
from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
words = [
("Sam S Club", 10000),
("Macys", 6181),
("Amy Schumer", 4386),
("Jurassic World", 4055),
("Charter Communications", 2467),
("Chick Fil A", 2244),
("Planet Fitness", 1868),
("Pitch Perfect", 1484),
("Express", 1112),
("Home", 865),
("Johnny Depp", 847),
("Lena Dunham", 582),
("Lewis Hamilton", 555),
("KXAN", 550),
("Mary Ellen Mark", 462),
("Farrah Abraham", 366),
("Rita Ora", 360),
("Serena Williams", 282),
("NCAA baseball tournament", 273),
("Point Break", 265),
]
c = (
WordCloud(init_opts=opts.InitOpts(theme=ThemeType.WALDEN))
.add("", words, word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="词云图"))
)
# 渲染图表到notebook
c.render_notebook()
4、漏斗图
import pyecharts.options as opts
from pyecharts.charts import Funnel
x_data = ["展现", "点击", "访问", "咨询", "订单"]
y_data = [100, 80, 60, 40, 20]
data = [[x_data[i], y_data[i]] for i in range(len(x_data))]
c = (
Funnel()
.add(
series_name="",
data_pair=data,
gap=2,
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b} : {c}%"),
label_opts=opts.LabelOpts(is_show=True, position="inside"),
itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
)
.set_global_opts(title_opts=opts.TitleOpts(title="漏斗图", subtitle="漏斗图"))
.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right",formatter="{c}", rotate=0)) # 显示内容
)
# 渲染图表到notebook
c.render_notebook()
六、趋势类图表
1、折线图
from pyecharts import options as opts
from pyecharts.charts import Line
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
result = df.groupby('YrSold').agg({
'OverallQual': 'sum',
'GarageCars': 'sum',
'FullBath': 'sum'
}).reset_index()
result.columns = ['YrSold', 'OverallQual', 'GarageCars', 'FullBath']
result_sorted_desc = result.sort_values('YrSold', ascending=False)
xaxis = result_sorted_desc['YrSold'].tolist()
xaxis = [str(i) for i in xaxis] #x轴不能用数字
yaxis_1 = result_sorted_desc['OverallQual'].tolist()
yaxis_2 = result_sorted_desc['GarageCars'].tolist()
yaxis_3 = result_sorted_desc['FullBath'].tolist()
c = (
Line(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(xaxis)
.add_yaxis("OverallQual", yaxis_1)
.add_yaxis("GarageCars", yaxis_2)
.add_yaxis("FullBath", yaxis_3)
#.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="折线图"))
)
# 渲染图表到notebook
c.render_notebook()
2、堆叠折线图
from pyecharts import options as opts
from pyecharts.charts import Line
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
result = df.groupby('YrSold').agg({
'OverallQual': 'sum',
'GarageCars': 'sum',
'FullBath': 'sum'
}).reset_index()
result.columns = ['YrSold', 'OverallQual', 'GarageCars', 'FullBath']
result_sorted_desc = result.sort_values('YrSold', ascending=False)
xaxis = result_sorted_desc['YrSold'].tolist()
xaxis = [str(i) for i in xaxis] #x轴不能用数字
yaxis_1 = result_sorted_desc['OverallQual'].tolist()
yaxis_2 = result_sorted_desc['GarageCars'].tolist()
yaxis_3 = result_sorted_desc['FullBath'].tolist()
c = (
Line(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(xaxis_data=xaxis)
.add_yaxis(
series_name="OverallQual",
stack="总量",
y_axis=yaxis_1,
# areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="GarageCars",
stack="总量",
y_axis=yaxis_2,
# areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="FullBath",
stack="总量",
y_axis=yaxis_3,
# areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="堆叠折线图"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
)
)
# 渲染图表到notebook
c.render_notebook()
3、面积图
from pyecharts import options as opts
from pyecharts.charts import Line
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
result = df.groupby('YrSold').agg({
'OverallQual': 'sum',
'GarageCars': 'sum',
'FullBath': 'sum'
}).reset_index()
result.columns = ['YrSold', 'OverallQual', 'GarageCars', 'FullBath']
result_sorted_desc = result.sort_values('YrSold', ascending=False)
xaxis = result_sorted_desc['YrSold'].tolist()
xaxis = [str(i) for i in xaxis] #x轴不能用数字
yaxis_1 = result_sorted_desc['OverallQual'].tolist()
yaxis_2 = result_sorted_desc['GarageCars'].tolist()
yaxis_3 = result_sorted_desc['FullBath'].tolist()
c = (
Line(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(xaxis)
.add_yaxis("OverallQual", yaxis_1, areastyle_opts=opts.AreaStyleOpts(opacity=0.5))
.add_yaxis("GarageCars", yaxis_2, areastyle_opts=opts.AreaStyleOpts(opacity=0.5))
.add_yaxis("FullBath", yaxis_3, areastyle_opts=opts.AreaStyleOpts(opacity=0.5))
#.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="面积图"))
)
# 渲染图表到notebook
c.render_notebook()
4、堆叠面积图
from pyecharts import options as opts
from pyecharts.charts import Line
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv')
result = df.groupby('YrSold').agg({
'OverallQual': 'sum',
'GarageCars': 'sum',
'FullBath': 'sum'
}).reset_index()
result.columns = ['YrSold', 'OverallQual', 'GarageCars', 'FullBath']
result_sorted_desc = result.sort_values('YrSold', ascending=False)
xaxis = result_sorted_desc['YrSold'].tolist()
xaxis = [str(i) for i in xaxis] #x轴不能用数字
yaxis_1 = result_sorted_desc['OverallQual'].tolist()
yaxis_2 = result_sorted_desc['GarageCars'].tolist()
yaxis_3 = result_sorted_desc['FullBath'].tolist()
c = (
Line(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(xaxis_data=xaxis)
.add_yaxis(
series_name="OverallQual",
stack="总量",
y_axis=yaxis_1,
areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="GarageCars",
stack="总量",
y_axis=yaxis_2,
areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="FullBath",
stack="总量",
y_axis=yaxis_3,
areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="堆叠面积图"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
)
)
# 渲染图表到notebook
c.render_notebook()
七、频率分布类
1、直方图
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
df = pd.read_csv('train.csv').head(100)
sale_condition_counts = df['YearBuilt'].value_counts().reset_index()
sale_condition_counts.columns = ['YearBuilt', 'Count']
x_data = sale_condition_counts.YearBuilt.tolist()
y_data = sale_condition_counts.Count.tolist()
c = (
Bar(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(x_data)
.add_yaxis("Count", y_data, category_gap=0)
.set_global_opts(title_opts=opts.TitleOpts(title="直方图"))
)
# 渲染图表到notebook
c.render_notebook()
2、箱线图
from pyecharts import options as opts
from pyecharts.charts import Boxplot
v1 = [
[850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980],
[960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790],
]
v2 = [
[890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920],
[890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870],
]
c = (
Boxplot(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(["expr1", "expr2"])
.add_yaxis("A", v1)
.add_yaxis("B", v2)
.set_global_opts(title_opts=opts.TitleOpts(title="箱线图"))
)
# 渲染图表到notebook
c.render_notebook()
八、关系类图表
1、散点图
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.faker import Faker
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv').head(100)
df = df.sort_values('GrLivArea', ascending=True)
df[['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']]
x_data = df.GrLivArea.to_list()
x_data = [str(i) for i in x_data] #x轴不能用数字
y_data = df.SalePrice.to_list()
c = (
Scatter(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(x_data)
.add_yaxis("GrLivArea", y_data)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False, position="right",formatter="{c}", rotate=0))
.set_global_opts(
title_opts=opts.TitleOpts(title="散点图"),
visualmap_opts=opts.VisualMapOpts(max_=500000, min_=100000),
)
)
# 渲染图表到notebook
c.render_notebook()
2、多图例散点图
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.faker import Faker
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv').head(100)
df = df.sort_values('GrLivArea', ascending=True)
df[['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']]
x_data = df.SalePrice.to_list()
x_data = [str(i) for i in x_data] #x轴不能用数字
y_data = df.GrLivArea.to_list()
y_data1 = df.YearBuilt.to_list()
c = (
Scatter(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(x_data)
.add_yaxis("GrLivArea", y_data)
.add_yaxis("YearBuilt", y_data1)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False, position="right",formatter="{c}", rotate=0))
.set_global_opts(
title_opts=opts.TitleOpts(title="散点图"),
visualmap_opts=opts.VisualMapOpts(max_=500000, min_=100000),
)
)
# 渲染图表到notebook
c.render_notebook()
3、气泡图
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.faker import Faker
import pandas as pd
from pyecharts.globals import ThemeType
df = pd.read_csv('train.csv').head(100)
df = df.sort_values('GrLivArea', ascending=True)
df[['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']]
x_data = df.GrLivArea.to_list()
x_data = [str(i) for i in x_data] #x轴不能用数字
y_data = df.SalePrice.to_list()
c = (
Scatter(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(x_data)
.add_yaxis("GrLivArea", y_data)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False, position="right",formatter="{c}", rotate=0))
.set_global_opts(
title_opts=opts.TitleOpts(title="气泡图"),
visualmap_opts=opts.VisualMapOpts(type_="size",max_=500000, min_=100000),
)
)
# 渲染图表到notebook
c.render_notebook()
4、热力图
from pyecharts.charts import HeatMap
from pyecharts import options as opts
import pandas as pd
# 读取CSV文件的前100行
df = pd.read_csv('train.csv').head(100)
# 选择你关心的列
df_date = df[['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']]
# 计算相关性矩阵,确保没有缺失值
correlation_matrix = df_date.corr().dropna(axis=0, how='any').dropna(axis=1, how='any')
# 初始化一个空列表来存储三元组
triplets = []
for i in range(correlation_matrix.shape[0]):
for j in range(correlation_matrix.shape[1]):
# 获取 x 坐标(列名)和 y 坐标(列名)
x = i
y = j
# 获取数据值(相关性系数)
value = round(correlation_matrix.iloc[i, j], 2)
triplets.append((x, y, value))
# 创建热力图
c = (
HeatMap(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add_xaxis(correlation_matrix.columns.tolist())
.add_yaxis(
"相关性",
correlation_matrix.index.tolist(),
triplets,
label_opts=opts.LabelOpts(is_show=True, position="inside"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="热力图"),
visualmap_opts=opts.VisualMapOpts(min_=-1, max_=1), # 设置最小值和最大值以反映相关性范围
)
)
# 渲染图表到notebook
c.render_notebook()
九、地理类图表
1、地图
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
x_data = ['杭州市','衢州市','湖州市','嘉兴市','宁波市','绍兴市','台州市','温州市','丽水市','金华市','舟山市']
y_data = [4000,2000,1800,2100,3500,3000,3000,3500,1500,2000,1000]
c = (
Map(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add("销量", [list(z) for z in zip(x_data, y_data)], "浙江")
.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="center",formatter="{b}{c}", rotate=0))
.set_global_opts(
title_opts=opts.TitleOpts(title="地图"),
visualmap_opts=opts.VisualMapOpts(max_=4000),
)
)
# 渲染图表到notebook
c.render_notebook()
十、突出类图表
1、仪表盘
from pyecharts import options as opts
from pyecharts.charts import Gauge
from pyecharts.globals import ThemeType
# 创建并配置Gauge实例
gauge = (
Gauge(init_opts=opts.InitOpts( theme=ThemeType.WALDEN))
.add(
"业务指标",
[("完成率", 55.5)],
split_number=5,
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(
color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")], width=30
)
),
detail_label_opts=opts.LabelOpts(formatter="{value}"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="仪表盘"),
legend_opts=opts.LegendOpts(is_show=False),
)
)
# 渲染图表到notebook
gauge.render_notebook()
十一、组合图表
1、overlap
import pandas as pd
from pyecharts.globals import ThemeType
from pyecharts.charts import Line, Grid
from pyecharts import options as opts
from pyecharts.charts import Bar
周期 = ['202340', '202341', '202342', '202343', '202344', '202345', '202346', '202347', '202348', '202349', '202350', '202351']
浏览 = ['20', '49', '53', '57', '43', '52', '56', '60', '80', '56', '59', '35']
点击 = ['4', '14', '4', '2', '13', '7', '6', '5', '11', '4', '8', '0']
购买 = ['0', '0', '1', '0', '3', '1', '1', '1', '1', '3', '3', '1']
总量 = ['24', '63', '58', '59', '59', '60', '63', '66', '92', '63', '70', '36']
bar = (
Bar(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis('浏览', 浏览, stack='stack1', color='#5aa5b4', category_gap="40%")
.add_yaxis('点击', 点击, stack='stack1', color='#FFFF00', category_gap="40%")
.add_yaxis('购买', 购买, stack='stack1', color='#FF6347', category_gap="40%")
.set_series_opts(label_opts=opts.LabelOpts(position="right",
formatter='{c}'))
.set_global_opts(title_opts=opts.TitleOpts(title='overlap'),
# xaxis_opts=opts.AxisOpts(name='地市'),
# visualmap_opts=opts.VisualMapOpts(max_=150),
# toolbox_opts=opts.ToolboxOpts(),
# datazoom_opts=opts.DataZoomOpts(),
xaxis_opts=opts.AxisOpts(name_rotate=60, axislabel_opts={"rotate": 45})
)
)
line = (
Line(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis(
"总量",
总量,
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(y=38)]),
)
.set_global_opts(title_opts=opts.TitleOpts(title=""))
)
overlap1 = bar.overlap(line)
overlap1.render_notebook()
2、grid-并行多图
import pandas as pd
from pyecharts.globals import ThemeType
from pyecharts.charts import Line, Grid
from pyecharts import options as opts
from pyecharts.charts import Bar
周期 = ['202340', '202341', '202342', '202343', '202344', '202345', '202346', '202347', '202348', '202349', '202350', '202351']
浏览 = ['20', '49', '53', '57', '43', '52', '56', '60', '80', '56', '59', '35']
点击 = ['4', '14', '4', '2', '13', '7', '6', '5', '11', '4', '8', '0']
购买 = ['0', '0', '1', '0', '3', '1', '1', '1', '1', '3', '3', '1']
总量 = ['24', '63', '58', '59', '59', '60', '63', '66', '92', '63', '70', '36']
bar = (
Bar(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis('浏览', 浏览, stack='stack1', color='#5aa5b4', category_gap="40%")
.add_yaxis('点击', 点击, stack='stack1', color='#FFFF00', category_gap="40%")
.add_yaxis('购买', 购买, stack='stack1', color='#FF6347', category_gap="40%")
.set_series_opts(label_opts=opts.LabelOpts(position="right",
formatter='{c}'))
.set_global_opts(title_opts=opts.TitleOpts(title='并行多图'),
# xaxis_opts=opts.AxisOpts(name='地市'),
# visualmap_opts=opts.VisualMapOpts(max_=150),
# toolbox_opts=opts.ToolboxOpts(),
# datazoom_opts=opts.DataZoomOpts(),
xaxis_opts=opts.AxisOpts(name_rotate=60, axislabel_opts={"rotate": 45})
)
)
line = (
Line(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis(
"总量",
总量,
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(y=38)]),
)
.set_global_opts(title_opts=opts.TitleOpts(title=""))
)
grid = (
Grid(init_opts=opts.InitOpts(width="860px", height="600px", theme=ThemeType.LIGHT))
.add(bar, grid_opts=opts.GridOpts(pos_top="50%", pos_right="10%"))
.add(line, grid_opts=opts.GridOpts(pos_left="10%", pos_bottom="50%"))
)
grid.render_notebook()
3、page-顺序多图
from pyecharts.charts import Page
import pandas as pd
from pyecharts.globals import ThemeType
from pyecharts.charts import Line, Tab
from pyecharts import options as opts
from pyecharts.charts import Bar
周期 = ['202340', '202341', '202342', '202343', '202344', '202345', '202346', '202347', '202348', '202349', '202350', '202351']
浏览 = ['20', '49', '53', '57', '43', '52', '56', '60', '80', '56', '59', '35']
点击 = ['4', '14', '4', '2', '13', '7', '6', '5', '11', '4', '8', '0']
购买 = ['0', '0', '1', '0', '3', '1', '1', '1', '1', '3', '3', '1']
总量 = ['24', '63', '58', '59', '59', '60', '63', '66', '92', '63', '70', '36']
bar = (
Bar(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis('浏览', 浏览, stack='stack1', color='#5aa5b4', category_gap="40%")
.add_yaxis('点击', 点击, stack='stack1', color='#FFFF00', category_gap="40%")
.add_yaxis('购买', 购买, stack='stack1', color='#FF6347', category_gap="40%")
.set_series_opts(label_opts=opts.LabelOpts(position="right",
formatter='{c}'))
.set_global_opts(title_opts=opts.TitleOpts(title='顺序多图'),d
# xaxis_opts=opts.AxisOpts(name='地市'),
# visualmap_opts=opts.VisualMapOpts(max_=150),
# toolbox_opts=opts.ToolboxOpts(),
# datazoom_opts=opts.DataZoomOpts(),
xaxis_opts=opts.AxisOpts(name_rotate=60, axislabel_opts={"rotate": 45})
)
)
line = (
Line(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis(
"总量",
总量,
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(y=38)]),
)
.set_global_opts(title_opts=opts.TitleOpts(title=""))
)
def page_draggable_layout():
# page = Page(layout=Page.SimplePageLayout) # 不可拖动
page = Page(layout=Page.DraggablePageLayout) # 可拖动
page.add(
bar,
line
)
page.render_notebook()
page.render("C:/Users/Mirror/Desktop/下载/pyecharts/顺序多图.html")
if __name__ == "__main__":
page_draggable_layout()
4、tab-选项卡多图
import pandas as pd
from pyecharts.globals import ThemeType
from pyecharts.charts import Line, Tab
from pyecharts import options as opts
from pyecharts.charts import Bar
周期 = ['202340', '202341', '202342', '202343', '202344', '202345', '202346', '202347', '202348', '202349', '202350', '202351']
浏览 = ['20', '49', '53', '57', '43', '52', '56', '60', '80', '56', '59', '35']
点击 = ['4', '14', '4', '2', '13', '7', '6', '5', '11', '4', '8', '0']
购买 = ['0', '0', '1', '0', '3', '1', '1', '1', '1', '3', '3', '1']
总量 = ['24', '63', '58', '59', '59', '60', '63', '66', '92', '63', '70', '36']
bar = (
Bar(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis('浏览', 浏览, stack='stack1', color='#5aa5b4', category_gap="40%")
.add_yaxis('点击', 点击, stack='stack1', color='#FFFF00', category_gap="40%")
.add_yaxis('购买', 购买, stack='stack1', color='#FF6347', category_gap="40%")
.set_series_opts(label_opts=opts.LabelOpts(position="right",
formatter='{c}'))
.set_global_opts(title_opts=opts.TitleOpts(title='选项卡多图'),
# xaxis_opts=opts.AxisOpts(name='地市'),
# visualmap_opts=opts.VisualMapOpts(max_=150),
# toolbox_opts=opts.ToolboxOpts(),
# datazoom_opts=opts.DataZoomOpts(),
xaxis_opts=opts.AxisOpts(name_rotate=60, axislabel_opts={"rotate": 45})
)
)
line = (
Line(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
.add_xaxis(周期)
.add_yaxis(
"总量",
总量,
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
# markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(y=38)]),
)
.set_global_opts(title_opts=opts.TitleOpts(title=""))
)
tab = Tab()
tab.add(bar, "bar-example")
tab.add(line, "line-example")
tab.render_notebook()
5、timeline-时间线轮播多图
import pandas as pd
from pyecharts.globals import ThemeType
from pyecharts.charts import Timeline, Pie
from pyecharts import options as opts
dict ={
'202212': [['电脑', 1], ['电视', 13], ['冰箱', 8],['空调', 8],['洗衣机', 8]],
'202301': [['电脑', 2], ['电视', 12], ['冰箱', 5],['空调', 3],['洗衣机', 8]],
'202302': [['电脑', 3], ['电视', 11], ['冰箱', 8],['空调', 18],['洗衣机', 8]],
'202303': [['电脑', 4], ['电视', 10], ['冰箱', 8],['空调', 8],['洗衣机', 2]],
'202304': [['电脑', 5], ['电视', 9], ['冰箱', 8],['空调', 8],['洗衣机', 8]],
'202305': [['电脑', 6], ['电视', 8], ['冰箱', 9],['空调', 8],['洗衣机', 8]],
'202306': [['电脑', 7], ['电视', 7], ['冰箱', 8],['空调', 7],['洗衣机', 5]],
'202307': [['电脑', 8], ['电视', 6], ['冰箱', 8],['空调', 8],['洗衣机', 8]],
'202308': [['电脑', 9], ['电视', 1], ['冰箱', 8],['空调', 8],['洗衣机', 9]],
'202309': [['电脑', 10], ['电视', 5], ['冰箱', 7],['空调', 7],['洗衣机', 8]],
'202310': [['电脑', 11], ['电视', 4], ['冰箱', 8],['空调', 8],['洗衣机', 4]],
'202311': [['电脑', 12], ['电视', 3], ['冰箱', 18],['空调', 8],['洗衣机', 8]],
'202312': [['电脑', 13], ['电视', 2], ['冰箱', 8],['空调', 8],['洗衣机', 3]]
}
tl_001 = Timeline(init_opts=opts.InitOpts(width="640px", height="400px", theme=ThemeType.LIGHT))
for date, data in dict.items():
pie = (
Pie()
.add(
"数量",
data,
rosetype="radius",
radius=["30%", "55%"],
)
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(max_=10, item_width=15, item_height=80),
title_opts=opts.TitleOpts("每月家电销售情况 (时间: {}月 )".format(date)),
)
)
tl_001.add(pie, "{}".format(date))
tl_001.render_notebook()