天天看點

Python開發 之 各種可視化圖表的繪制

文章目錄

  • ​​1、簡介​​
  • ​​2、用 matplotlib 繪制各種可視化圖表​​
  • ​​2.1 折線圖​​
  • ​​2.2 柱形圖​​
  • ​​2.3 餅圖​​
  • ​​2.4 三維散點圖​​
  • ​​2.5 散點圖​​
  • ​​3、其它可視化庫​​
  • ​​3.1 Seaborn​​
  • ​​3.2 ggplot​​
  • ​​3.3 Bokeh​​
  • ​​3.4 pygal​​
  • ​​3.5 Plotly​​
  • ​​3.6 geoplotlib​​
  • ​​3.7 Gleam​​
  • ​​3.8 missingno​​
  • ​​3.9 Leather​​
  • ​​3.10 pastalog​​
  • ​​3.11 GazeParser​​
  • ​​4、此項目Github源碼分享​​

1、簡介

最近項目中用到不少有關Python圖表的知識,主要用的可視化程式庫的泰鬥 matplotlib 。其實還有很多相關畫圖表的圖形庫,大多數可視化圖形庫是基于 matplotlib 建構的并且確定一些用例更簡單。本文主要講的是 matplotlib ,在文尾将會介紹 11 種其它的資料可視化庫。

matplotlib 是Python可視化程式庫的泰鬥。經過十幾年它任然是Python使用者最常用的畫圖庫。它的設計和在1980年代被設計的商業化程式語言MATLAB非常接近。

由于 matplotlib 是第一個 Python 可視化程式庫,有許多别的程式庫都是建立在它的基礎上或者直接調用它。比如pandas和Seaborn就是matplotlib的外包,它們讓你能用更少的代碼去調用 matplotlib的方法。

雖然用matplotlib可以很友善的得到資料的大緻資訊,但是如果要更快捷簡單地制作可供發表的圖表就不那麼容易了。就像Chris Moffitt 在“Python可視化工具簡介”中提到的一樣:“功能非常強大,也非常複雜。”

Python開發 之 各種可視化圖表的繪制

官網:​​https://matplotlib.org/​​​ Github/matplotlib:​​https://github.com/matplotlib/matplotlib​​

安裝:

pip install matplotlib      

2、用 matplotlib 繪制各種可視化圖表

2.1 折線圖

Python開發 之 各種可視化圖表的繪制
# encoding: utf-8
"""
Author: 沙振宇
CreateTime: 2019-4-29
UpdateTime: 2019-12-12
Info: matplotlib 使用示例 —— 折線圖
"""
import matplotlib.pyplot as plt

#折線圖
x = [5,7,11,17,19,25]#點的橫坐标
k1 = [0.82,0.91,0.93,1.26,0.97,0.95]#線1的縱坐标
k2 = [0.89,1.22,1.94,1.57,1.43,0.93]#線2的縱坐标
plt.plot(x,k1,'s-',color = 'r',label="紅線的名字")#s-:方形
plt.plot(x,k2,'o-',color = 'g',label="綠線的名字")#o-:圓形
plt.xlabel("橫坐标名字")
plt.ylabel("縱坐标名字")
plt.legend(loc = "best")#圖例
plt.rcParams['font.sans-serif']=['SimHei'] # 中文
plt.show()      

2.2 柱形圖

Python開發 之 各種可視化圖表的繪制
# encoding: utf-8
"""
Author: 沙振宇
CreateTime: 2019-4-29
UpdateTime: 2019-12-12
Info: matplotlib 使用示例 —— 柱形圖
"""
import numpy as np
import matplotlib.pyplot as plt
#柱狀圖
A1 = [0.88,0.81,0.85]
A2 = [0.89,0.86,0.84]
A3 = [0.88,0.83,0.89]
A4 = [0.86,0.86,0.88]
A5 = [0.90,0.83,0.83]
x = np.arange(3) #總共有幾組,就設定成幾,我們這裡有三組,是以設定為3
total_width, n = 0.6, 5    # n有多少個類型
width = total_width / n
x = x - (total_width - width) / 2
plt.bar(x, A1, color = "r",width=width,label='a1 ')
plt.bar(x + width, A2, color = "y",width=width,label='a2')
plt.bar(x + 2 * width, A3 , color = "c",width=width,label='a3')
plt.bar(x + 3 * width, A4 , color = "g",width=width,label='a4')
plt.bar(x + 4 * width, A5 , color = "b",width=width,label='a5')
plt.xlabel("橫軸的名字")
plt.ylabel("縱軸的名字")
plt.legend(loc = "best")
plt.xticks([0,1,2],['左邊','中間','右邊'])
plt.ylim((0.8, 0.95))
my_y_ticks = np.arange(0.8, 0.95, 0.02)
plt.yticks(my_y_ticks)
plt.rcParams['font.sans-serif']=['SimHei']  # 中文
plt.show()      

