import matplotlib.pyplot as plt
import numpy as np
基本圖表
用plot方法畫(huà)出x=(0,10)間的sin圖像
x = np.linspace(0, 10, 30)
plt.plot(x, np.sin(x))

output_2_1.png
用點(diǎn)加線的方式畫(huà)出x=(0,10)間的sin圖像
plt.plot(x, np.sin(x), '-o')

output_4_1.png
用scatter方法畫(huà)出x=(0,10)間sin的點(diǎn)圖像
plt.scatter(x, np.sin(x))

output_6_1.png
用餅圖的面積及顏色展示一組4維數(shù)據(jù)
rng = np.random.RandomState(0)
x = rng.randn(100) * 10
y = rng.randn(100) * 10
colors = rng.randn(100)*100
sizes = (x * y) * 10
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3, cmap='viridis')
plt.colorbar()

output_8_2.png
繪制一組誤差為±0.8的數(shù)據(jù)的誤差條圖
x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)
plt.errorbar(x, y, yerr=dy, fmt='.k')

output_10_1.png
繪制一個(gè)柱狀圖
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [3, 1, 4, 5, 8, 9, 7, 2]
label = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
plt.bar(x, y, tick_label=label)

output_12_1.png
繪制一個(gè)水平方向柱狀圖
plt.barh(x, y, tick_label=label)

output_14_1.png
繪制1000個(gè)隨機(jī)值的直方圖
data = np.random.randn(1000)
plt.hist(data)

output_16_1.png
設(shè)置直方圖分30個(gè)bins,并設(shè)置為頻率分布
plt.hist(data, bins=30, histtype='stepfilled', density=True)
plt.show()

output_18_0.png
在一張圖中繪制3組不同的直方圖,并設(shè)置透明度
x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)
kwargs = dict(alpha=0.3, bins=40, density=True)
plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs)

output_20_1.png
繪制一張二維直方圖
mean = [0, 0]
cov = [[1, 1], [1, 2]]
x, y = np.random.multivariate_normal(mean, cov, 10000).T
plt.hist2d(x, y, bins=30)

output_22_1.png
繪制一張?jiān)O(shè)置網(wǎng)格大小為30的六角形直方圖
plt.hexbin(x, y, gridsize=30)

output_24_1.png
自定義圖標(biāo)元素
繪制x=(0,10)間sin的圖像,設(shè)置線性為虛線
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), '--')

output_27_1.png
設(shè)置y軸顯示范圍為(-1.5,1.5)
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.ylim(-1.5, 1.5)
# plt.xlim(2, 8)

output_29_1.png
設(shè)置x,y軸標(biāo)簽分別為variable x,value y
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.xlabel('variable x');
plt.ylabel('value y');

output_31_0.png
設(shè)置圖表標(biāo)題“三角函數(shù)”
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.title('三角函數(shù)');
plt.legend()

output_33_1.png
顯示網(wǎng)格
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.grid()

output_35_0.png
繪制平行于x軸y=0.8的水平參考線
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.axhline(y=0.8, ls='--', c='r')
plt.axvline(x=5, ls='--', c='g') # 平行于y軸x=5的垂直參考線

output_37_1.png
繪制垂直于x軸x<4 and x>6的參考區(qū)域,以及y軸y<0.2 and y>-0.2的參考區(qū)域
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.axvspan(xmin=4, xmax=6, facecolor='r', alpha=0.3) # 垂直x軸
plt.axhspan(ymin=-0.2, ymax=0.2, facecolor='y', alpha=0.3); # 垂直y軸

output_39_0.png
添加注釋文字sin(x)
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.text(2, 0.5, 'sin(x)', weight='bold', color='r')

output_41_1.png
用箭頭標(biāo)出第一個(gè)峰值
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.annotate('maximum', xy=(np.pi/2, 1), xytext=(np.pi/2+1, 1),
weight='bold',
color='r',
arrowprops=dict(arrowstyle='->', connectionstyle='arc3', color='r'));

output_43_0.png
自定義圖例
在一張圖里繪制sin,cos的圖形,并展示圖例
x = np.linspace(0, 10, 1000)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), label='sin')
ax.plot(x, np.cos(x), '--', label='cos')
ax.legend();

output_46_0.png
調(diào)整圖例在左上角展示,且不顯示邊框
ax.legend(loc='upper left', frameon=False);
fig

output_48_0.png
調(diào)整圖例在畫(huà)面下方居中展示,且分成2列
ax.legend(frameon=False, loc='lower center', ncol=2)
fig

output_50_0.png
繪制 sin(x), sin(x+π/2), sin(x+π)的圖像,并只顯示前2者的圖例
y = np.sin(x[:, np.newaxis] + np.pi * np.arange(0, 2, 0.5))
lines = plt.plot(x, y)
# lines 是 plt.Line2D 類型的實(shí)例的列表
plt.legend(lines[:2], ['first', 'second']);

