Python数据可视化入门指南

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

Matplotlib

主要特点:

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

基本用法:

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

Plotly

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

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

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

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

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

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

    • write_html(): 将图表导出为HTML文件。
    • write_image(): 将图表导出为图像文件(如PNG、JPEG)。
    • show(): 显示图表。

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

样例演示:

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

Python 复制代码
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来完成,比如:

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

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

python 复制代码
plt.figure(figsize=(11, 7))

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

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

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

python 复制代码
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)

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

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

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

python 复制代码
plt.show()

用Pyecharts库创建了一个柱状图

Python 复制代码
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的销售情况。

效果展示图:

使用Plotly库来创建一个饼图

Python 复制代码
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文件可以在浏览器中打开,以查看和分享门店销售业绩的饼图,帮助理解不同门店在总销售中的占比情况。这是一种直观的数据可视化方法。

展示图如下:

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

Python 复制代码
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 文件包含了绘制的地图图表,可以在浏览器中打开以查看湖南省各地级市的商品利润额分布情况。这是一种直观的数据可视化方法,帮助用户更好地理解不同城市的商品利润情况。

效果展示图:

相关推荐
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能5 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂5 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study5 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境6 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境6 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1236 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102167 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb007 小时前
一个项目带你入门AI应用开发01
python
0566468 小时前
Python康复训练——常用标准库
开发语言·python·学习