小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

50題Matplotlib從入門到精通

 heii2 2020-02-26

導(dǎo)讀:Matplotlib 是 Python 的繪圖庫。它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案,也可以和圖形工具包一起使用。和Pandas、NumPy并成為數(shù)據(jù)分析三兄弟(我自己想的)。

相比其他圖形庫Seaborn、pyecharts、plotly、bokeh、pandas_profiling ,雖然這個庫丑丑呆呆的,甚至有點難用,但人家畢竟是開山始祖,方法全,能夠支持你各類騷操作的需求??梢哉f是現(xiàn)在Python數(shù)據(jù)分析中,用的人最多的圖形庫了。

作者:王大毛

來源:Python大數(shù)據(jù)分析(ID:pydatas)

▲某網(wǎng)站對于Python可視化庫的排名

完整版運行結(jié)果:

https://www./home/project/5de9f0a0953ca8002c95d2a9

01 導(dǎo)入

1. 導(dǎo)入Matplotlib庫簡寫為plt

import matplotlib.pyplot as plt

02 基本圖表

2. 用plot方法畫出x=(0,10)間sin的圖像

x = np.linspace(01030)
plt.plot(x, np.sin(x));

3. 用點加線的方式畫出x=(0,10)間sin的圖像

plt.plot(x, np.sin(x), '-o');

4. 用scatter方法畫出x=(0,10)間sin的點圖像

plt.scatter(x, np.sin(x));

5. 用餅圖的面積及顏色展示一組4維數(shù)據(jù)

rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)

plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
           cmap='viridis')
plt.colorbar(); # 展示色階

6. 繪制一組誤差為±0.8的數(shù)據(jù)的誤差條圖

x = np.linspace(01050)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)

plt.errorbar(x, y, yerr=dy, fmt='.k')

7. 繪制一個柱狀圖

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);

8. 繪制一個水平方向柱狀圖

plt.barh(x,y,tick_label = label);

9. 繪制1000個隨機值的直方圖

data = np.random.randn(1000)
plt.hist(data);

10. 設(shè)置直方圖分30個bins,并設(shè)置為頻率分布

plt.hist(data, bins=30,histtype='stepfilled', density=True)
plt.show();

11. 在一張圖中繪制3組不同的直方圖,并設(shè)置透明度

x1 = np.random.normal(00.81000)
x2 = np.random.normal(-211000)
x3 = np.random.normal(321000)

kwargs = dict(alpha=0.3, bins=40, density = True)

plt.hist(x1, **kwargs);
plt.hist(x2, **kwargs);
plt.hist(x3, **kwargs);

12. 繪制一張二維直方圖

mean = [00]
cov = [[11], [12]]
x, y = np.random.multivariate_normal(mean, cov, 10000).T
plt.hist2d(x, y, bins=30);

13. 繪制一張設(shè)置網(wǎng)格大小為30的六角形直方圖

plt.hexbin(x, y, gridsize=30);

03 自定義圖表元素

14. 繪制x=(0,10)間sin的圖像,設(shè)置線性為虛線

x = np.linspace(0,10,100)
plt.plot(x,np.sin(x),'--');

15. 設(shè)置y軸顯示范圍為(-1.5,1.5)

x = np.linspace(0,10,100)
plt.plot(x, np.sin(x))
plt.ylim(-1.51.5);

16. 設(shè)置x,y軸標(biāo)簽variable x,value y

