【四 (5)数据可视化之 Pyecharts常用图表及代码实现 】

目录

文章导航

【一 简明数据分析进阶路径介绍(文章导航)】

一、介绍

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()
相关推荐
AC赳赳老秦13 分钟前
2026多智能体协同趋势:DeepSeek搭建多智能体工作流,实现复杂任务自动化
人工智能·python·microsoft·云原生·virtualenv·量子计算·deepseek
小王毕业啦17 分钟前
2010-2023年 地级市-破产法庭设立数据(+文献)
大数据·人工智能·数据挖掘·数据分析·社科数据·经管数据·破产法庭
阿_旭36 分钟前
基于YOLO26深度学习的风力机缺陷检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·风力机缺陷检测
郝学胜-神的一滴44 分钟前
深度解析:Python元类手撸ORM框架,解锁底层编程魔法
数据结构·数据库·python·算法·职场和发展
xChive1 小时前
ECharts3D图表 | 3D柱状图和3D饼图实现思路
前端·3d·echarts
李恒-聆机智能专精数采1 小时前
从零开始了解数据采集技术篇(8)——为什么工业数据采集很难用“一站式平台”解决?从设备生态到系统架构的技术分析
运维·网络·数据库·数据分析·数据采集
badhope1 小时前
GitHub热门AI技能Top20实战指南
前端·javascript·人工智能·git·python·github·电脑
前端付豪1 小时前
练习单导出
前端·python·llm
@OuYang1 小时前
android10 应用安装
开发语言·python
_MyFavorite_1 小时前
Python 中通过命令行向函数传参
开发语言·chrome·python