Python数据可视化入门指南

2023年 10月 16日 94.8k 0

Matplotlib和Plotly是两个在Python中广泛使用的数据可视化库,它们具有丰富的API和功能,用于创建各种类型的图表和图形。在本篇博客中,我们将介绍它们的主要特点和基本用法。

Matplotlib

主要特点:

  • 高度自定义: Matplotlib允许开发人员完全自定义图表的各个方面,包括线条样式、颜色、标签、图例、坐标轴等。
  • 支持多种图表类型: Matplotlib支持多种类型的图表,包括二维和三维图表,使其适用于各种数据可视化需求。
  • 交互式绘图: Matplotlib可以嵌入到交互式环境中,如Jupyter Notebook,使用户能够实时交互式地探索数据。
  • 输出格式多样: 可以将Matplotlib绘制的图表保存为多种输出格式,包括图像文件(如PNG、JPEG)、PDF文件,或直接显示在图形用户界面中。
  • 基本用法:

  • 导入Matplotlib: 使用 import matplotlib.pyplot as plt 导入Matplotlib库,通常使用 plt 作为别名。
  • 创建图表: 使用 plt.figure() 创建一个图表对象,可以设置图表的大小、分辨率等属性。
  • 绘制图形: 使用Matplotlib提供的函数和方法来绘制图形,例如使用 plt.plot() 绘制折线图、plt.scatter() 绘制散点图、plt.bar() 绘制柱状图等。
  • 设置图表属性: 使用函数如 plt.title()plt.xlabel()plt.ylabel() 来设置图表标题和坐标轴标签,使用 plt.legend() 添加图例,使用 plt.grid() 显示网格等。
  • 显示图表: 使用 plt.show() 来显示绘制的图表。在Jupyter Notebook等交互式环境中,图表通常会自动显示。
  • Plotly

    Plotly的Python库提供了多个API供用户创建交互式可视化图表。以下是Plotly库的一些主要API和其主要功能:

  • plotly.graph_objects API: 这是Plotly的核心API,允许用户通过创建 go.Figure 对象来绘制各种类型的图表。

    • go.Figure(): 创建一个新的图表对象。
    • add_trace(): 向图表对象添加数据系列,例如线图、散点图、柱状图等。
    • update_layout(): 设置图表的布局和样式,包括标题、坐标轴标签、图例等。
    • update_xaxes()update_yaxes(): 设置X轴和Y轴的属性,如刻度、范围等。
    • show(): 显示图表。
  • plotly.express API: 这是一个更高级的API,可以用更少的代码生成常见类型的图表。它适用于快速可视化和探索性数据分析。

    • px.line(), px.scatter(), px.bar(): 创建线图、散点图和柱状图等。
    • px.pie(): 创建饼图。
    • px.choropleth(): 创建地图和轮廓地图。
    • 其他快速可视化函数。
  • plotly.subplots API: 这个API允许用户创建包含多个子图的复杂布局,用于同时显示多个图表。

    • make_subplots(): 创建包含多个子图的图表布局。
    • add_trace(): 向子图添加数据系列。
    • update_layout(): 设置整个布局的样式。
  • plotly.offline API: 用于将Plotly图表保存为本地文件或在离线环境中显示图表。

    • plot(): 显示图表并将其保存为HTML文件。
    • init_notebook_mode(): 初始化Jupyter Notebook中的Plotly图表显示。
  • plotly.io API: 用于导出和显示Plotly图表的方法。

    • write_html(): 将图表导出为HTML文件。
    • write_image(): 将图表导出为图像文件(如PNG、JPEG)。
    • show(): 显示图表。
  • 这些API提供了广泛的选项和功能,允许用户创建各种类型的交互式可视化图表。用户可以根据数据和需求选择适当的API,并使用这些API来定制图表的样式、交互性和显示方式。 Plotly的文档和示例提供了更多关于API的详细信息和用法示例。两者都是非常强大的工具,根据需求选择适当的库来实现数据可视化目标。

    样例演示:

    使用Matplotlib绘制销售业绩分析图表:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.pyplot import MultipleLocator
    def test01():
        plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体
        x = np.arange(0, 30, 1)
        y1 = 3 * np.sin(2 * x) + 2 * x + 1
        y2 = 2 * np.cos(2 * x) + 3 * x + 9
        plt.figure(figsize=(11, 7))
        plt.plot(x, y1, linestyle='-.', color='red', linewidth=5.0)
        plt.plot(x, y2, marker='*', color='green', markersize=10)
        plt.xlabel('日期', size=16)
        plt.ylabel('金额', size=16, rotation=90, verticalalignment='center')
        x_major_locator = MultipleLocator(2)
        y_major_locator = MultipleLocator(10)
        ax = plt.gca()
        ax.xaxis.set_major_locator(x_major_locator)
        ax.yaxis.set_major_locator(y_major_locator)
        plt.tick_params(labelsize=16)
        plt.xlim(0, 30)
        plt.ylim(0, 100)
        plt.legend(labels=['利润额', '销售额'], loc='upper left', fontsize=15)
        plt.title('2020年9月份企业商品销售业绩分析', loc='center', size=20)
        plt.show()
    

    这个示例代码演示了如何使用Matplotlib库创建销售业绩分析图表,包括自定义样式、标签、刻度等。
    这段代码导入了NumPy用于生成数据,Matplotlib库用于绘图,以及用于设置坐标轴刻度间隔的MultipleLocator。

    具体实现思路如下:

    首先生成销售数据,比如日期、利润额和销售额。这是你需要在图表上展示的数据。这可以通过NumPy来完成,比如:

    
    x = np.arange(0, 30, 1)
    profit = 3 * np.sin(2 * x) + 2 * x + 1
    sales = 2 * np.cos(2 * x) + 3 * x + 9
    

    接下来,你可以创建一个图表对象。这将是你的绘图画布,你可以在上面绘制图表。设置图表的大小,可以使用下面的代码:

    
    plt.figure(figsize=(11, 7))
    

    然后,你可以使用plt.plot()来绘制销售数据的曲线。你可以自定义线条的样式、颜色和宽度。比如:

    
    plt.plot(x, profit, linestyle='-.', color='red', linewidth=5.0)
    plt.plot(x, sales, marker='*', color='green', markersize=10)
    

    接下来,你需要设置坐标轴标签、刻度间隔、刻度标签字体大小和坐标轴范围。这可以使用下面的代码来实现:

    
    plt.xlabel('日期', size=16)
    plt.ylabel('金额', size=16, rotation=90, verticalalignment='center')
    x_major_locator = MultipleLocator(2)
    y_major_locator = MultipleLocator(10)
    ax = plt.gca()
    ax.xaxis.set_major_locator(x_major_locator)
    ax.yaxis.set_major_locator(y_major_locator)
    plt.tick_params(labelsize=16)
    plt.xlim(0, 30)
    plt.ylim(0, 100)
    

    接着,你可以添加图例以区分不同的曲线,并设置图表的标题:

    
    plt.legend(labels=['利润额', '销售额'], loc='upper left', fontsize=15)
    plt.title('2020年9月份企业商品销售业绩分析', loc='center', size=20)
    

    最后,你可以使用plt.show()来显示你的图表:

    
    plt.show()
    

    image.png

    用Pyecharts库创建了一个柱状图

    def test02():
        from pyecharts.charts import Bar
        from pyecharts import options as opts
        bar = (
            Bar()
            .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
            .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
            .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
            .set_global_opts(title_opts=opts.TitleOpts(title="商家A和商家B9月份销售数量统计",
                                                       title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
                             xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)),
                             yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)),
                             toolbox_opts=opts.ToolboxOpts(),
                             legend_opts=opts.LegendOpts(is_show=True, item_width=40, item_height=20,
                                                         textstyle_opts=opts.TextStyleOpts(font_size=16)))
            .set_series_opts(label_opts=opts.LabelOpts(font_size=16))
        )
        bar.render('sales.html')
    

    这段代码是用Pyecharts库创建了一个柱状图,主要展示了两家商家(商家A和商家B)在九月份的销售数量情况。这种图表在比较不同商品销售数据时非常有用。

    首先,我们导入所需的库和模块,然后创建一个柱状图对象。我们定义了X轴的标签,这些标签代表不同种类的商品,比如衬衫、毛衣、领带等等。

    接下来,我们添加了两个数据系列,分别代表商家A和商家B的销售数据。这些销售数据以列表的形式提供,包括不同商品的销售数量。

    然后,我们设置了一些全局选项,如图表的标题、坐标轴标签的字体大小、工具栏选项和图例。标题是"商家A和商家B9月份销售数量统计",为了使标题更醒目,我们将标题字体大小设置为20。坐标轴标签也有一个合适的字体大小,以确保图表易于阅读。

    最后,我们还对数据系列进行了一些选项设置,特别是标签的字体大小。

    最终,我们使用.render('sales.html')将生成的图表保存为一个HTML文件,文件名为"sales.html"。这个HTML文件可以在浏览器中打开,以查看和分享这个柱状图,从而更好地了解商家A和商家B的销售情况。

    效果展示图:

    image.png

    使用Plotly库来创建一个饼图

    def test03():
        import plotly.offline as py
        import plotly.graph_objects as go
        store = ['定远店', '东海店', '海恒店', '金寨店', '燎原店', '临泉店', '庐江店', '明耀店', '众兴店']
        consumer = [30, 22, 20, 28, 16, 30, 24, 18, 12]
        fig = go.Figure(
            data=[go.Pie(labels=store, values=consumer, textinfo='label+percent', insidetextorientation='radial')])
        fig.update_layout(
            legend_title="客户类型",  # 图例标题文本
            width=700, height=500,  # 设置图像的大小
            title=dict(
                text="2020年第二季度各门店销售业绩分析",
                x=0.5,
                xanchor='center',
                xref='paper'
            ),
            font=dict(
                family="Courier New, monospace",  # 标题的字体
                size=18,  # 标题的大小
                color="RebeccaPurple"  # 标题的颜色
            )
        )
        py.plot(fig, filename='bingtu.html')
    

    段代码使用了Plotly库来创建一个饼图,用于展示不同门店在2020年第二季度的销售业绩情况。饼图是一种很好的方式来比较各部分在整体中的占比情况。

    首先,我们导入了所需的库和模块,包括Plotly的offlinegraph_objects。然后,我们定义了两个列表,storeconsumer,它们分别包含了门店名称和对应的销售业绩数据。

    接下来,我们创建了一个Figure对象,其中使用go.Pie创建了一个饼图。在饼图中,labels参数代表各门店的名称,values参数代表对应的销售业绩数据。textinfo参数设置了饼图上显示的文本信息,这里是标签和百分比,insidetextorientation参数设置了文本方向。

    然后,我们使用update_layout来设置图表的布局和样式。这包括设置图表的标题、宽度和高度,以及标题的字体、大小和颜色。

    最后,我们使用py.plot将生成的饼图保存为一个HTML文件,文件名为"bingtu.html"。这个HTML文件可以在浏览器中打开,以查看和分享门店销售业绩的饼图,帮助理解不同门店在总销售中的占比情况。这是一种直观的数据可视化方法。

    展示图如下:

    image.png

    使用 Pyecharts 库来创建一个地图图表

    from pyecharts import options as opts
    from pyecharts.charts import Map
    
    # 提供的数据
    city_sales = [
        ("长沙市", 184), ("株洲市", 192), ("湘潭市", 171), ("衡阳市", 131), ("邵阳市", 149),
        ("岳阳市", 121), ("常德市", 71), ("张家界市", 83), ("益阳市", 88), ("郴州市", 156),
        ("永州市", 99), ("怀化市", 86), ("娄底市", 65)
    ]
     
    city_profits = [
        ("长沙市", 18.4), ("株洲市", 19.2), ("湘潭市", 17.1), ("衡阳市", 13.1), ("邵阳市", 14.9),
        ("岳阳市", 12.1), ("常德市", 7.1), ("张家界市", 8.3), ("益阳市", 8.8), ("郴州市", 15.6),
        ("永州市", 9.9), ("怀化市", 8.6), ("娄底市", 6.5)
    ]
    
    # 整理数据
    city_names = [item[0] for item in city_sales]
    profit_data = [item[1] for item in city_profits]
    
    # 绘制商品利润额地图
    profits_map = (
        Map()
        .add(
            series_name="2020年湖南省各地级市商品利润额",  # 添加数据的系列名称
            data_pair=[(city, profit) for city, profit in zip(city_names, profit_data)],  # 添加地图数据,包括城市名和商品利润额
            maptype="湖南",  # 地图类型为湖南
            is_map_symbol_show=True,  # 显示城市名
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(is_show=True),  # 设置标签选项,这里是显示标签
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="2020年湖南省各地级市商品利润额",
                subtitle="数据来源:湖南省统计局",
                pos_right="10px",
                pos_top="20px",
            ),
            visualmap_opts=opts.VisualMapOpts(max_=max(profit_data)),
        )
    )
    
    
    # 生成 HTML 文件
    profits_map.render("湖南省商品利润额地图.html")
    

    这段代码使用了 Pyecharts 库来创建一个地图图表,用于展示湖南省各地级市在2020年的商品利润额情况。以下是代码的口语叙述:

    首先,我们导入了所需的库和模块,包括 Pyecharts 的选项模块 opts 和地图图表模块 Map

    然后,我们提供了两个数据列表 city_salescity_profits,分别包含了各地级市的销售额和商品利润额数据。这些数据是根据不同城市的统计信息整理而来。

    接下来,我们提取了城市名称和商品利润额的数据,以便用于地图图表的绘制。

    然后,我们创建了一个地图图表对象 profits_map。在这个图表中,我们使用 .add() 方法添加了地图的系列名称和数据对,其中包括城市名称和商品利润额数据。地图的类型被设置为湖南,表示我们要绘制湖南省的地图,并设置了显示城市名的选项。

    接着,我们使用 .set_series_opts() 方法设置了标签选项,以便在地图上显示标签。

    最后,我们使用 .set_global_opts() 方法设置了图表的全局选项,包括标题、副标题、位置等信息,并使用 visualmap_opts 设置了可视化地图的选项,以便调整颜色映射和范围。

    最后,我们使用 .render() 方法生成了一个 HTML 文件,文件名为 "湖南省商品利润额地图.html"。这个 HTML 文件包含了绘制的地图图表,可以在浏览器中打开以查看湖南省各地级市的商品利润额分布情况。这是一种直观的数据可视化方法,帮助用户更好地理解不同城市的商品利润情况。

    效果展示图:

    2023-10-16 (2).png

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论