科研论文柱状图——Python matplotlib

本文对matplotlib库的使用进行简要介绍,并提供一些科研论文常用的绘图代码。

Matplotlib库

Matplotlib是一个强大的用于可视化的Python库,适用于各种科学计算、数据分析和工程应用领域。其使用步骤一般如下:

  • 导入 Matplotlib 库及其模块,如 import matplotlib.pyplot as plt。
  • 准备数据,通常是使用 NumPy 数组或 Pandas 数据框。
  • 创建图表对象,例如 plt.figure()。
  • 绘制图形,调用各种绘图函数(如 plt.plot()、plt.scatter()、plt.bar() 等)来创建所需类型的图形。
  • 添加标题、标签、图例等装饰图表。
  • 显示或保存图表,使用 plt.show() 或 plt.savefig()
  • 柱状图绘图代码及示例

    1. 基本柱状图
      代码:
    import matplotlib.pyplot as plt
    
    # 数据
    categories = ['A', 'B', 'C', 'D']
    values = [4, 7, 1, 8]
    
    # 绘制柱状图
    plt.bar(categories, values)
    
    # 添加标题和标签
    plt.title('Simple Bar Chart')
    plt.xlabel('Category')
    plt.ylabel('Value')
    
    # 显示图表
    plt.savefig("/home/dili/draw/graphs/csdn.png")
    
    

    效果:

    1. 修改柱状图颜色
    import matplotlib.pyplot as plt
    
    # 数据
    categories = ['A', 'B', 'C', 'D']
    values = [4, 7, 1, 8]
    colors = ['#FFBE7A','#FA7F6F','#82B0D2','#BEB8DC']
    
    # 绘制柱状图
    plt.bar(categories, values, color=colors)
    
    # 添加标题和标签
    plt.title('Bar Chart with Colors')
    plt.xlabel('Category')
    plt.ylabel('Value')
    
    # 在每个柱上添加数值标签
    for i in range(len(values)):
        plt.text(i, values[i] + 0.1, str(values[i]), ha='center')
    
    # 显示图表
    plt.show()
    

    1. 分组柱状图
      代码:
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 数据
    categories = ['A', 'B', 'C', 'D']
    values1 = [4, 7, 1, 8]
    values2 = [5, 6, 2, 7]
    
    # 设置位置和宽度
    bar_width = 0.35
    index = np.arange(len(categories))
    
    # 绘制柱状图
    plt.bar(index, values1, bar_width, label='Series 1',color="#FFD9B7",edgecolor='black')
    plt.bar(index + bar_width, values2, bar_width, label='Series 2',color="#D6E7B5",edgecolor='black')
    
    # 添加标题和标签
    plt.title('Grouped Bar Chart')
    plt.xlabel('Category')
    plt.ylabel('Value')
    plt.xticks(index + bar_width / 2, categories)
    plt.legend()
    
    # 显示图表
    plt.show()
    

    效果:

    :如要增加每个组的柱状图个数,适当修改bar_width = 0.35的大小

    1. 分组柱状图2:每组多个,且图例在柱状图坐标轴外
      代码:
    import numpy as np
    import matplotlib.pyplot as plt
    # 数据
    groups = [1, 2, 3, 4, 5]
    value1 = [0.7, 0.75, 0.78, 0.8, 0.85]
    value2 = [0.78, 0.8, 0.7, 0.8, 0.84]
    value3 = [0.9, 0.88, 0.89, 0.90, 0.92] 
    value4 = [0.94, 0.94, 0.92, 0.95, 0.98]
    # 绘图设置
    bar_width = 0.15
    index = np.arange(len(groups))
    # 创建图形
    plt.figure(figsize=(10, 6))
    # 绘制柱状图
    plt.bar(index, value1, bar_width, label='categories1', edgecolor='black', color="#FADCAA")
    plt.bar(index + bar_width, value2, bar_width, label='categories2', edgecolor='black', color="#A6D0DD")
    plt.bar(index + 2 * bar_width, value3, bar_width, label='categories3', edgecolor='black', color="#82A0D8")
    plt.bar(index + 3 * bar_width, value4, bar_width, label='categories4', edgecolor='black', color="#CABBE9")
    # 设置Y轴范围
    plt.ylim(0.6, 1)
    # 添加轴标签和图例
    plt.xlabel('groups', fontsize=12)
    plt.ylabel('values', fontsize=12)
    plt.xticks(index + 2.5 * bar_width, groups, fontsize=12)
    plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=4, fontsize=12)  # 设置图例位置
    # 显示图表
    plt.show()
    
    

    效果:

    1. 堆叠柱状图
      代码:
    import matplotlib.pyplot as plt
    
    # 数据
    categories = ['A', 'B', 'C', 'D']
    values1 = [4, 7, 1, 8]
    values2 = [5, 6, 2, 7]
    
    # 绘制堆叠柱状图
    plt.bar(categories, values1, label='Series 1')
    plt.bar(categories, values2, bottom=values1, label='Series 2')
    
    # 添加标题和标签
    plt.title('Stacked Bar Chart')
    plt.xlabel('Category')
    plt.ylabel('Value')
    plt.legend()
    
    # 显示图表
    plt.show()
    

    效果:

    1. 柱状图填充
      填充样式可分为以下几种,除了使用不同的填充样式以区分,还可以通过改变填充样式的数量改变填充密度:
  • /:斜线
  • \:反斜线
  • |:竖线
  • -:横线
  • +:加号
  • x:小叉
  • o:小圆圈
  • O:大圆圈
  • .:小点
  • *:星号
    代码:
  • import numpy as np
    import matplotlib.pyplot as plt
    # 数据
    groups = [1, 2, 3, 4, 5]
    value1 = [0.7, 0.75, 0.78, 0.8, 0.85]
    value2 = [0.78, 0.8, 0.7, 0.8, 0.84]
    value3 = [0.9, 0.88, 0.89, 0.90, 0.92] 
    value4 = [0.94, 0.94, 0.92, 0.95, 0.98]
    # 绘图设置
    bar_width = 0.15
    index = np.arange(len(groups))
    # 创建图形
    plt.figure(figsize=(10, 6))
    # 绘制柱状图
    plt.bar(index, value1, bar_width, label='categories1', edgecolor='black', color="#FADCAA", hatch="//")
    plt.bar(index + bar_width, value2, bar_width, label='categories2', edgecolor='black', color="#A6D0DD",hatch="..")
    plt.bar(index + 2 * bar_width, value3, bar_width, label='categories3', edgecolor='black', color="#82A0D8",hatch="--")
    plt.bar(index + 3 * bar_width, value4, bar_width, label='categories4', edgecolor='black', color="#CABBE9",hatch="\\")
    # 设置Y轴范围
    plt.ylim(0.6, 1)
    # 添加轴标签和图例
    plt.xlabel('groups', fontsize=12)
    plt.ylabel('values', fontsize=12)
    plt.xticks(index + 2.5 * bar_width, groups, fontsize=12)
    plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=4, fontsize=12)  # 设置图例位置
    # 显示图表
    plt.show()
    

    效果:

    7. 修改图中字体
    英文期刊或会议论文中一般要求图中字体为Times New Roman,而matplotlib绘图时默认使用Arial字体,在Linux操作系统上修改绘图字体的步骤如下:

  • 下载字体相关文件,或者从本地计算机:C:\Windows\Fonts文件夹中复制
  • 将字体文件复制到linux系统中/usr/share/fonts文件夹下
  • 在绘图上添加以下代码后即可使用Times New Roman字体:
  • font_path = '/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf' 
    font_props = plt.matplotlib.font_manager.FontProperties(fname=font_path)
    

    注:需要在绘图时指定字体才会生效,如:plt.xticks(index + bar_width*2.5, categories, fontproperties=font_props, fontsize=12)

    作者:番茄炒西红柿炒蛋

    物联沃分享整理
    物联沃-IOTWORD物联网 » 科研论文柱状图——Python matplotlib

    发表回复