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

文章导航

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

一、介绍

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

[✨ 特性]

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

二、安装Pyecharts

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()

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 07:04:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 07:04:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 07:04:03       82 阅读
  4. Python语言-面向对象

    2024-03-17 07:04:03       91 阅读

热门阅读

  1. 指定函数为内置函数——个人练习

    2024-03-17 07:04:03       42 阅读
  2. unity-unity2d tilemap的基本使用笔记0.5.4000

    2024-03-17 07:04:03       36 阅读
  3. 七大排序(简洁思路版)

    2024-03-17 07:04:03       45 阅读