Python教程:使用matplotlib绘制曲线图、条形图和饼图

文章目录

  • 一、什么是matplotlib
  • 二、matplotlib 支持的图形
  • 三、如何使用matplotlib
  • 1. 安装matplotlib
  • 2. 导入matplotlib.pyplot
  • 3. 准备数据
  • 4. 绘制图形
  • 5. 定制图形
  • 6. 显示或保存图形
  • 7. (可选)使用subplots创建多个子图
  • 注意事项:
  • 四、常见图形使用示例
  • 1. 线图 (Line Plot)
  • 2. 散点图 (Scatter Plot)
  • 3. 条形图 (Bar Chart)
  • 4. 直方图 (Histogram)
  • 5. 饼图 (Pie Chart)
  • 6. 直方图 2d
  • 7. 面积图(Area Plot)
  • 8. 热力图(Heatmap)
  • 9. 三维图形(3D Plot)
  • 10. 堆叠图(Stacked Plot)
  • 五、常用函数
  • 参考
  • 一、什么是matplotlib

    matplotlib 是一个用于创建静态、动态和交互式可视化图形的 Python 库。它被广泛用于数据可视化,并且可以与多种操作系统和图形后端一起工作。matplotlib 提供了一套与 MATLAB 相似的命令 API,适合交互式制图,也可以作为绘图控件嵌入到其他应用程序中。

    matplotlib 的主要组成部分是 pyplot,它是一个类似于 MATLAB 的绘图框架。pyplot 提供了一个 MATLAB 式的接口,可以隐式地创建图形和轴,使得绘图变得简单。

    以下是一个简单的 matplotlib 使用示例,用于绘制一条简单的折线图:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 创建数据
    x = np.linspace(0, 10, 100)
    y = np.sin(x)
    
    # 创建图形
    plt.figure()
    
    # 绘制折线图
    plt.plot(x, y, '-')
    
    # 设置图表标题和坐标轴标签
    plt.title("Simple Plot of Sine Function")
    plt.xlabel("X-axis")
    plt.ylabel("Y-axis")
    
    # 显示图形
    plt.show()
    

    在这个例子中,我们首先导入了 matplotlib.pyplotnumpy。然后,我们创建了一组数据 xy,其中 yx 的正弦函数。接下来,我们使用 plt.figure() 创建一个新的图形,并使用 plt.plot() 绘制折线图。最后,我们设置了图表的标题和坐标轴标签,并使用 plt.show() 显示图形。

    这只是 matplotlib 的一个基本示例。该库提供了许多其他功能,包括散点图、条形图、饼图、3D 图形、等高线图等。此外,matplotlib 还支持自定义颜色、线型、标记等,以及添加图例、网格等。

    二、matplotlib 支持的图形

    matplotlib 是一个非常灵活的绘图库,支持绘制多种类型的图形。以下是一些 matplotlib 支持的主要图形类型:

    1. 线图 (Line Plots): 最基本的图形类型,用于显示数据点的连接。

    2. 散点图 (Scatter Plots): 用于显示两个变量之间的关系,通过点的分布来表示。

    3. 条形图 (Bar Charts): 适用于展示分类数据的相对大小。

    4. 直方图 (Histograms): 展示数据分布的统计图,通常用于表示连续变量的分布情况。

    5. 饼图 (Pie Charts): 用于表示整体中各部分的比例关系。

    6. 箱图 (Box Plots): 用于展示数据的分布情况,包括中位数、四分位数、最大值、最小值以及可能存在的异常值。

    7. 面积图 (Area Charts): 类似于线图,但是下方区域会被填充颜色,用于表示数据随时间的变化量。

    8. 等高线图 (Contour Plots): 通常用于表示三维数据在二维平面上的投影,通过等高线展示数据点的密集程度。

    9. 热力图 (Heatmap): 通过颜色的深浅来表示数据矩阵中各个值的大小。

    10. 极坐标图 (Polar Plots): 在极坐标系中展示数据点,常用于表示与角度相关的信息。

    11. 三维图形 (3D Plots): 用于在三维空间中展示数据点的分布情况,可以创建三维散点图、三维曲面图等。

    12. 堆叠图 (Stacked Plots): 适用于展示多个分类数据系列的累积效果,如堆叠条形图或堆叠面积图。

    13. 误差条图 (Error Bar Charts): 用于表示数据点的不确定性或变化范围。

    14. 矢量场图 (Vector Fields): 用于表示矢量数据,如风向或流体的流动方向。

    15. 流线图 (Stream Plots): 类似于矢量场图,但更侧重于表示流体的流动路径。

    matplotlib 还支持许多其他高级和定制化的图形,包括但不限于小提琴图 (violin plots)、树状图 (dendrograms)、雷达图 (radar charts) 等。由于其强大的定制性和灵活性,matplotlib 已经成为数据可视化的重要工具之一。

    三、如何使用matplotlib

    使用matplotlib进行数据可视化是一个相对直接的过程。以下是一个清晰、分点的指南,帮助您开始使用matplotlib

    1. 安装matplotlib

    首先,确保您已经安装了matplotlib库。如果还没有安装,可以使用pip进行安装:

    pip install matplotlib
    

    2. 导入matplotlib.pyplot

    在Python脚本或Jupyter Notebook中,您需要导入matplotlib.pyplot模块,通常我们使用别名plt来引用它:

    import matplotlib.pyplot as plt
    

    3. 准备数据

    准备您要可视化的数据。这可以是实验数据、统计数据或任何您想要展示的信息。

    4. 绘制图形

    使用plt中的函数来绘制您想要的图形。以下是一些常见图形的绘制方法:

  • 线图

    plt.plot(x, y, label='Line 1')  # x和y是数据点
    
  • 散点图

    plt.scatter(x, y)  # x和y是数据点
    
  • 条形图

    plt.bar(x, y)  # x是分类变量,y是对应值
    
  • 直方图

    plt.hist(data, bins=10)  # data是要统计的数据,bins是分组数量
    
  • 饼图

    plt.pie(sizes, labels=labels)  # sizes是各部分大小,labels是标签
    
  • 5. 定制图形

    您可以添加标题、轴标签、图例以及调整轴的范围等:

    plt.title('My Plot')        # 添加标题
    plt.xlabel('X Axis Label')  # 添加X轴标签
    plt.ylabel('Y Axis Label')  # 添加Y轴标签
    plt.legend()                # 添加图例
    plt.xlim(0, 10)             # 设置X轴范围
    plt.ylim(0, 100)            # 设置Y轴范围
    

    6. 显示或保存图形

    最后,使用plt.show()来显示图形,或者使用plt.savefig()来保存图形到文件:

    plt.show()  # 显示图形
    # 或者
    plt.savefig('my_plot.png')  # 保存图形为PNG文件
    

    7. (可选)使用subplots创建多个子图

    如果您想在同一个窗口中显示多个图形,可以使用plt.subplots()

    fig, axs = plt.subplots(nrows=2, ncols=2)  # 创建一个2x2的子图网格
    # 然后可以在每个子图上进行绘制,例如:
    axs[0, 0].plot(x1, y1)  # 在第一个子图上绘图
    axs[0, 1].scatter(x2, y2)  # 在第二个子图上绘图
    # ...以此类推
    

    注意事项:

  • 确保您的数据格式正确,并且与所选的图形类型兼容。
  • matplotlib具有高度的可定制性,您可以通过查阅官方文档来了解更多高级功能和定制选项。
  • 在绘制复杂图形时,考虑使用面向对象的方式来操作图形和轴对象,这可以提供更精细的控制。
  • 四、常见图形使用示例

    下面我会通过具体的代码示例来介绍matplotlib库中常见图形的绘制方法。

    1. 线图 (Line Plot)

    线图通常用于展示数据随时间的变化趋势。

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 创建数据
    x = np.linspace(0, 10, 100)
    y = np.sin(x)
    
    # 绘制线图
    plt.plot(x, y)
    plt.title('Line Plot')
    plt.xlabel('X Axis')
    plt.ylabel('Y Axis')
    plt.grid(True)
    plt.show()
    

    2. 散点图 (Scatter Plot)

    散点图用于展示两个变量之间的关系。

    # 创建数据
    x = np.random.rand(50)
    y = np.random.rand(50)
    
    # 绘制散点图
    plt.scatter(x, y)
    plt.title('Scatter Plot')
    plt.xlabel('X Axis')
    plt.ylabel('Y Axis')
    plt.grid(True)
    plt.show()
    

    3. 条形图 (Bar Chart)

    条形图适用于展示分类数据的相对大小。

    # 创建数据
    categories = ['Category1', 'Category2', 'Category3', 'Category4']
    values = [23, 45, 56, 12]
    # 设置字体为支持中文的字体,比如'SimHei'(黑体),确保你的系统中安装了该字体
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用于正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    # 绘制条形图
    plt.bar(categories, values, label='测试图例')
    plt.title('Bar Chart')
    plt.xlabel('Categories')
    plt.ylabel('Values')
    plt.legend()
    plt.show()
    

    4. 直方图 (Histogram)

    直方图用于展示数据分布的统计图。

    # 创建数据(正态分布的随机样本)
    data = np.random.rand(100)
    print(data)
    
    data = np.sort(data)
    print(data)
    # 绘制直方图
    plt.hist(data, bins=20, edgecolor='black', color='skyblue', alpha=0.7)
    
    # 定制图形
    plt.title('Histogram of Data Distribution')
    plt.xlabel('Value Range')
    plt.ylabel('Frequency')
    plt.grid(True)
    
    # 显示图形
    plt.show()
    

    5. 饼图 (Pie Chart)

    饼图用于表示整体中各部分的比例关系。

    # 创建数据
    labels = ['A', 'B', 'C', 'D']
    sizes = [15, 30, 45, 10]
    
    # 绘制饼图
    plt.pie(sizes, labels=labels)
    plt.title('Pie Chart')
    plt.show()
    

    6. 直方图 2d

    直方图用于展示数据分布的统计图。

    # 创建数据
    x = np.array([1, 2, 3, 4, 2, 2, 2, 1])
    y = np.array([1, 2, 3, 4, 1, 2, 3, 4])
    
    # 绘制直方图
    plt.hist2d(x, y, bins=[20, 20], cmap=plt.cm.jet)
    plt.title('Histogram')
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    # 添加带有标签的颜色条
    plt.colorbar(label='Counts')
    plt.grid(True)
    plt.show()
    

    7. 面积图(Area Plot)

    面积图是一种展示数据随时间变化趋势的图形,通常用于显示时间序列数据。

    import matplotlib.pyplot as plt  
    import numpy as np  
      
    # 模拟数据  
    x = np.arange(1, 6)  
    y1 = np.random.randint(1, 5, 5)  
    y2 = np.random.randint(1, 5, 5)  
      
    # 绘制面积图  
    # 绘制 y1 到 0 之间的区域
    plt.fill_between(x, y1, color='blue', alpha=0.5, label='Area 1')  
    # 绘制 y1 到 y2 之间的区域
    plt.fill_between(x, y1, y2, color='red', alpha=0.5, label='Area 2')  
      
    plt.legend()  
    plt.show()
    

    8. 热力图(Heatmap)

    热力图通常用于显示数据矩阵中各个元素值的大小,通过颜色来表示数值。

    示例1

    import matplotlib.pyplot as plt  
    import numpy as np  
    import seaborn as sns  
      
    # 创建一个数据矩阵  
    data = np.random.rand(10, 12)  
      
    # 绘制热力图  
    sns.heatmap(data, cmap='coolwarm')  
    plt.show()
    


    示例2

    import numpy as np
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # 创建一个假设的数据集
    data = {
        'Product': ['A', 'B', 'C', 'D', 'E'],
        'January': np.random.randint(10, 100, 5),
        'February': np.random.randint(10, 100, 5),
        'March': np.random.randint(10, 100, 5),
        'April': np.random.randint(10, 100, 5),
        'May': np.random.randint(10, 100, 5),
        'June': np.random.randint(10, 100, 5)
    }
    
    # 将数据转换为Pandas DataFrame
    df = pd.DataFrame(data)
    df = df.set_index('Product')
    
    # 绘制热力图
    plt.figure(figsize=(10, 8))
    sns.heatmap(df, annot=True, cmap='coolwarm', fmt='d', linewidth=0.5)
    
    # 设置图表标题和坐标轴标签
    plt.title('Monthly Sales Heatmap')
    plt.xlabel('Month')
    plt.ylabel('Product')
    
    # 显示图表
    plt.show()
    

    9. 三维图形(3D Plot)

    Matplotlib也支持三维图形的绘制,例如三维散点图、三维曲面图等。

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 创建3D坐标轴
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    
    # 模拟三维数据点
    x = np.random.standard_normal(100)
    y = np.random.standard_normal(100)
    z = np.random.standard_normal(100)
    
    # 绘制三维散点图
    ax.scatter(x, y, z, c='b', marker='o')
    
    plt.show()
    

    10. 堆叠图(Stacked Plot)

    堆叠图通常用于展示不同类别数据随某个变量的累积变化。

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 模拟数据
    N = 5
    menMeans = (20, 35, 30, 35, 27)
    womenMeans = (25, 32, 34, 20, 25)
    ind = np.arange(N)  # the x locations for the groups
    width = 0.35  # the width of the bars: can also be len(x) sequence
    
    # 绘制男性数据堆叠图
    p1 = plt.bar(ind, menMeans, width, label='Men')
    
    # 绘制女性数据堆叠图,注意这里的bottom参数,它使得女性数据的柱状图从男性数据的顶部开始绘制
    p2 = plt.bar(ind, womenMeans, width, label='Women', bottom=menMeans)
    
    plt.ylabel('Scores')
    plt.title('Scores by group and gender')
    # 设置X轴刻度
    plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
    # 设置y轴刻度
    plt.yticks(np.arange(0, 81, 10))
    # 显示图例
    plt.legend()
    plt.show()
    

    这些代码示例展示了如何使用matplotlib绘制常见的图形。您可以根据需要调整数据和图形属性来定制您的图表。每个图形类型都有许多可配置的选项,例如颜色、线型、标记样式等,您可以通过查阅matplotlib的官方文档来了解更多细节。

    五、常用函数

    matplotlib库中,有许多常用的函数用于数据可视化。以下是一些matplotlib.pyplot模块中常用的函数:

    函数 描述 使用示例
    plot() 绘制线图 plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
    scatter() 绘制散点图 plt.scatter([1, 2, 3, 4], [1, 4, 9, 16])
    bar() 绘制条形图 plt.bar([1, 2, 3, 4], [10, 15, 7, 10])
    hist() 绘制直方图 data = np.random.randn(1000); plt.hist(data, bins=30)
    pie() 绘制饼图 plt.pie([10, 20, 30, 40], labels=['A', 'B', 'C', 'D'])
    boxplot() 绘制箱线图 data = np.random.normal(100, 20, 200); plt.boxplot(data)
    imshow() 显示图像 image = np.random.rand(10, 10); plt.imshow(image)
    xlabel() 设置X轴标签 plt.xlabel('Time')
    ylabel() 设置Y轴标签 plt.ylabel('Amplitude')
    title() 设置图形标题 plt.title('Sample Plot')
    xlim() 设置X轴范围 plt.xlim(0, 10)
    ylim() 设置Y轴范围 plt.ylim(-1, 1)
    xticks() 设置X轴刻度 plt.xticks([0, 1, 2, 3], ['zero', 'one', 'two', 'three'])
    yticks() 设置Y轴刻度 plt.yticks([-1, 0, 1], ['min', 'zero', 'max'])
    legend() 添加图例 plt.plot([1, 2, 3], label='Line 1'); plt.legend()
    grid() 添加网格线 plt.grid(True)
    show() 显示图形 plt.plot([1, 2, 3], [1, 4, 9]); plt.show()
    savefig() 保存图形 plt.plot([1, 2, 3], [1, 4, 9]); plt.savefig('plot.png')

    请注意,上述示例代码仅为简单演示函数的使用,实际应用中可能需要根据具体需求调整参数和设置。另外,为了使示例代码简洁明了,这里没有包含数据准备和图形细节调整的部分。在实际应用中,你通常需要先准备好数据,并根据需要调整图形的各种属性(如线型、颜色、标签等)。

    参考

  • Matplotlib中文网
  • 作者:顽石九变

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python教程:使用matplotlib绘制曲线图、条形图和饼图

    发表回复