output_52_0.png
# 第二個(gè)方法
plt.plot(x, y[:, 0], label='first')
plt.plot(x, y[:, 1], label='second')
plt.plot(x, y[:, 2:])
plt.legend(framealpha=1, frameon=True);

output_53_0.png
將圖例分不同的區(qū)域展示
fig, ax = plt.subplots()
lines = []
styles = ['-', '--', '-.', ':']
x = np.linspace(0, 10, 1000)
for i in range(4):
lines += ax.plot(x, np.sin(x - i * np.pi / 2), styles[i], color='black')
ax.axis('equal')
# 設(shè)置第一組標(biāo)簽
ax.legend(lines[:2], ['line A', 'line B'],
loc='upper right', frameon=False)
# 創(chuàng)建第二組標(biāo)簽
from matplotlib.legend import Legend
leg = Legend(ax, lines[2:], ['line C', 'line D'],
loc='lower right', frameon=False)
ax.add_artist(leg);

output_55_0.png
自定義色階
展示色階
x = np.linspace(0, 10, 1000)
I = np.sin(x) * np.cos(x[:, np.newaxis])
plt.imshow(I)
plt.colorbar();

output_58_0.png
改變配色為'gray'
plt.imshow(I, cmap='gray')

output_60_1.png
將色階分成6個(gè)離散值顯示
plt.imshow(I, cmap=plt.cm.get_cmap('Blues', 6))
plt.colorbar()
plt.clim(-1, 1);

output_62_0.png
多子圖
在一個(gè)1.0x1.0的畫(huà)布中,(0.65,0.65)的位置創(chuàng)建一個(gè)0.2 x 0.2的子圖
ax1 = plt.axes()
ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])

output_65_0.png
在2個(gè)子圖中,顯示sin(x)和cos(x)的圖像
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4], ylim=(-1.2, 1.2))
ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4], ylim=(-1.2, 1.2))
x = np.linspace(0, 10)
ax1.plot(np.sin(x));
ax2.plot(np.cos(x));

output_67_0.png
用for創(chuàng)建6個(gè)子圖,并且在圖中標(biāo)識(shí)出對(duì)應(yīng)的子圖坐標(biāo)
for i in range(1, 7):
plt.subplot(2, 3, i)
plt.text(0.5, 0.5, str((2, 3, i)),fontsize=18, ha='center')

output_69_0.png
# 方法二
fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)
for i in range(1, 7):
ax = fig.add_subplot(2, 3, i)
ax.text(0.5, 0.5, str((2, 3, i)),fontsize=18, ha='center')

output_70_0.png
設(shè)置相同行和列共享x,y軸
fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')

output_72_0.png
用[]的方式取出每個(gè)子圖,并添加子圖座標(biāo)文字
for i in range(2):
for j in range(3):
ax[i, j].text(0.5, 0.5, str((i, j)),fontsize=18, ha='center')
fig

output_74_0.png
組合繪制大小不同的子圖,樣式如下
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
plt.subplot(grid[0, 0])
plt.subplot(grid[0, 1:])
plt.subplot(grid[1, :2])
plt.subplot(grid[1, 2]);

output_76_0.png
顯示一組二維數(shù)據(jù)的頻度分布,并分別在x,y軸上,顯示該維度的數(shù)據(jù)的頻度分布
mean = [0, 0]
cov = [[1, 1], [1, 2]]
x, y = np.random.multivariate_normal(mean, cov, 3000).T
# Set up the axes with gridspec
fig = plt.figure(figsize=(6, 6))
grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2)
main_ax = fig.add_subplot(grid[:-1, 1:])
y_hist = fig.add_subplot(grid[:-1, 0], xticklabels=[], sharey=main_ax)
x_hist = fig.add_subplot(grid[-1, 1:], yticklabels=[], sharex=main_ax)
# scatter points on the main axes
main_ax.scatter(x, y,s=3,alpha=0.2)
# histogram on the attached axes
x_hist.hist(x, 40, histtype='stepfilled',
orientation='vertical')
x_hist.invert_yaxis()
y_hist.hist(y, 40, histtype='stepfilled',
orientation='horizontal')
y_hist.invert_xaxis()

output_78_0.png
三維圖像
創(chuàng)建一個(gè)三維畫(huà)布
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = plt.axes(projection='3d')

output_81_0.png
繪制一個(gè)三維螺旋線
ax = plt.axes(projection='3d')
# Data for a three-dimensional line
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline);

output_83_0.png
繪制一組三維點(diǎn)
ax = plt.axes(projection='3d')
zdata = 15 * np.random.random(100)
xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
ydata = np.cos(zdata) + 0.1 * np.random.randn(100)
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');

