Python-matplotlib: 散點圖的繪製

2021-02-13 EasyShu

本期推文的主要內容是散點圖的繪製教程,所使用的數據關於全球教育水平劃分的師生比例,涉及到的包主要為matplotlib和seaborn,當然用於數據處理分析的pandas和 numpy也必不可少。
本文涉及的數據主要包括兩種,一種為全球各大洲的網格數據,用於繪製另類散點圖例,一種為全球各州的教育水平的師生比例,用於散點圖的繪圖。各大洲的網格數據如下(部分):如紅框所示,為所需要的數據,用於繪圖。

全球各大洲師生比例數據如下(部分):所需文章為student_ratio_count 。

接下來將兩個數據進行匹配合併,這裡需指出下:兩個數據都有關於國家編碼的列(country_code和alpha.3),利用pandas的merger方法就可實現兩個數據的合併。
和一般的繪圖不同,稍微複雜的突變就需要自己根據需求進行特定數據的構造。這裡所構造的數據詳細如下:通過pandas 的mean()方法就可實現全球教育水平的平均值,如下:
world_avg = 23.518193030303

order=["Africa", "Oceania","Asia","South America","North America","Europe"]palette=["#0076BB", "#152769","#1AB6AF", "#E9E4A6","#FF3100","#E9A17C"]region_color = dict(zip(order,palette))region_color

region_y = {'Africa':1,'Oceania':2,'Asia':3,'South America':4,'North America':5,'Europe':6}sactter_line = student[['student_ratio_cont','region']].drop_duplicates()sactter_line["region_y"] = [region_y[i]-1 for i in sactter_line['region']]sactter_line

legend_data = student[['x','y','region']]legend_data.head()

本文的可視化繪製過程涉及seaborn的stripplot()方法,所需的庫、總體設置及用於繪製「抖動」的散點圖(類似ggplot2的position_jitter()),其目的就是為了防止散點重疊。如下:
import seaborn as snsimport matplotlib.lines as mlinesfrom mpl_toolkits.axes_grid1.inset_locator import inset_axesfrom matplotlib.patches import Rectangle
plt.rcParams['font.family'] = ['Roboto Mono']fig, ax = plt.subplots(figsize=(10,6),dpi = 200,facecolor='#323332',edgecolor='#323332')ax.set_facecolor("#323332")

sns.stripplot(x="student_ratio", y="region",order=order,palette=palette, data=student,              size = 8,alpha=.4,edgecolor = "white",linewidth=.8,zorder=0,ax=ax)

# #添加 點線 圖層def newline(p1, p2):    ax = plt.gca()    l = mlines.Line2D([p1[0],p2[0]], [p1[1],p2[1]],color='#FFFFFF',                      lw=1.8,zorder = 0)    ax.add_line(l)return lfor p1, p2 in zip(sactter_line['student_ratio_cont'], sactter_line['region_y']):    newline([world_avg,p2], [p1,p2])#添加散點for i,j,c in zip(sactter_line['student_ratio_cont'], sactter_line['region_y'],sactter_line['region']):    ax.scatter(i,j,c=region_color[c],s = 170,ec = 'white',lw=.8,zorder=1)
ax.tick_params(labelsize = 15,direction = 'out',colors = '#FFFFFF')ax.set_xticks(np.arange(-5,100,10))#設置軸脊顏色及寬度for spine in ['top','bottom','left','right']: ax.spines[spine].set_color("#FFFFFF") ax.spines[spine].set_linewidth(1.5)#隱藏xy軸的labelax.set_xlabel('')ax.set_ylabel('')ax.invert_yaxis()

#添加另類圖例axins = inset_axes(ax, width=2.3, height=1.5)for x,y,c in zip(legend_data.x,legend_data.y,legend_data.region):    rect = Rectangle((x+1,y+1),width=.5,height=.5, color=region_color[c])    axins.add_patch(rect)axins.set_xticks([])axins.set_xlim(left=-5,right=35)axins.set_yticks([])axins.set_ylim(top=30,bottom=-5)axins.invert_yaxis()axins.axis('off')

這一步用到了matplotlib的axes插入方法,繪製大小圖或者中國地圖十段線部分均可用此方法進行繪製。這裡也用到了之前構造的lengend_data、region_color,然後使用 Rectangle()繪製矩形,再使用 axins.add_patch(rect)方法進行多矩形繪製。ggplot2的geom_tile()也可實現矩形圖表的繪製。
ax.annotate(s="Worldwide average:\n{} students per teacher".format(round(world_avg,1)),            xy=(world_avg,4.5),xytext=(40,5),ha="center",va="center",size=12,c='#FFFFFF',            family='Poppins',             arrowprops=dict(arrowstyle="->",                            connectionstyle="arc3,rad=-0.3",fc="gray",ec='#FFFFFF')           )

