Python-matplotlib: 散點圖的繪製

2021-02-20 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散點圖的繪製,只不過添加了相關性分析,擬合關係式和顏色映射散點密度(大多數的英文文章中多出現此類圖表
  • matplotlib庫繪製折線圖、子圖及條形圖
    前面幾節我們學習了python中numpy和pandas庫的一些常用操作,接下來幾個章節,我們學習一個非常重要的數據可視化庫matplotlib(seaborn庫也有有所涉及)。這裡我們需要知道,matplotlib庫主要繪製一些2D圖形和簡單的3D圖形。
  • python使用matplotlib畫動態圖
    matplotlib是python的核心繪圖庫,是python的一個開源項目,旨在為python提供一個繪圖庫。matplotlib與numpy組合是一種可行的matlab替代方案。在可視化中matplotlib是最常使用的工具,是對數據整體判斷、效果預測不可或缺的重要模塊。
  • Matplotlib圖鑑|基礎散點圖1-3
    大家好,從今天起,我們將開始更新Matplotlib基礎散點圖圖鑑。本文為基礎散點圖第一篇,將講解以下三個簡單的柱狀圖繪製方法散點圖繪製說明因本文是散點圖的開篇,因此先簡單講一下散點圖的繪圖原理,在Matplotlib中,柱狀圖可以使用plt.scatter製作散點圖。
  • Matplotlib圖鑑|基礎散點圖
    基礎散點圖-009下面我們就來講解如何繪製第一個圖,注意,代碼在以下環境全部通過測試:因版本不同,可能會有部分語法差異,如有報錯首先導入相關庫並查看版本import matplotlibprint(matplotlib.__version__) #查看Matplotlib版本import pandas as pdprint(pd.
  • [神奇的Python可視化]在Matplotlib上面繪製圖片標記
    所謂的天下苦matplotlib散點圖符號久矣……眾所周知的是matplotlib的散點圖符號是固定的,如下所示:markertype含義當然,matplotlib還支持LaTeX 符號,也就是用來寫數學公式的符號,比如:但是總感覺還是不夠的樣子,比如我們要在圖上顯示機場,更希望的是用下面這樣的圖標:如果用matplotlib默認的圖標繪製的效果應該是這樣的:那麼我們用上面那個機場圖標
  • python:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。
  • Python-Matplotlib 動態曲線圖繪製
    引言動態曲線圖不同於動態氣泡圖,它可以查看部分指標在一段時間內的變化趨勢,本期推文將推出動態曲線圖的 Matplotlib 繪製過程,核心過程為 折線圖 和 散點圖 的繪製,詳細過程如下:02.>散點圖的繪製則需知道我們只需要繪製最後一個散點,即獲取最後一個數據,因此scatter的x,y均有[-1]的索引,當然,我們需在之前使用tolist()方法轉變成數據列表形式,填充顏色 color、散點邊框顏色 edgecolor、散點大小 s、和線寬 lw 均可根據自己需要進行定製化設置。
  • 動態曲線圖(linechart)--Matplotlib繪製
    和 散點圖 的繪製,詳細過程如下:由於需要查某些指標隨時間的變化趨勢,可將數據處理成如下形式(部分):圖表中的 china、usa、japan 等變量可以結合自己的實際需求進行更改,而 time 列則是時間變化。
  • python matplotlib畫圖教程學習:使用介紹
    本篇文章介紹matplotlib包使用時,需要掌握的一些基本概念。(線型圖)、Markers(數據標註點)、Grid(格子)等等。除了圖中顯示的紅藍線型圖和散點圖,matplotlib還能繪製柱形圖、燭型圖、餅圖、3D圖形等等各種個性化圖形,將在後續文章一一介紹。
  • Matplotlib圖鑑|進階散點圖7-8
    大家好,從今天起,我們將開始更新Matplotlib進階散點圖圖鑑。本文將講解以下二個進階的散點圖繪製方法。進階散點圖-007下面我們就來講解如何繪製第一個進階散點圖,注意,代碼在以下環境全部通過測試:
  • Python-matplotlib 學術柱狀圖繪製
    黑灰顏色或者黑白陰影的柱狀圖或者條形圖,下面就具體介紹使用Python-matplotlib 的實現過程。matplotlib繪製這種柱狀圖或者條形圖還是比較簡單的,主要涉及的知識點就是ax.bar()方法的應用,首先進行黑灰顏色柱狀圖的繪製,具體代碼如下:plt.rcParams['font.family'] = ['Times New Roman']fig,ax = plt.subplots(1,1,figsize=(7,4.5),dpi=200
  • Python中使用matplotlib繪製灰度直方圖
    灰度直方圖在數據統計分析、圖像處理中有著比較廣泛的應用,下面就介紹一下如何在Python中使用matplotlib來繪製灰度直方圖。
  • Python 繪圖庫 Matplotlib 入門教程
    Matplotlib適用於各種環境,包括:Python腳本IPython shellJupyter notebookWeb應用伺服器用戶圖形界面工具包使用Matplotlib,能夠的輕易生成各種類型的圖像,例如:直方圖,波譜圖,條形圖,散點圖等。
  • Python 數據分析:Matplotlib 繪圖
    簡介Matplotlib 是 Python 提供的一個繪圖庫,通過該庫我們可以很容易的繪製出折線圖、直方圖、散點圖、餅圖等豐富的統計圖,安裝使用 pip install matplotlib 命令即可,Matplotlib 經常會與 NumPy 一起使用。
  • python數據科學系列:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。
  • matplotlib繪製數學函數
    本文主要通過繪製數學函數,從而學習matplotlib圖形的坐標軸、圖例、畫布等各個選項的設置。導入matplotlib繪圖庫,一般情況下,不用import整個matplotlib模塊,只需要調用pyplot模塊。
  • python matplotlib模塊
    調用畫圖方法調用pyplot模塊的繪圖方法畫出圖像,基本的畫圖方法有:plot(將各個點連成曲線圖)、scatter(畫散點圖),bar(畫條形圖)還有更多方法。,默認rcParams['lines.markersize']**2L2 , =plt.scatter(x,y,color="r",s=12,linewidth=1.0,linestyle='--',lable=」散點圖」)L3 , =plt.bar(x,y, color='green')3) 設置圖標籤# 使用legend繪製多條曲線
  • Python繪圖筆記:繪製四色散點圖和誤差條形圖
    1.散點圖一figure1#導入繪製散點圖所需要的包import matplotlib.pyplot as pltfrom numpy.random,這裡進行了隨機生成 scale = 200.0 * rand(n) #繪製散點圖,x,y坐標,顏色按照for循環中的四色進行變換 #設置透明度和點的邊緣色為無 ax.scatter(x, y, c=color, s=scale, label=color,
  • Python-seaborn 基礎圖表繪製-散點圖
    上期推文推出第一篇基礎圖表繪製-R-ggplot2 基礎圖表繪製-散點圖 的繪製推文,得到了很多小夥伴的喜歡,也是我更加想使這個系列做的更加完善和系統,我之前也有說過,會推出Python和R的兩個版本繪製教程,接下來我們就推出基礎散點圖的Python繪製版本。