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

Python Matplotlib數(shù)據(jù)可視化繪圖之(三)————散點圖

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

文本


前言

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


一、所用到的模塊

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

二、單一顏色的普通不分組散點圖

1.示例數(shù)據(jù)如下

表格如下(示例):


班別 語文成績(分/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)在需要把表格中的數(shù)據(jù)繪制成散點圖,從而進一步分析每個班級的學生成績情況。

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

# A班的語文成績
ClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]
# B班的語文成績
ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 70]
# C班的語文成績
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']

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

scatter_plot_data = [ClassA_C, ClassB_C, ClassC_C]

# 每個數(shù)據(jù)(scatter_plot_data里面的每個數(shù)據(jù))對應的x軸的坐標值
spotx = []
for i, j in zip(x_loc, range(len(scatter_plot_data))):
    spotx_tmp = [i] * len(scatter_plot_data[j])
    spotx.append(spotx_tmp)

ax.scatter(spotx, scatter_plot_data, c=color_list[0], s=30)

ax.grid(True, ls=':', color='b', alpha=0.3)
plt.title('甲乙丙各班語文成績Scatter_chart分析', fontweight='bold')
ax.set_xticks(x_loc)
ax.set_xticklabels(x_labels, rotation=90)
ax.set_ylabel('分數(shù)/百分制', fontweight='bold')

# 設置x, y坐標軸的刻度標簽字體加粗
plt.xticks(weight='bold')
plt.yticks(weight='bold')

fig.tight_layout()
plt.show()

輸出結(jié)果如下:

python散點圖,matplotlib,python,開發(fā)語言,pycharm,numpy

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

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

三、多種顏色的普通不分組散點圖

1.示例數(shù)據(jù)如下

表格如下(示例):


班別 語文成績(分/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)在需要把表格中的數(shù)據(jù)繪制成散點圖,從而進一步分析每個班級的學生成績情況。

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

# A班的語文成績
ClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]
# B班的語文成績
ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 30]
# C班的語文成績
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']

# 'o':圓圈; 'D':鉆石; 's':正方形
marker_list = ['o', 'D', 's']

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

scatter_plot_data = [ClassA_C, ClassB_C, ClassC_C]

# 每個數(shù)據(jù)(scatter_plot_data里面的每個數(shù)據(jù))對應的x軸的坐標值
spotx = []
for i, j in zip(x_loc, range(len(scatter_plot_data))):
    spotx_tmp = [i] * len(scatter_plot_data[j])
    spotx.append(spotx_tmp)

# 每個數(shù)據(jù)(scatter_plot_data里面的每個數(shù)據(jù))對應的marker的顏色
color_list_x = []
color_list_x_final = []
for i, j in zip(color_list, range(len(scatter_plot_data))):
    color_list_x_tmp = [i] * len(scatter_plot_data[j])
    color_list_x.append(color_list_x_tmp)
for i in color_list_x:
    for j in i:
        color_list_x_final.append(j)

ax.scatter(spotx, scatter_plot_data, c=color_list_x_final, s=30, marker='o')

ax.grid(True, ls=':', color='b', alpha=0.3)
plt.title('甲乙丙各班語文成績Scatter_chart分析', fontweight='bold')
ax.set_xticks(x_loc)
ax.set_xticklabels(x_labels, rotation=90)
ax.set_ylabel('分數(shù)/百分制', fontweight='bold')

# 設置x, y坐標軸的刻度標簽字體加粗
plt.xticks(weight='bold')
plt.yticks(weight='bold')

fig.tight_layout()
plt.show()

輸出結(jié)果如下:

python散點圖,matplotlib,python,開發(fā)語言,pycharm,numpy

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

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())
# 其中picture_name為給圖片命的名字
2.1.2 Case2:
import matplotlib.pyplot as plt

# 設置字體, 解決中文亂碼問題
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 解決圖像中的'-'負號的亂碼問題
plt.rcParams['axes.unicode_minus'] = False

# A班的語文成績
ClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]
# B班的語文成績
ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 30]
# C班的語文成績
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']

# 'o':圓圈; 'D':鉆石; 's':正方形
marker_list = ['o', 'D', 's']

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

scatter_plot_data = [ClassA_C, ClassB_C, ClassC_C]

# 每個數(shù)據(jù)(scatter_plot_data里面的每個數(shù)據(jù))對應的x軸的坐標值
spotx = []
for i, j in zip(x_loc, range(len(scatter_plot_data))):
    spotx_tmp = [i] * len(scatter_plot_data[j])
    spotx.append(spotx_tmp)

#############################################################
#############################################################
# 每個數(shù)據(jù)(scatter_plot_data里面的每個數(shù)據(jù))對應的marker的形狀
marker_list_x = []
marker_list_x_final = []
for i, j in zip(marker_list, range(len(scatter_plot_data))):
    marker_list_x_tmp = [i] * len(scatter_plot_data[j])
    marker_list_x.append(marker_list_x_tmp)
for i in marker_list_x:
    for j in i:
        marker_list_x_final.append(j)
#############################################################
#############################################################

# 每個數(shù)據(jù)(scatter_plot_data里面的每個數(shù)據(jù))對應的marker的顏色
color_list_x = []
color_list_x_final = []
for i, j in zip(color_list, range(len(scatter_plot_data))):
    color_list_x_tmp = [i] * len(scatter_plot_data[j])
    color_list_x.append(color_list_x_tmp)