如果沒用採用地圖圖例的繪製,而是一般的散點圖圖例,效果如下:

#添加圖例region_legend = ax.legend(fontsize=10,markerscale =1.2,title = 'Region',frameon=False,                         title_fontsize = 15)#region_legend.get_title().set_fontsize(fontsize = 13)#面向對象region_legend.get_title().set_color("#FFFFFF")region_legend.get_frame().set_facecolor('#323332')#修改圖例屬性顏色:圖例文字顏色設置for text in region_legend.get_texts():    text.set_color('#FFFFFF')

Matplotlib對繪製大多數圖表還是比較友好的,也是比較容易定製化自己的繪圖需求(需熟悉太多的繪圖函數),但涉及統計圖表的繪製,可以結合seaborn進行繪製,使繪圖事半功倍哦!!繪圖的顏色搭配對繪圖結果至關重要,自己現階段也是在摸索和模仿,有好的顏色搭配學習網站或者資源,可以進群交流。本文能力有限,有錯誤的地方或者不理解的地方,可以後臺諮詢或者進行討論,期待你的加入。

如需聯繫EasyShu團隊

請加微信:EasyCharts

微信公眾號【EasyShu】博文代碼集合地址

https://github.com/Easy-Shu/EasyShu-WeChat


《Python數據可視化之美》-配套原始碼下載地址

https://github.com/Easy-Shu/Beautiful-Visualization-with-python

《R語言數據可視化之美》-增強版配套原始碼下載地址

https://github.com/Easy-Shu/Beautiful-Visualization-with-R

