国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python Matplotlib數據可視化繪圖之(二)————箱線圖

這篇具有很好參考價值的文章主要介紹了Python Matplotlib數據可視化繪圖之(二)————箱線圖。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

本文我們主要介紹利用Python中的Matplotlib模塊進行幾種箱線圖的畫法,包括整張圖片只有一種顏色的不分組箱線圖、整張圖片有好幾種顏色的不分組箱線圖、整張圖片有好幾種顏色的分組箱線圖等。


一、所用到的模塊

主要利用Python中的Matplotlib模塊完成該功能。

二、單一顏色的普通不分組箱線圖

1.示例數據如下

表格如下(示例):


班別 語文成績(分/100分制)
甲班 80
90
75
65
85
95
100
100
80
70
90
95
85
86
92
90
95
90
85
100
乙班 60
70
80
65
75
80
73
75
85
90
95
65
70
75
80
85
95
85
80
70
丙班 60
80
100
100
100
100
90
95
95
95
85
95
95
95
95
80
95
90
90
90

現(xiàn)在需要把表格中的數據繪制成箱線圖,從而進一步分析每個班級的學生成績情況。

2.代碼如下

2.1 代碼如下(示例):

2.1.1 Case1:
import matplotlib.pyplot as plt

# 設置字體, 解決中文亂碼問題
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]
ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 70]
ClassC_C = [60, 80, 100, 100, 100, 100, 90, 95, 95, 95, 85, 95, 95, 95, 95, 80, 95, 90, 90, 90]

fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
ax = fig.add_subplot(facecolor='white')
# 紅橙黃綠青藍紫
color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']

x_labels = ['甲班', '乙班', '丙班']
x_loc = [1, 2, 3]

boxplot_data = [ClassA_C, ClassB_C, ClassC_C]

ax.boxplot(boxplot_data, positions=x_loc, widths=0.4, patch_artist=True,
           medianprops={'lw': 1, 'color': '#FF8C00'},
           boxprops={'facecolor': 'None', 'edgecolor': '#FF8C00'},
           capprops={'lw': 1, 'color': '#FF8C00'},
           whiskerprops={'ls': '-', 'lw': 1, 'color': '#FF8C00'},
           showfliers=True,
           flierprops={'marker': 'o', 'markerfacecolor': '#FF8C00', 'markeredgecolor': '#FF8C00', 'markersize': 8})
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')
# 設置x, y坐標軸的刻度標簽字體加粗
plt.xticks(weight='bold')
plt.yticks(weight='bold')
fig.tight_layout()
plt.show()

輸出結果如下:
Python Matplotlib數據可視化繪圖之(二)————箱線圖

注意:如果想保存這種畫布帶背景顏色且軸域也帶背景顏色的圖片(在此圖中,畫布[fig]背景顏色為#B0C4DE,軸域[ax]背景顏色為white),需要使用以下語句保存到本地,具體語句如下:

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())
# 其中picture_name為給圖片命的名字

三、多種顏色的普通不分組箱線圖

1.示例數據如下

表格如下(示例):


班別 語文成績(分/100分制)
甲班 80
90
75
65
85
95
100
100
80
70
90
95
85
86
92
90
95
90
85
100
乙班 60
70
80
65
75
80
73
75
85
90
95
65
70
75
80
85
95
85
80
30
丙班 60
80
100
100
100
100
90
95
95
95
85
95
95
95
95
80
95
90
90
90

現(xiàn)在需要把表格中的數據繪制成箱線圖,從而進一步分析每個班級的學生成績情況。

2.代碼如下

2.1 代碼如下(示例):

2.1.1 Case1:
import matplotlib.pyplot as plt

# 設置字體, 解決中文亂碼問題
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]
ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 30]
ClassC_C = [60, 80, 100, 100, 100, 100, 90, 95, 95, 95, 85, 95, 95, 95, 95, 80, 95, 90, 90, 90]

fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
ax = fig.add_subplot(facecolor='white')
# 橙綠藍
color_list = ['#FF8C00', '#00FF00', '#0000FF']
# marker的形狀列表
marker_list = ['o', 'D', 's']
# marker的大小列表
markersize_list = [3, 8, 13]

x_labels = ['甲班', '乙班', '丙班']
x_loc = [1, 2, 3]

boxplot_data = [ClassA_C, ClassB_C, ClassC_C]
print(len(boxplot_data))

bp = ax.boxplot(boxplot_data, positions=x_loc, widths=0.4, patch_artist=True, showfliers=True)

for i in range(len(bp['boxes'])):
    bp['boxes'][i].set(facecolor='None', edgecolor=color_list[i])

    # 頂端, 末端兩條線; 頂端:0, 2, 4; 末端:1, 3, 5
    bp['caps'][2 * i].set(color=color_list[i])
    bp['caps'][2 * i + 1].set(color=color_list[i])

    # 中位數那條線
    bp['medians'][i].set(color=color_list[i])

    # 頂端, 末端兩條須; 頂端:0, 2, 4; 末端:1, 3, 5
    bp['whiskers'][2 * i].set(color=color_list[i])
    bp['whiskers'][2 * i + 1].set(color=color_list[i])

    # 分別設置異常點的形狀, 填充顏色, 輪廓顏色, 大小
    bp['fliers'][i].set_marker(marker_list[i])
    bp['fliers'][i].set_markerfacecolor(color_list[i])
    bp['fliers'][i].set_markeredgecolor(color_list[i])
    bp['fliers'][i].set_markersize(markersize_list[i])

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.xticks(weight='bold')
plt.yticks(weight='bold')
fig.tight_layout()
plt.show()

