Python Matplotlib数据可视化绘图之参数设置详解:图片大小、颜色、标题、坐标轴、画布和绘图区域背景颜色以及Legend(图例)

文章目录

  • 前言
  • 一、图片大小的设定和调节
  • 1. 三种调整matplotlib图片大小的方法
  • 1.1 plt.figure(figsize=(n, n))
  • 1.1.1 代码如下:
  • 1.1.2 输出结果如下:
  • 1.1.3 代码如下:
  • 1.1.4 输出结果如下:
  • 1.2 plt.rcParams['figure.figsize']=(n, n)
  • 1.2.1 代码如下:
  • 1.2.2 输出结果如下:
  • 1.2.3 代码如下:
  • 1.2.4 输出结果如下:
  • 1.3 样式表+plt.style.use('xxx.mpstyle')
  • 1.3.1 新建文件,文件名为xxx.mpstyle,例如style.mpstyle。编辑文件内容:
  • 1.3.2 在Python文件中:
  • 二、图片颜色的设定和调节
  • 1. 图片颜色的设定
  • 1.1 设置画布颜色为"#B0C4DE",轴域颜色为"white",则代码如下:
  • 1.2 输出结果如下:
  • 1.3 设置画布颜色为"#FF8C00",轴域颜色为"white",则代码如下:
  • 1.4 输出结果如下:
  • 三、图片标题的设定和调节
  • 1. 图片标题的设定
  • 1.1 方式一,面向对象,利用fig=plt.figure(), ax=fig.add_subplot(), ax.set_title(), 代码如下:
  • 1.2 输出结果如下:
  • 1.3 方式二,直接方式,利用plt.title(), 代码如下:
  • 1.4 输出结果如下:
  • 四、图片纵横坐标的设定和调节
  • 1. 图片纵横坐标的设定
  • 1.1 刻度,这里我们通过设置x轴的刻度进行说明,代码如下:
  • 1.2 输出结果如下:
  • 1.3 刻度标签,这里我们通过设置x轴的刻度标签进行说明,代码如下:
  • 1.4 输出结果如下:
  • 五、图片Legend(图例)的设定和调节
  • 1. 图片Legend(图例)的设定
  • 1.1 plt.legend()那一段代码中详细设置了每一个参数,感兴趣的可以去探索一下每一个参数带来的效果上的差别,代码如下:
  • 1.2 输出结果如下:
  • 六、总结

  • 前言

    前面五期的文章详细讲述了Python Matplotlib数据可视化绘图的方法技巧,主要涉及柱状图(《Python Matplotlib数据可视化绘图之(一)————柱状图》)、箱线图(《Python Matplotlib数据可视化绘图之(二)————箱线图》)、散点图(《Python Matplotlib数据可视化绘图之(三)————散点图》)、柱状图与折线图的叠加图(《Python Matplotlib数据可视化绘图之(四)————柱状图与折线图的叠加图》)、箱线图与散点图的叠加图(《Python Matplotlib数据可视化绘图之(五)————箱线图与散点图的叠加图》),这五类作图类型。那么,在这五期中其实有一些作图的小细节是没有在文章中详细讲解的,本期内容就详细介绍绘图过程中所涉及的一些细节,主要包括图片大小、颜色、标题、纵横坐标、画布、绘图区域的背景颜色、Legend图例等参数。


    一、图片大小的设定和调节

    1. 三种调整matplotlib图片大小的方法

    1.1 plt.figure(figsize=(n, n))

    比如想让输出的图片大小为600×600像素:

    1.1.1 代码如下:

    import matplotlib.pyplot as plt
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.figure(figsize=(6, 6))
    # 600 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    plt.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    plt.ylabel('编程语言用户量(人数)', fontweight='bold')
    plt.show()
    

    1.1.2 输出结果如下:


    比如想让输出的图片大小为800×600像素:

    1.1.3 代码如下:

    import matplotlib.pyplot as plt
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.figure(figsize=(8, 6))
    # 800 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    plt.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    plt.ylabel('编程语言用户量(人数)', fontweight='bold')
    plt.show()
    

    1.1.4 输出结果如下:


    1.2 plt.rcParams[‘figure.figsize’]=(n, n)

    这一方法可以同时对多个图片设置大小,也就是说,在写上这句话以后,不用在其他地方再写plt.figure(figsize=(n, n))这句语句了。输出的图片都是这种尺寸,如果中间想单独改变某一个图片的大小尺寸,可以再用plt.figure(figsize=(n, n))来指定图片大小即可。

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize']=(8, 6)
    # 全局设置输出图片大小 800 x 600 像素
    

    1.2.1 代码如下:

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize'] = (8, 6)
    # 800 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    fig1 = plt.figure()
    fig2 = plt.figure()
    ax1 = fig1.add_subplot()
    ax2 = fig2.add_subplot()
    ax1.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax2.bar([1, 2, 3, 4, 5, 6, 7], [2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax1.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    ax1.set_title('fig1', fontweight='bold')
    ax2.set_ylabel('历年苹果产量(kg)', fontweight='bold')
    ax2.set_title('fig2', fontweight='bold')
    plt.show()
    

    1.2.2 输出结果如下:

    由结果可以看出,两张图fig1和fig2的尺寸大小都是800×600的。如果我们想改变其中一张图片(fig2)的大小为600×600的,如下面1.2.3和1.2.4所示:

    1.2.3 代码如下:

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize'] = (8, 6)
    # 800 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    fig1 = plt.figure(facecolor='#B0C4DE')
    fig2 = plt.figure(figsize=(6, 6), facecolor='#B0C4DE')
    ax1 = fig1.add_subplot(facecolor='white')
    ax2 = fig2.add_subplot(facecolor='white')
    ax1.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax2.bar([1, 2, 3, 4, 5, 6, 7], [2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax1.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    ax1.set_title('fig1', fontweight='bold')
    ax2.set_ylabel('历年苹果产量(kg)', fontweight='bold')
    ax2.set_title('fig2', fontweight='bold')
    plt.show()
    

    1.2.4 输出结果如下:

    由结果可以看出,两张图fig1和fig2的尺寸大小像我们预期的那样,实现了fig1为800×600,fig2为600×600。


    1.3 样式表+plt.style.use(‘xxx.mpstyle’)

    这一方法也可以同时对多个图片设置大小,也就是说,在写上这句话以后,不用在其他地方再写plt.figure(figsize=(n, n))这句语句了。输出的图片都是这种尺寸,如果中间想单独改变某一个图片的大小尺寸,可以再用plt.figure(figsize=(n, n))来指定图片大小即可。和1.2功能一样。

    1.3.1 新建文件,文件名为xxx.mpstyle,例如style.mpstyle。编辑文件内容:

    figure.figsize:8,6
    

    1.3.2 在Python文件中:

    import matplotlib.pyplot as plt
    plt.style.use('style.mpstyle')
    # 样式表文件路径
    

    如果需要对某个图片设置其他大小,使用方法一(plt.figure(figsize=(n, n)))即可。

    以上就是三种调节图片大小的方式方法。


    二、图片颜色的设定和调节

    1. 图片颜色的设定

    图片分为画布和轴域,fig是画布,ax是轴域

    1.1 设置画布颜色为"#B0C4DE",轴域颜色为"white",则代码如下:

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize'] = (8, 6)
    # 800 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    fig1 = plt.figure(facecolor='#B0C4DE')
    ax1 = fig1.add_subplot(facecolor='white')
    ax1.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax1.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    ax1.set_title('fig1', fontweight='bold')
    plt.show()
    

    1.2 输出结果如下:

    1.3 设置画布颜色为"#FF8C00",轴域颜色为"white",则代码如下:

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize'] = (8, 6)
    # 800 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    fig1 = plt.figure(facecolor='#FF8C00')
    ax1 = fig1.add_subplot(facecolor='white')
    ax1.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax1.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    ax1.set_title('fig1', fontweight='bold')
    plt.show()
    

    1.4 输出结果如下:


    三、图片标题的设定和调节

    1. 图片标题的设定

    图片标题的设定分为两种方式,一种是面向对象方式,另一种是直接方式。

    1.1 方式一,面向对象,利用fig=plt.figure(), ax=fig.add_subplot(), ax.set_title(), 代码如下:

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize'] = (8, 6)
    # 800 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    fig1 = plt.figure(facecolor='#B0C4DE')
    ax1 = fig1.add_subplot(facecolor='white')
    ax1.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax1.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    ax1.set_title('fig1', fontweight='bold')
    plt.show()
    

    1.2 输出结果如下:

    1.3 方式二,直接方式,利用plt.title(), 代码如下:

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize'] = (8, 6)
    # 800 x 600 像素(先宽度 后高度)
    # 注意这里的宽度和高度的单位是英寸,1英寸=100像素,所以要除以100
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    fig1 = plt.figure(facecolor='#B0C4DE')
    ax1 = fig1.add_subplot(facecolor='white')
    ax1.plot([2000, 3000, 3000, 5000, 2000, 1000, 800])
    ax1.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    plt.title('fig1', fontweight='bold')
    plt.show()
    

    1.4 输出结果如下:

    四、图片纵横坐标的设定和调节

    1. 图片纵横坐标的设定

    纵横坐标包括纵横坐标的刻度和刻度标签

    1.1 刻度,这里我们通过设置x轴的刻度进行说明,代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    x_labels = ['C', 'C++', 'Python', 'Java', 'Java Script', 'PHP', 'Ruby']
    y_2020 = [2000, 3000, 3000, 5000, 2000, 1000, 800]
    y_2021 = [3000, 4000, 6000, 4000, 4000, 2000, 1000]
    y_2022 = [5000, 6000, 10000, 6000, 3000, 2000, 1000]
    
    y_middle = []
    for i in range(len(y_2020)):
        y_middle.append((y_2020[i] + y_2021[i] + y_2022[i]) / 3)
    
    legend_labels = ['2020', '2021', '2022']
    y = [y_2020, y_2021, y_2022]
    fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
    ax = fig.add_subplot(facecolor='white')
    # 红橙黄绿青蓝紫
    color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']
    x_loc = np.arange(7)
    # x轴上每个刻度上能容纳的柱子的总的宽度设为0.8
    total_width = 0.8
    # 由y值可以看出x轴每个刻度上一共有3组数据, 也即3个柱子
    total_num = 3
    # 每个柱子的宽度用each_width表示
    each_width = total_width / total_num
    if total_num % 2 == 0:
        x1 = x_loc - (total_num / 2 - 1) * each_width - each_width / 2
    else:
        x1 = x_loc - ((total_num - 1) / 2) * each_width
    x_list = [x1 + each_width * i for i in range(total_num)]
    print(x_list)
    # 这里颜色设置成 橙色:"#FF8C00"
    for i in range(0, len(y)):
        ax.bar(x_list[i], y[i], color=color_list[i], width=each_width, label=legend_labels[i])
    
    # 设置x轴的刻度
    ax.set_xticks(x_loc)
    
    ax.grid(True, ls=':', color='b', alpha=0.3)
    ax.set_xlabel('编程语言类别', fontweight='bold')
    ax.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    plt.title('编程语言用户量数据分析图', fontweight='bold', pad=25)
    # 添加双轴
    ax_twinx = ax.twinx()
    ax_twinx.plot(x_loc, y_middle, linestyle='-', marker='o', markersize=3, color=color_list[1], label='Middle')
    fig.legend(loc='upper center', bbox_to_anchor=(0.5, 0.96), frameon=False, ncol=5, handlelength=0.9, handleheight=0.9, fontsize='small')
    ax_twinx.set_ylabel('Middle', fontweight='bold')
    fig.tight_layout()
    fig.subplots_adjust(top=0.9)
    plt.show()
    

    1.2 输出结果如下:

    1.3 刻度标签,这里我们通过设置x轴的刻度标签进行说明,代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    x_labels = ['C', 'C++', 'Python', 'Java', 'Java Script', 'PHP', 'Ruby']
    y_2020 = [2000, 3000, 3000, 5000, 2000, 1000, 800]
    y_2021 = [3000, 4000, 6000, 4000, 4000, 2000, 1000]
    y_2022 = [5000, 6000, 10000, 6000, 3000, 2000, 1000]
    
    y_middle = []
    for i in range(len(y_2020)):
        y_middle.append((y_2020[i] + y_2021[i] + y_2022[i]) / 3)
    
    legend_labels = ['2020', '2021', '2022']
    y = [y_2020, y_2021, y_2022]
    fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
    ax = fig.add_subplot(facecolor='white')
    # 红橙黄绿青蓝紫
    color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']
    x_loc = np.arange(7)
    # x轴上每个刻度上能容纳的柱子的总的宽度设为0.8
    total_width = 0.8
    # 由y值可以看出x轴每个刻度上一共有3组数据, 也即3个柱子
    total_num = 3
    # 每个柱子的宽度用each_width表示
    each_width = total_width / total_num
    if total_num % 2 == 0:
        x1 = x_loc - (total_num / 2 - 1) * each_width - each_width / 2
    else:
        x1 = x_loc - ((total_num - 1) / 2) * each_width
    x_list = [x1 + each_width * i for i in range(total_num)]
    print(x_list)
    # 这里颜色设置成 橙色:"#FF8C00"
    for i in range(0, len(y)):
        ax.bar(x_list[i], y[i], color=color_list[i], width=each_width, label=legend_labels[i])
    # 设置x轴的刻度
    ax.set_xticks(x_loc)
    # 设置x轴的刻度标签
    ax.set_xticklabels(x_labels)
    ax.grid(True, ls=':', color='b', alpha=0.3)
    ax.set_xlabel('编程语言类别', fontweight='bold')
    ax.set_ylabel('编程语言用户量(人数)', fontweight='bold')
    plt.title('编程语言用户量数据分析图', fontweight='bold', pad=25)
    # 添加双轴
    ax_twinx = ax.twinx()
    ax_twinx.plot(x_loc, y_middle, linestyle='-', marker='o', markersize=3, color=color_list[1], label='Middle')
    fig.legend(loc='upper center', bbox_to_anchor=(0.5, 0.96), frameon=False, ncol=5, handlelength=0.9, handleheight=0.9, fontsize='small')
    ax_twinx.set_ylabel('Middle', fontweight='bold')
    fig.tight_layout()
    fig.subplots_adjust(top=0.9)
    plt.show()
    

    1.4 输出结果如下:


    五、图片Legend(图例)的设定和调节

    1. 图片Legend(图例)的设定

    图片Legend的设定,示例如下:

    1.1 plt.legend()那一段代码中详细设置了每一个参数,感兴趣的可以去探索一下每一个参数带来的效果上的差别,代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 设置字体, 解决中文乱码问题
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 解决图像中的'-'负号的乱码问题
    plt.rcParams['axes.unicode_minus'] = False
    
    ClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]
    ClassA_M = [70, 90, 95, 85, 75, 85, 90, 100, 100, 85, 90, 95, 98, 99, 85, 88, 86, 75, 78, 90]
    ClassA_E = [90, 100, 100, 85, 75, 90, 100, 100, 75, 70, 85, 90, 95, 95, 90, 80, 70, 80, 70, 75]
    
    ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 70]
    ClassB_M = [60, 70, 75, 80, 75, 75, 65, 80, 60, 80, 90, 95, 95, 90, 80, 85, 75, 75, 60, 65]
    ClassB_E = [70, 75, 75, 70, 60, 90, 98, 95, 85, 75, 70, 60, 65, 70, 75, 75, 80, 75, 70, 80]
    
    ClassC_C = [60, 80, 100, 100, 100, 100, 90, 95, 95, 95, 85, 95, 95, 95, 95, 80, 95, 90, 90, 90]
    ClassC_M = [100, 100, 100, 95, 95, 95, 95, 95, 90, 85, 90, 90, 90, 95, 90, 95, 95, 95, 95, 90]
    ClassC_E = [80, 90, 100, 100, 100, 90, 95, 95, 95, 90, 95, 90, 95, 90, 95, 90, 95, 90, 95, 85]
    
    fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
    ax = fig.add_subplot(facecolor='white')
    
    # 每个刻度标签下有几个group就有几个箱子
    group_dataA = [ClassA_C, ClassA_M, ClassA_E]
    
    boxplot_dataA_CME = [ClassA_C, ClassA_M, ClassA_E]
    boxplot_dataB_CME = [ClassB_C, ClassB_M, ClassB_E]
    boxplot_dataC_CME = [ClassC_C, ClassC_M, ClassC_E]
    
    boxplot_dataABC_C = [ClassA_C, ClassB_C, ClassC_C]
    boxplot_dataABC_M = [ClassA_M, ClassB_M, ClassC_M]
    boxplot_dataABC_E = [ClassA_E, ClassB_E, ClassC_E]
    
    # 橙绿蓝
    color_list = ['#FF8C00', '#00FF00', '#0000FF']
    
    x_labels = ['甲班', '乙班', '丙班']
    legend_labels = ['语文', '数学', '英语']
    length = len(x_labels)
    x_loc = np.arange(length)
    
    labels = ['语文', '数学', '英语']
    
    group_number = len(group_dataA)
    total_width = 0.6
    box_total_width = total_width * 0.65
    interval_total_width = total_width * 0.35
    box_width = box_total_width / group_number
    
    ###################################################
    if group_number == 1:
        interval_width = interval_total_width
    else:
        interval_width = interval_total_width / (group_number - 1)
    
    ###################################################
    if group_number % 2 == 0:
        x1_box = x_loc - (group_number / 2 - 1) * box_width - box_width / 2 - (group_number / 2 - 1) * interval_width - interval_width / 2
    else:
        x1_box = x_loc - ((group_number - 1) / 2) * box_width - ((group_number - 1) / 2) * interval_width
    x_list_box = [x1_box + box_width * i + interval_width * i for i in range(group_number)]
    
    x_list_box_new = []
    
    for i in range(len(group_dataA)):
        for j in range(len(group_dataA)):
            x_list_box_new.append(x_list_box[i][j])
    x_list_box_new = sorted(x_list_box_new)
    
    x_list_box_final = []
    for i in range(len(group_dataA)):
        x_list_box_final.append(x_list_box_new[3 * i:3 * (i + 1)])
    
    bplot1 = plt.boxplot(boxplot_dataA_CME, positions=x_list_box_final[0], widths=box_width,
                         patch_artist=True, showfliers=False, zorder=1, labels=labels)
    
    for patch, color in zip(bplot1['boxes'], color_list):
        patch.set_edgecolor(color)
        patch.set_facecolor('None')
    
    bplot2 = plt.boxplot(boxplot_dataB_CME, positions=x_list_box_final[1], widths=box_width,
                         patch_artist=True, showfliers=False, zorder=1, labels=labels)
    
    for patch, color in zip(bplot2['boxes'], color_list):
        patch.set_edgecolor(color)
        patch.set_facecolor('None')
    
    bplot3 = plt.boxplot(boxplot_dataC_CME, positions=x_list_box_final[2], widths=box_width,
                         patch_artist=True, showfliers=False, zorder=1, labels=labels)
    
    for patch, color in zip(bplot3['boxes'], color_list):
        patch.set_edgecolor(color)
        patch.set_facecolor('None')
    
    ########################################################################
    ########################################################################
    boxplot_data = [boxplot_dataABC_C, boxplot_dataABC_M, boxplot_dataABC_E]
    
    for i in range(len(boxplot_data)):
        # boxplot_data_num用来统计每组数据的长度, 画scatter图时会用到
        boxplot_data_num = []
        for j in boxplot_data[i]:
            boxplot_data_num_tmp = len(j)
            boxplot_data_num.append(boxplot_data_num_tmp)
    
        spotx = []
        for j_spotx, k_spotx in zip(x_list_box[i], boxplot_data_num):
            spotx_tmp = [j_spotx] * k_spotx
            spotx.append(spotx_tmp)
    
        ax.scatter(spotx, boxplot_data[i], c=color_list[i], s=30, zorder=2)
    ########################################################################
    ########################################################################
    
    ax.grid(True, ls=':', color='b', alpha=0.3)
    plt.title('甲乙丙各班语文/数学/英语成绩Box_chart分析', fontweight='bold')
    ax.set_xticks(x_loc)
    ax.set_xticklabels(x_labels, rotation=90)
    ax.set_ylabel('分数/百分制', fontweight='bold')
    ################################################################################################################
    ################################################################################################################
    plt.legend(handles=bplot1['boxes'], title='学科', loc='center left', bbox_to_anchor=(1.02, 0.5),
               facecolor='None', edgecolor='#000000', frameon=True, ncol=1, markerscale=3, borderaxespad=0,
               handletextpad=0.1, fontsize='x-large', title_fontsize='x-large', labels=legend_labels)
    ################################################################################################################
    ################################################################################################################
    plt.xticks(weight='bold')
    plt.yticks(weight='bold')
    fig.tight_layout()
    plt.show()
    

    1.2 输出结果如下:


    六、总结

    本文主要讲了关于图片的大小、颜色、标题、纵横坐标、画布和绘图区域背景颜色、Legend(图例)等参数设置的方式方法,希望对Python可视化绘图领域感兴趣的有所帮助。

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python Matplotlib数据可视化绘图之参数设置详解:图片大小、颜色、标题、坐标轴、画布和绘图区域背景颜色以及Legend(图例)

    发表评论