output_85_0.png
寶可夢(mèng)數(shù)據(jù)集可視化
import pandas as pd
df = pd.read_csv('./data/Pokemon.csv')
展示前5個(gè)寶可夢(mèng)的Defense,Attack,HP的堆積條形圖
pokemon = df['Name'][:5]
hp = df['HP'][:5]
attack = df['Attack'][:5]
defense = df['Defense'][:5]
ind = [x for x, _ in enumerate(pokemon)]
plt.figure(figsize=(10,10))
plt.bar(ind, defense, width=0.8, label='Defense', color='blue', bottom=attack+hp)
plt.bar(ind, attack, width=0.8, label='Attack', color='gold', bottom=hp)
plt.bar(ind, hp, width=0.8, label='Hp', color='red')
plt.xticks(ind, pokemon)
plt.ylabel("Value")
plt.xlabel("Pokemon")
plt.legend(loc="upper right")
plt.title("5 Pokemon Defense & Attack & Hp")
plt.show()

output_89_0.png
展示前5個(gè)寶可夢(mèng)的Attack,HP的簇狀條形圖
N = 5
pokemon_hp = df['HP'][:5]
pokemon_attack = df['Attack'][:5]
ind = np.arange(N)
width = 0.35
plt.bar(ind, pokemon_hp, width, label='HP')
plt.bar(ind + width, pokemon_attack, width,label='Attack')
plt.ylabel('Values')
plt.title('Pokemon Hp & Attack')
plt.xticks(ind + width / 2, (df['Name'][:5]),rotation=45)
plt.legend(loc='best')
plt.show()

output_91_0.png
展示前5個(gè)寶可夢(mèng)的Defense,Attack,HP的堆積圖
x = df['Name'][:4]
y1 = df['HP'][:4]
y2 = df['Attack'][:4]
y3 = df['Defense'][:4]
labels = ["HP ", "Attack", "Defense"]
fig, ax = plt.subplots()
ax.stackplot(x, y1, y2, y3)
ax.legend(loc='upper left', labels=labels)
plt.xticks(rotation=90)
plt.show()

output_93_0.png
公用x軸,展示前5個(gè)寶可夢(mèng)的Defense,Attack,HP的折線圖
x = df['Name'][:5]
y1 = df['HP'][:5]
y2 = df['Attack'][:5]
y3 = df['Defense'][:5]
# Create two subplots sharing y axis
fig, (ax1, ax2,ax3) = plt.subplots(3, sharey=True)
ax1.plot(x, y1, 'ko-')
ax1.set(title='3 subplots', ylabel='HP')
ax2.plot(x, y2, 'r.-')
ax2.set(xlabel='Pokemon', ylabel='Attack')
ax3.plot(x, y3, ':')
ax3.set(xlabel='Pokemon', ylabel='Defense')
plt.show()

output_95_0.png
展示前15個(gè)寶可夢(mèng)的Attack,HP的折線圖
plt.plot(df['HP'][:15], '-r',label='HP')
plt.plot(df['Attack'][:15], ':g',label='Attack')
plt.legend();

output_97_0.png
用scatter的x,y,c屬性,展示所有寶可夢(mèng)的Defense,Attack,HP數(shù)據(jù)
x = df['Attack']
y = df['Defense']
colors = df['HP']
plt.scatter(x, y, c=colors, alpha=0.5)
plt.title('Scatter plot')
plt.xlabel('HP')
plt.ylabel('Attack')
plt.colorbar();

output_99_0.png
展示所有寶可夢(mèng)的攻擊力的分布直方圖,bins=10
x = df['Attack']
num_bins = 10
n, bins, patches = plt.hist(x, num_bins, facecolor='blue', alpha=0.5)
plt.title('Histogram')
plt.xlabel('Attack')
plt.ylabel('Value')
plt.show()

output_101_0.png
展示所有寶可夢(mèng)Type 1的餅圖
plt.figure(1, figsize=(8,8))
df['Type 1'].value_counts().plot.pie(autopct="%1.1f%%")
plt.legend()

output_103_1.png
展示所有寶可夢(mèng)Type 1的柱狀圖
ax = df['Type 1'].value_counts().plot.bar(figsize = (12,6),fontsize = 14)
ax.set_title("Pokemon Type 1 Count", fontsize = 20)
ax.set_xlabel("Pokemon Type 1", fontsize = 20)
ax.set_ylabel("Value", fontsize = 20)
plt.show()

output_105_0.png
展示綜合評(píng)分最高的10只寶可夢(mèng)的系數(shù)間的相關(guān)系數(shù)矩陣
import seaborn as sns
top_10_pokemon=df.sort_values(by='Total',ascending=False).head(10)
corr=top_10_pokemon.corr()
fig, ax=plt.subplots(figsize=(10, 6))
sns.heatmap(corr,annot=True)
ax.set_ylim(9, 0)
plt.show()

output_107_0.png