輸出結果如下:

Python Matplotlib數據可視化繪圖之(二)————箱線圖

注意:如果想保存這種畫布帶背景顏色且軸域也帶背景顏色的圖片(在此圖中,畫布[fig]背景顏色為#B0C4DE,軸域[ax]背景顏色為white),需要使用以下語句保存到本地,具體語句如下:

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())
# 其中picture_name為給圖片命的名字

四、多種顏色的普通分組箱線圖和散點圖的疊加圖

1.示例數據如下

表格如下(示例):


班別 語文成績(分/100分制) 數學成績(分/100分制) 英語成績(分/100分制)
甲班 80 70 90
90 90 100
75 95 100
65 85 85
85 75 75
95 85 90
100 90 100
100 100 100
80 100 75
70 85 70
90 90 85
95 95 90
85 98 95
86 99 95
92 85 90
90 88 80
95 86 70
90 75 80
85 78 70
100 90 75
乙班 60 60 70
70 70 75
80 75 75
65 80 70
75 75 60
80 75 90
73 65 98
75 80 95
85 60 85
90 80 75
95 90 70
65 95 60
70 95 65
75 90 70
80 80 75
85 85 75
95 75 80
85 75 75
80 60 70
70 65 80
丙班 60 100 80
80 100 90
100 100 100
100 95 100
100 95 100
100 95 90
90 95 95
95 95 95
95 90 95
95 85 90
85 90 95
95 90 90
95 90 95
95 95 90
95 90 95
80 95 90
95 95 95
90 95 90
90 95 95
90 90 85

現(xiàn)在需要把表格中的數據繪制成箱線圖,從而進一步分析每個班級的學生成績情況。

2.代碼如下

2.1 代碼如下(示例):

2.1.1 Case1:
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_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)

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)]


boxplot_data = [boxplot_dataABC_C, boxplot_dataABC_M, boxplot_dataABC_E]

for i in range(len(boxplot_data)):
    #####################################################################
    # 先畫boxplot
    #######################
    # boxplot_data_num用來統(tǒng)計每組數據的長度, 畫scatter圖時會用到
    boxplot_data_num = []
    for j in boxplot_data[i]:
        boxplot_data_num_tmp = len(j)
        boxplot_data_num.append(boxplot_data_num_tmp)
    #######################
    ax.boxplot(boxplot_data[i], positions=x_list_box[i], widths=box_width, patch_artist=True,
               medianprops={'lw': 1, 'color': color_list[i]},
               boxprops={'facecolor': 'None', 'edgecolor': color_list[i]},
               capprops={'lw': 1, 'color': color_list[i]},
               whiskerprops={'ls': '-', 'lw': 1, 'color': color_list[i]},
               showfliers=False, zorder=1)
    # flierprops = {'marker': 'o', 'markerfacecolor': color_list[i], 'markeredgecolor': color_list[i], 'markersize': 8}
    #####################################################################
    # 再畫scatter
    # 將每一組箱線圖統(tǒng)計的所有點繪制在圖上
    # spotx是每一組箱線圖所有的點的橫坐標
    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)
    # print('$$$spotx:', spotx)
    ax.scatter(spotx, boxplot_data[i], c=color_list[i], s=30, label=legend_labels[i], 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(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')
################################################################################################################
################################################################################################################
plt.xticks(weight='bold')
plt.yticks(weight='bold')
fig.tight_layout()
plt.show()

輸出結果如下:
Python Matplotlib數據可視化繪圖之(二)————箱線圖

注意:如果想保存這種畫布帶背景顏色且軸域也帶背景顏色的圖片(在此圖中,畫布[fig]背景顏色為#B0C4DE,軸域[ax]背景顏色為white),需要使用以下語句保存到本地,具體語句如下:

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())
# 其中picture_name為給圖片命的名字

五、總結

以上就是今天要講的內容,本文詳細介紹了各種箱線圖的繪制過程和方法,并用實例給大家演示了具體的實現(xiàn)代碼和實現(xiàn)邏輯,希望對大家學習畫箱線圖有幫助。最后我提出以下幾個問題:
(1)為什么我不直接在ax.boxplot()函數中直接用labels這個參數生成legend,反而要利用ax.scatter()函數中的label參數生成legend?
(2)還有什么方法能夠生成箱線圖的圖例?
(3)箱線圖的圖例生成方法和柱狀圖、折線圖、餅圖、直方圖、散點圖等圖的圖例生成方法有什么不同之處或特別之處?
這些將在后面將要寫的一篇博文名為《Python Matplotlib數據可視化繪圖之(五)————箱線圖與散點圖的疊加圖》的文章中詳細講解文章來源地址http://www.zghlxwxcb.cn/news/detail-453993.html

到了這里,關于Python Matplotlib數據可視化繪圖之(二)————箱線圖的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包