x = np.linspace(0.0510100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.xlabel('variable x');
plt.ylabel('value y');

17. 設(shè)置圖表標(biāo)題“三角函數(shù)”

x = np.linspace(0.0510100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.title('三角函數(shù)');

18. 顯示網(wǎng)格

x = np.linspace(0.0510100)
y = np.sin(x)
plt.plot(x, y)
plt.grid()

19. 繪制平行于x軸y=0.8的水平參考線

x = np.linspace(0.0510100)
y = np.sin(x)
plt.plot(x, y)
plt.axhline(y=0.8, ls='--', c='r')

20. 繪制垂直于x軸x<4 and x>6的參考區(qū)域,以及y軸y<0.2 and y>-0.2的參考區(qū)域

x = np.linspace(0.0510100)
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軸

21. 添加注釋文字sin(x)

x = np.linspace(0.0510100)
y = np.sin(x)
plt.plot(x, y)
plt.text(3.20'sin(x)', weight='bold', color='r');

22. 用箭頭標(biāo)出第一個峰值

x = np.linspace(0.0510100)
y = np.sin(x)
plt.plot(x, y)
plt.annotate('maximum',xy=(np.pi/21),xytext=(np.pi/2+11),
            weight='bold',
            color='r',
            arrowprops=dict(arrowstyle='->', connectionstyle='arc3', color='r'));

04 自定義圖例

23. 在一張圖里繪制sin,cos的圖形,并展示圖例

x = np.linspace(0101000)
fig, ax = plt.subplots()

ax.plot(x, np.sin(x), label='sin')
ax.plot(x, np.cos(x), '--', label='cos')
ax.legend();

24. 調(diào)整圖例在左上角展示,且不顯示邊框

ax.legend(loc='upper left', frameon=False);
fig

25. 調(diào)整圖例在畫面下方居中展示,且分成2列

ax.legend(frameon=False, loc='lower center', ncol=2)
fig

26. 繪制sin(x), sin(x+π/2), sin(x+π)的圖像,并只顯示前2者的圖例

y = np.sin(x[:, np.newaxis] + np.pi * np.arange(020.5))
lines = plt.plot(x, y)

# lines 是 plt.Line2D 類型的實例的列表
plt.legend(lines[:2], ['first''second']);

# 第二個方法
#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);

27. 將圖例分不同的區(qū)域展示

fig, ax = plt.subplots()

lines = []
styles = ['-''--''-.'':']
x = np.linspace(0101000)

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);

05 自定義色階

28. 展示色階

x = np.linspace(0101000)
I = np.sin(x) * np.cos(x[:, np.newaxis])

plt.imshow(I)
plt.colorbar();

29. 改變配色為'gray'

plt.imshow(I, cmap='gray');

30. 將色階分成6個離散值顯示

plt.imshow(I, cmap=plt.cm.get_cmap('Blues'6))
plt.colorbar()
plt.clim(-11);

06 多子圖

31. 在一個1010的畫布中,(0.65,0.65)的位置創(chuàng)建一個0.20.2的子圖

ax1 = plt.axes()
ax2 = plt.axes([0.650.650.20.2])

32. 在2個子圖中,顯示sin(x)和cos(x)的圖像

fig = plt.figure()
ax1 = fig.add_axes([0.10.50.80.4], ylim=(-1.21.2))
ax2 = fig.add_axes([0.10.10.80.4], ylim=(-1.21.2))

x = np.linspace(010)
ax1.plot(np.sin(x));
ax2.plot(np.cos(x));

33. 用for創(chuàng)建6個子圖,并且在圖中標(biāo)識出對應(yīng)的子圖坐標(biāo)

for i in range(17):
   plt.subplot(23, i)
   plt.text(0.50.5, str((23, i)),fontsize=18, ha='center')

# 方法二
# 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')

34. 設(shè)置相同行和列共享x,y軸

fig, ax = plt.subplots(23, sharex='col', sharey='row')

35. 用[]的方式取出每個子圖,并添加子圖座標(biāo)文字

for i in range(2):
   for j in range(3):
       ax[i, j].text(0.50.5, str((i, j)),fontsize=18, ha='center')
fig

36. 組合繪制大小不同的子圖,樣式如下

grid = plt.GridSpec(23, wspace=0.4, hspace=0.3)
plt.subplot(grid[00])
plt.subplot(grid[01:])
plt.subplot(grid[1, :2])
plt.subplot(grid[12]);

37. 顯示一組二維數(shù)據(jù)的頻度分布,并分別在x,y軸上,顯示該維度的數(shù)據(jù)的頻度分布

mean = [00]
cov = [[11], [12]]
x, y = np.random.multivariate_normal(mean, cov, 3000).T

# Set up the axes with gridspec
fig = plt.figure(figsize=(66))
grid = plt.GridSpec(44, hspace=0.2, wspace=0.2)
main_ax = fig.add_subplot(grid[:-11:])
y_hist = fig.add_subplot(grid[:-10], xticklabels=[], sharey=main_ax)
x_hist = fig.add_subplot(grid[-11:], 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()

07 三維圖像

38. 創(chuàng)建一個三維畫布

from mpl_toolkits import mplot3d
fig = plt.figure()
ax = plt.axes(projection='3d')

39. 繪制一個三維螺旋線

ax = plt.axes(projection='3d')

# Data for a three-dimensional line
zline = np.linspace(0151000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline);

40. 繪制一組三維點

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');

08 寶可夢數(shù)據(jù)集可視化

41. 展示前5個寶可夢的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()

42. 展示前5個寶可夢的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()

43. 展示前5個寶可夢的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()

44. 公用x軸,展示前5個寶可夢的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()

45. 展示前15個寶可夢的Attack,HP的折線圖

plt.plot(df['HP'][:15], '-r',label='HP')
plt.plot(df['Attack'][:15], ':g',label='Attack')
plt.legend();

46. 用scatter的x,y,c屬性,展示所有寶可夢的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();

47. 展示所有寶可夢的攻擊力的分布直方圖,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()

48. 展示所有寶可夢Type 1的餅圖

plt.figure(1, figsize=(8,8))
df['Type 1'].value_counts().plot.pie(autopct='%1.1f%%')
plt.legend()

49. 展示所有寶可夢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()

50. 展示綜合評分最高的10只寶可夢的系數(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=(106))
sns.heatmap(corr,annot=True)
ax.set_ylim(90)
plt.show()


有話要說??

Q: 你用Matplotlib實現(xiàn)過哪些騷操作?

歡迎留言與大家分享

猜你想看??


據(jù)統(tǒng)計,99%的大咖都完成了這個神操作
??

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多