for i in color_list_x:
    for j in i:
        color_list_x_final.append(j)

ax.scatter(spotx, scatter_plot_data, c=color_list_x_final, s=30, marker=marker_list_x_final)

ax.grid(True, ls=':', color='b', alpha=0.3)
plt.title('甲乙丙各班語文成績Scatter_chart分析', fontweight='bold')
ax.set_xticks(x_loc)
ax.set_xticklabels(x_labels, rotation=90)
ax.set_ylabel('分數(shù)/百分制', fontweight='bold')

# 設置x, y坐標軸的刻度標簽字體加粗
plt.xticks(weight='bold')
plt.yticks(weight='bold')

fig.tight_layout()
plt.show()

輸出結(jié)果如下:

python散點圖,matplotlib,python,開發(fā)語言,pycharm,numpy

注意:這里我們可以看到此時程序運行的時候報錯,而2.1.2 Case2 與2.1.1 Case1 相比僅僅只是多了如下幾行代碼:
#############################################################
#############################################################
# 每個數(shù)據(jù)(scatter_plot_data里面的每個數(shù)據(jù))對應的marker的形狀
marker_list_x = []
marker_list_x_final = []
for i, j in zip(marker_list, range(len(scatter_plot_data))):
marker_list_x_tmp = [i] * len(scatter_plot_data[j])
marker_list_x.append(marker_list_x_tmp)
for i in marker_list_x:
for j in i:
marker_list_x_final.append(j)
#############################################################
#############################################################
這幾行代碼的目的本來是想給每組數(shù)據(jù)(scatter_plot_data里面包含三組數(shù)據(jù):[ClassA_C, ClassB_C, ClassC_C])賦予不同的marker形狀類型,但是這樣行不通,原因是ax.scatter()在一次繪圖中只能接受一種marker類型,若想賦予多種marker類型,需要多次調(diào)用ax.scatter(),但這顯然不符合我們的本次繪圖的主要意圖。這種情況的繪圖詳見本文中第四部分所講內(nèi)容。



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

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

四、多種顏色的普通分組散點圖

1.示例數(shù)據(jù)如下

表格如下(示例):


班別 語文成績(分/100分制) 數(shù)學成績(分/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)在需要把表格中的數(shù)據(jù)繪制成散點圖,從而進一步分析每個班級的學生成績情況。

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_dataA = [ClassA_C, ClassA_M, ClassA_E]

scatter_dataABC_C = [ClassA_C, ClassB_C, ClassC_C]
scatter_dataABC_M = [ClassA_M, ClassB_M, ClassC_M]
scatter_dataABC_E = [ClassA_E, ClassB_E, ClassC_E]

# 橙綠藍
color_list = ['#FF8C00', '#00FF00', '#0000FF']

# 'o':圓圈; 'D':鉆石; 's':正方形
marker_list = ['o', 'D', 's']

x_labels = ['甲班', '乙班', '丙班']
legend_labels = ['語文', '數(shù)學', '英語']
length = len(x_labels)
x_loc = np.arange(length)

# 統(tǒng)計每個刻度標簽下有幾個group
group_number = len(group_dataA)

total_width = 0.5
scatter_total_width = total_width * 0.65
interval_total_width = total_width * 0.35
scatter_width = scatter_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_scatter = x_loc - (group_number / 2 - 1) * scatter_width - scatter_width / 2 - (group_number / 2 - 1) * interval_width - interval_width / 2
else:
    x1_scatter = x_loc - ((group_number - 1) / 2) * scatter_width - ((group_number - 1) / 2) * interval_width
x_list_scatter = [x1_scatter + scatter_width * i + interval_width * i for i in range(group_number)]
###################################################

scatter_data = [scatter_dataABC_C, scatter_dataABC_M, scatter_dataABC_E]

for i in range(len(scatter_data)):
    ##################################################################
    # scatter_data_num用來統(tǒng)計每組數(shù)據(jù)的長度, 畫scatter圖時會用到
    scatter_data_num = []
    for j in scatter_data[i]:
        scatter_data_num_tmp = len(j)
        scatter_data_num.append(scatter_data_num_tmp)
    ##################################################################
    # 畫scatter
    # spotx是每一組scatter所有的點的橫坐標
    spotx = []
    for j_spotx, k_spotx in zip(x_list_scatter[i], scatter_data_num):
        spotx_tmp = [j_spotx] * k_spotx
        spotx.append(spotx_tmp)
    # print('$$$spotx:', spotx)
    ax.scatter(spotx, scatter_data[i], c=color_list[i], s=30, label=legend_labels[i], marker=marker_list[i])
    ##################################################################

ax.grid(True, ls=':', color='b', alpha=0.3)
plt.title('甲乙丙各班語文/數(shù)學/英語成績Scatter_chart分析', fontweight='bold')
ax.set_xticks(x_loc)
ax.set_xticklabels(x_labels, rotation=90)
ax.set_ylabel('分數(shù)/百分制', 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()

輸出結(jié)果如下:

python散點圖,matplotlib,python,開發(fā)語言,pycharm,numpy

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

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

五、總結(jié)

以上就是今天要講的內(nèi)容,本文詳細介紹了各種散點圖的繪制過程和方法,并用實例給大家演示了具體的實現(xiàn)代碼和實現(xiàn)邏輯,希望對大家學習畫散點圖有幫助。文章來源地址http://www.zghlxwxcb.cn/news/detail-729259.html

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

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包