2.3 餅圖

Python開發 之 各種可視化圖表的繪制
# encoding: utf-8
"""
Author: 沙振宇
CreateTime: 2019-4-29
UpdateTime: 2019-12-12
Info: matplotlib 使用示例 —— 餅圖
"""
import matplotlib.pyplot as plt

# 餅圖
data = {
    '中國': (130, '#7199cf'),
    '美國': (115, '#4fc4aa'),
    '日本': (60, '#ffff10'),
}
# 設定繪圖對象的大小
fig = plt.figure(figsize=(8, 8))
cities = data.keys()
values = [x[0] for x in data.values()]
colors = [x[1] for x in data.values()]
ax1 = fig.add_subplot(111)
ax1.set_title('餅圖')
labels = ['{}:{}'.format(city, value) for city, value in zip(cities, values)]

explode = [0.05, 0, 0] # 設定餅圖的凸出顯示
ax1.pie(values, labels=labels, colors=colors, explode=explode, shadow=True) # 畫餅狀圖, 并且指定标簽和對應的顔色  指定陰影效果

# plt.savefig('pie.jpg') # 儲存成圖檔
plt.rcParams['font.sans-serif']=['SimHei']  # 中文
plt.show()      

2.4 三維散點圖

Python開發 之 各種可視化圖表的繪制
# encoding: utf-8
"""
Author: 沙振宇
CreateTime: 2019-4-29
UpdateTime: 2019-12-12
Info: matplotlib 使用示例 —— 三維散點圖
"""
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


data = np.random.randint(0, 255, size=[50, 50, 50])
x, y, z = data[0], data[1], data[2]
ax = plt.subplot(111, projection='3d') # 建立一個三維的繪圖工程
# 将資料點分成三部分畫,在顔色上有區分度
ax.scatter(x[:10], y[:10], z[:10], c='y') # 繪制資料點
ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
ax.scatter(x[30:40], y[30:40], z[40:50], c='g')
ax.set_zlabel('Z') # 坐标軸
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.rcParams['font.sans-serif']=['SimHei']  # 中文
plt.show()      

2.5 散點圖

Python開發 之 各種可視化圖表的繪制
# encoding: utf-8
"""
Author: 沙振宇
CreateTime: 2019-4-29
UpdateTime: 2019-12-12
Info: matplotlib 使用示例 —— 散點圖
"""
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0., 5., 0.2)
plt.xlabel('橫軸名字')
plt.ylabel('縱軸名字')
plt.rcParams['font.sans-serif']=['SimHei']  # 中文
plt.plot(x, x, 'r--', x, x ** 2, 'bs', x, x ** 3, 'g^')
plt.show()      

3、其它可視化庫

3.1 Seaborn

Seaborn利用了matplotlib,用簡潔的代碼來制作好看的圖表。Seaborn跟matplotlib最大的差別就是它的預設繪圖風格和色彩搭配都具有現代美感。由于Seaborn是建構在matplotlib的基礎上的,你需要了解matplotlib進而來調整Seaborn的預設參數。

官網: http://seaborn.pydata.org/index.html

3.2 ggplot

