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

效果展示图:

相关推荐
ROBOT玲玉2 分钟前
Milvus 中,FieldSchema 的 dim 参数和索引参数中的 “nlist“ 的区别
python·机器学习·numpy
Kai HVZ1 小时前
python爬虫----爬取视频实战
爬虫·python·音视频
古希腊掌管学习的神1 小时前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
m0_748244831 小时前
StarRocks 排查单副本表
大数据·数据库·python
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
路人甲ing..1 小时前
jupyter切换内核方法配置问题总结
chrome·python·jupyter
游客5201 小时前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
每天都要学信号2 小时前
Python(第一天)
开发语言·python
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
咸鱼桨2 小时前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派