相關焦點

  • Python-matplotlib 學術型散點圖繪製
    本期推文只要介紹學術散點圖的繪製教程,涉及的內容主要還是matplotlib散點圖的繪製,只不過添加了相關性分析,擬合關係式和顏色映射散點密度(大多數的英文文章中多出現此類圖表
  • Python-matplotlib 學術型散點圖繪製【附源碼】
    ,涉及的內容主要還是matplotlib散點圖的繪製,只不過添加了相關性分析,擬合關係式和顏色映射散點密度(大多數的英文文章中多出現此類圖表)。首先我們看一下下面這幅圖:(圖片來源於網絡,如有侵權,望告知,刪除,謝謝)從該圖可以看出,這是用ggplot2繪製的相關性散點圖(別問我為啥,第一感覺就是
  • Matplotlib圖鑑|基礎散點圖
    基礎散點圖-009下面我們就來講解如何繪製第一個圖,注意,代碼在以下環境全部通過測試:因版本不同,可能會有部分語法差異,如有報錯首先導入相關庫並查看版本import matplotlibprint(matplotlib.__version__) #查看Matplotlib版本import pandas as pdprint(pd.
  • Matplotlib圖鑑|基礎散點圖1-3
    大家好,從今天起,我們將開始更新Matplotlib基礎散點圖圖鑑。本文為基礎散點圖第一篇,將講解以下三個簡單的柱狀圖繪製方法散點圖繪製說明因本文是散點圖的開篇,因此先簡單講一下散點圖的繪圖原理,在Matplotlib中,柱狀圖可以使用plt.scatter製作散點圖。
  • Python中使用Matplotlib繪製3D圖形實例
    來自:Linux迷網址:https://www.linuxmi.com/python-matplotlib-3d.html3D圖形能給我們對數據帶來更加深入地理解
  • Python中使用Matplotlib繪製3D圖形示例
    Python的matplotlib庫就包含了豐富的3D繪圖工具。3D圖形在數據分析、數據建模、圖形和圖像處理等領域中都有著廣泛的應用,下面將給大家介紹一下如何在Python中使用 matplotlib進行3D圖形的繪製,包括3D散點、3D表面、3D輪廓、3D直線(曲線)以及3D文字等的繪製。
  • Hans Rosling Charts Matplotlib 繪製
    (5)第 63-78 行為對多類別散點圖圖例的製作(多數類似教程忽略了圖例的添加,導致繪製的圖表不夠完善),但隨著Matplotlib 3.1版本的發布,PathCollection新增加一個方法legend_elements(),實現以自動方式獲取散點圖的句柄和標籤,極大簡化了散點圖圖例的創建
  • Python matplotlib繪製折線圖
    一、安裝matplotlibpip install matplotlib -i https:二、matplotlib圖像簡介matplotlib的圖像分為三層,容器層、輔助顯示層和圖像層。1.plot(): matplotlib中繪製折線圖的函數。可以傳入很多參數,一般傳入兩個列表,分別是折線圖中的x值和y值。上面的例子中用了NBA2020年季後賽James的得分數據。在上面的圖表中,x坐標值中有中文,首次使用matplotlib繪圖時中文無法正常顯示。
  • Python-Matplotlib:動態條形圖
    抱著學習的目的,本期推文使用python可視化包matplotlib進行Bar Chart Race的繪製,這也是繼上兩篇動態圖表教程後最後一篇matplotlib動態圖表教程(畢竟原理都差不多,最多就是數據處理方法的不同,後面遇到好的動態作品,還是會推出matplotlib教程的)
  • 【Python基礎】Matplotlib如何繪製多個子圖的幾種方法
    繪製多子圖使用Matplotlib繪圖單圖相對比較容易,但有時候需要將多張圖放在一張圖表裡,這就用到子圖操作。 as plt%matplotlib inline# 畫第1個圖:折線圖x=np.arange(1,100)plt.subplot(221)plt.plot(x,x*x)# 畫第2個圖:散點圖plt.subplot(222)plt.scatter(np.arange(0,10), np.random.rand(10))# 畫第3
  • Python-seaborn 基礎圖表繪製-散點圖
    作者:寧海濤 來源:DataCharm上期推文推出第一篇基礎圖表繪製-R-ggplot2 基礎圖表繪製-散點圖 的繪製推文,得到了很多小夥伴的喜歡,也是我更加想使這個系列做的更加完善和系統,我之前也有說過,會推出Python和R的兩個版本繪製教程,接下來我們就推出基礎散點圖的Python繪製版本。
  • [神奇的Python可視化]在Matplotlib上面繪製圖片標記
    所謂的天下苦matplotlib散點圖符號久矣……眾所周知的是matplotlib的散點圖符號是固定的,如下所示:markertype含義當然,matplotlib還支持LaTeX 符號,也就是用來寫數學公式的符號,比如:但是總感覺還是不夠的樣子,比如我們要在圖上顯示機場,更希望的是用下面這樣的圖標:如果用matplotlib默認的圖標繪製的效果應該是這樣的:那麼我們用上面那個機場圖標
  • Python-matplotlib 多子圖共用colorbar
    在推出散點顏色密度圖的ma
  • 十分鐘上手matplotlib,開啟你的python可視化
    -matplotlib是一個python 2D繪圖庫,利用它可以畫出許多高質量的圖像。只需幾行代碼即可生成直方圖,條形圖,餅圖,散點圖等。Matplotlib可用於Python腳本,Python和IPython shell,Jupyter筆記本,Web應用程式伺服器和四個圖形用戶界面工具包。
  • Python-matplotlib 箱線圖繪製
    箱線圖(Boxplot)  是一種用作顯示一組數據分散情況資料的統計圖表,本期推文就如何使用matplotlib
  • Matplotlib入門(繪製關係圖)
    一.散點圖與氣泡圖import numpy as npimport
  • Python-Matplotlib,動態柱形圖繪製!
    本期推文,將介紹使用Python-matplotlib 繪製動態柱形圖的教程推文,主要涉及的知識點如下:matplotlib的animation模塊製作動態圖animation模塊製作動態圖在之前的推文中有轉載過優秀的Python第三方包繪製動態圖,可以做到使用較少的代碼繪製出優秀的動態圖表
  • Python中利用Matplotlib繪製多圖並合併展示
    其實,利用python 的matplotlib包下的subplot函數可以將多個子圖放在同一個畫板上。在此之前,我們先來看一個案例:import  matplotlib.pyplot as pltimport numpy as np plt.rcParams['font.sans-serif']=['SimHei'] # 用來正常顯示中文標籤plt.rcParams['axes.unicode_minus']=False
  • Matplotlib數據可視化:折線圖與散點圖
    from matplotlib import pyplot as pltimport numpy as npimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['SimHei']  # 中文字體支持
  • Python數據可視化:用Seaborn繪製高端玩家版散點圖
    今天我們畫普通散點圖、邊際分布線性回歸散點圖、散點圖矩陣、帶線性回歸最佳擬合線的散點圖。本文示例多是來自官方文檔,這裡我只是做一下整理,讓大家知道散點圖的不同玩法,不要再繪製老掉牙的普通玩家版散點圖了。