ggplot 基于R的一個作圖包 ggplot2, 同時利用了源于 《圖像文法》(The Grammar of Graphics)中的概念。ggplot 跟 matplotlib 的不同之處是它允許你疊加不同的圖層來完成一幅圖。比如你可以從軸開始,然後加上點,加上線,趨勢線等等。雖然《圖像文法》得到了“接近思維過程”的作圖方法的好評,但是習慣了matplotlib的使用者可能需要一些時間來适應這個新思維方式。ggplot的作者提到 ggplot 并不适用于制作非常個性化的圖像。它為了操作的簡潔而犧牲了圖像複雜度。ggplot跟pandas的整合度非常高,是以當你使用它的時候,最好将你的資料讀成 DataFrame。

官網: http://ggplot.yhathq.com/

3.3 Bokeh

跟ggplot一樣, Bokeh 也是基于《圖形文法》的概念。但是跟ggplot不一樣的是,它完全基于Python而不是從R引用過來的。它的長處在于它能用于制作可互動,可直接用于網絡的圖表。圖表可以輸出為JSON對象,HTML文檔或者可互動的網絡應用。Boken也支援資料流和實時資料。

Bokeh為不同的使用者提供了三種控制水準。最高的控制水準用于快速制圖,主要用于制作常用圖像, 例如柱狀圖,盒狀圖,直方圖。中等控制水準跟matplotlib一樣允許你控制圖像的基本元素(例如分布圖中的點)。最低的控制水準主要面向開發人員和軟體工程師。它沒有預設值,你得定義圖表的每一個元素。

官網: https://bokeh.pydata.org/en/latest/

3.4 pygal

pygal 跟 Bokeh 和 Plotly 一樣,提供可直接嵌入網絡浏覽器的可互動圖像。跟其他兩者的主要差別在于它可以将圖表輸出為SVG格式。如果你的資料量相對小,SVG就夠用了。但是如果你有成百上千的資料點,SVG的渲染過程會變得很慢。由于所有的圖表都被封裝成了方法,而且預設的風格也很漂亮,用幾行代碼就可以很容易地制作出漂亮的圖表。

官網: http://www.pygal.org/en/latest/index.html

3.5 Plotly

線上制圖工具Plotly,但是你知道你可以通過Python notebook使用它麼?Plotly 跟 Bokeh 一樣緻力于互動圖表的制作,但是它提供在别的庫中很難找到的幾種圖表類型,比如等值線圖,樹形圖和三維圖表。

官網: https://plot.ly/python/

3.6 geoplotlib

geoplotlib 是一個用于制作地圖和地理相關資料的工具箱。你可以用它來制作多種地圖,比如等值區域圖, 熱度圖,點密度圖。你必須安裝 Pyglet (一個面向對象程式設計接口)來使用geoplotlib。 不過因為大部分Python的可視化工具不提供地圖,有一個專職畫地圖的工具也是挺友善的。

Github:https://github.com/andrea-cuttone/geoplotlib

3.7 Gleam

Gleam 借用了R中 Shiny 的靈感。 它允許你隻利用 Python 程式将你的分析變成可互動的網絡應用,你不需要會用HTML CSS 或者 JaveScript。Gleam 可以使用任何一種 Python 的可視化庫。當你建立一個圖表的時候,你可以在上面加上一個域,這樣使用者可以用它來對資料排序和過濾了。

Github:https://github.com/dgrtwo/gleam

3.8 missingno

缺失資料是永遠的痛。missingno 用圖像的方式讓你能夠快速評估資料缺失的情況,而不是在資料表裡面步履維艱。你可以根據資料的完整度對資料進行排序或過濾,或者根據熱度圖或樹狀圖來考慮對資料進行修正。

Github: https://github.com/ResidentMario/missingno

3.9 Leather

Leather的最佳定義來自它的作者 Christopher Groskopf:“Leather 适用于現在就需要一個圖表并且對圖表是不是完美并不在乎的人。”它可以用于是以的資料類型然後生成SVG圖像,這樣在你調整圖像大小的時候就不會損失圖像品質。這個庫很新,一些文檔還沒有最後完成。圖像成品非常基礎——但是這就是設計目标。

官網:https://leather.readthedocs.io/en/latest/index.html

3.10 pastalog

面向訓練神經網絡的簡單實時可視化伺服器。 Lasagne。Keras。Tensorflow。Torch。Theano和基本所有其他内容一起使用。

Github: https://github.com/rewonc/pastalog

3.11 GazeParser

4、此項目Github源碼分享

繼續閱讀