抽象化|具體化: 如盒形圖 | 現實中的圖html
功能性|裝飾性:沒有裝飾和渲染 | 包含藝術性美學上的裝飾canvas
深度表達|淺度表達:深刻層次的研究探索數據 | 易於理解的,直觀的表示api
多維度|單一維度:數據的多個層次 | 數據的單一維度app
創造性|熟悉性:全新的方式進行可視化 | 被大衆接受而且熟悉的方式dom
新穎性|冗餘性: 每一個元素只表述一次 | 每一個元素表示屢次函數
Matplotlib:spa
pyplot3d
https://matplotlib.org/users/pyplot_tutorial.htmlcode
散點圖htm
線圖:
柱狀圖
適用場景
1. Matplotlib
import matplotlib as mpl mpl.get_backend()
2. 簡單繪圖,
import matplotlib.pyplot as plt plt.plot(3, 2) plt.show()
上圖看不到任何的點。
plt.plot(3, 2, '*')
使用scipting 層
from matplotlib.backends.backend_agg import FigureCanvasAgg from matplotlib.figure import Figure fig = Figure() canvas = FigureCanvasAgg(fig) ax = fig.add_subplot(111) ax.plot(3, 2, '.') canvas.print_png('test.png')
gca 獲取當前座標軸對象
plt.figure() plt.plot(3, 2, 'o') ax = plt.gca() # 設置座標軸範圍 ax.axis([0, 6, 0, 10])
# matplot 會自動用顏色區分不一樣的數據 plt.figure() plt.plot(1.5, 1.5, 'o') plt.plot(2, 2, '*') plt.plot(2.5, 2.5, '*')
3. 散點圖
import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = x plt.figure() plt.scatter(x, y)
import matplotlib as mpl import matplotlib.pyplot as plt # 改變顏色及大小 import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = x colors = ['red'] * (len(x) - 1) colors.append('green') plt.figure() plt.scatter(x, y, s=100, c=colors) plt.show()
# 使用zip合併兩個列表爲一個新列表 # 新列表中的每一個元素爲對應位置上的元組 l1 = list(range(1, 6)) l2 = list(range(6, 11)) zip_generator = zip(l1, l2) tuple_list = list(zip_generator) print(type(zip_generator)) print(list(tuple_list)) <class 'zip'> [(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
# 使用*進行對元組列表解包 x, y = zip(*tuple_list) print(x) print(y)
plt.figure() plt.scatter(x[:2], y[:2], c='red', label='samples 1') plt.scatter(x[2:], y[2:], c='blue', label='samples2')
4. 線圖
import numpy as np linear_data = np.arange(1, 9) quadratic_data = linear_data ** 2 plt.figure() plt.plot(linear_data, '-o', quadratic_data, '-o') # 注意,這裏咱們只指定了y軸數據,x軸的數據是matplotlib自動生成的
plt.plot([22, 44, 66], '--r')
# 添加座標軸標籤及圖例 plt.xlabel('x data') plt.ylabel('y data') plt.title('Line Chart Title') plt.legend(['legend1', 'legend2', 'legend3'])
# 填充兩個line間的區域 plt.gca().fill_between(range(len(linear_data)), linear_data, quadratic_data, facecolor='green', alpha=0.25)
# 繪製橫軸爲時間的線圖 plt.figure() observation_dates = np.arange('2017-10-11', '2017-10-19', dtype='datetime64[D]') observation_dates plt.plot(observation_dates, linear_data, '-o', observation_dates, quadratic_data, '-o') # 橫軸並非咱們想要的結果
# 藉助pandas繪製橫軸爲時間的線圖 import pandas as pd plt.figure() observation_dates = np.arange('2017-10-11', '2017-10-19', dtype='datetime64[D]') observation_dates = list(map(pd.to_datetime, observation_dates)) plt.plot(observation_dates, linear_data, '-o', observation_dates, quadratic_data, '-o')
# plt.xticks(rotation='45') x = plt.gca().xaxis for item in x.get_ticklabels(): item.set_rotation(45) # 調整邊界距離 plt.subplots_adjust(bottom=0.25) # 對於學術製圖,可在標題中包含latex語法 ax = plt.gca() ax.set_title('Quadratic ($x^2$) vs. Linear ($x$)')
5. 柱狀圖
plt.figure() x_vals = list(range(len(linear_data))) plt.bar(x_vals, linear_data, width=0.3)
# group bar chart # 同一副圖中添加新的柱狀圖 # 注意,爲了避免覆蓋第一個柱狀圖,須要對x軸作偏移 x_vals2 = [item + 0.3 for item in x_vals] plt.bar(x_vals2, quadratic_data, width=0.3) # stack bar chart plt.figure() x_vals = list(range(len(linear_data))) plt.bar(x_vals, linear_data, width=0.3) plt.bar(x_vals, quadratic_data, width=0.3, bottom=linear_data)
# 橫向柱狀圖 plt.figure() x_vals = list(range(len(linear_data))) plt.barh(x_vals, linear_data, height=0.3) plt.barh(x_vals, quadratic_data, height=0.3, left=linear_data)
4. 直方圖
import matplotlib as mpl import matplotlib.pyplot as plt data = [50,20,33,51,99,31,5,6,4,5,89,12,56,43] bins = [0,10,20,40,50,60,70,80,100] plt.hist(data,bins) plt.show()
盒形圖(箱狀圖)
第三四分位數與第一四分位數的差距又稱四分位間距。
功能:
#首先導入基本的繪圖包 import matplotlib.pyplot as plt import numpy as np import pandas as pd #添加成績表 plt.style.use("ggplot") plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] #新建一個空的DataFrame df=pd.DataFrame() #添加成績單,最後顯示成績單表格 df["英語"]=[76,90,97,71,70,93,86,83,78,85,81] df["經濟數學"]=[65,95,51,74,78,63,91,82,75,71,55] df["西方經濟學"]=[93,81,76,88,66,79,83,92,78,86,78] df["計算機應用基礎"]=[85,78,81,95,70,67,82,72,80,81,77] print(df) #用matplotlib來畫出箱型圖 plt.boxplot(x=df.values,labels=df.columns,whis=1.5) plt.show()
熱圖(heatmap):
import plotly import plotly.plotly as py import plotly.graph_objs as go plotly.tools.set_credentials_file(username='Jessse_Li',api_key='your key') trace = go.Heatmap(z=[[1, 20, 30], [20, 1, 60], [30, 60, 1]]) data=[trace] py.iplot(data, filename='basic-heatmap')
Heatmap 加上標籤信息
trace = go.Heatmap(z=[[1, 20, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]], x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'], y=['Morning', 'Afternoon', 'Evening']) data=[trace] py.iplot(data, filename='labelled-heatmap')
heatmap 加上時間序列
import datetime import numpy as np import plotly.plotly as py import plotly.graph_objs as go programmers = ['Alex','Nicole','Sara','Etienne','Chelsea','Jody','Marianne'] base = datetime.datetime.today() date_list = [base - datetime.timedelta(days=x) for x in range(0, 180)] z = [] for prgmr in programmers: new_row = [] for date in date_list: new_row.append( np.random.poisson() ) z.append(list(new_row)) data = [ go.Heatmap( z=z, x=date_list, y=programmers, colorscale='Viridis', ) ] layout = go.Layout( title='GitHub commits per day', xaxis = dict(ticks='', nticks=36), yaxis = dict(ticks='' ) ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename='datetime-heatmap')