1、matplotlib从入门到精通教程一、导入1.导入matplotlib库简写为pltimport matplotlib.pyplot as plt二、基本图表2.用plot方法画出x=(0,10)间sin的图像x = np.linspace(0, 10, 30)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维数据rng = np.random.Ran
2、domState(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的数据的误差条图x = np.linspace(0, 10, 50)dy = 0.8y = np.sin(x) + dy * np.random.randn(50)plt.errorbar(x, y, yerr=dy
3、, fmt=.k)7.绘制一个柱状图x = 1,2,3,4,5,6,7,8y = 3,1,4,5,8,9,7,2label=A,B,C,D,E,F,G,Hplt.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.设置直方图分30个bins,并设置为频率分布plt.hist(data, bins=30,histtype=stepfilled, density=True)plt.
4、show();11.在一张图中绘制3组不同的直方图,并设置透明度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);12.绘制一张二维直方图mean = 0, 0cov = 1, 1, 1, 2x, y = np.ra
5、ndom.multivariate_normal(mean, cov, 10000).Tplt.hist2d(x, y, bins=30);13.绘制一张设置网格大小为30的六角形直方图plt.hexbin(x, y, gridsize=30);三、自定义图表元素14.绘制x=(0,10)间sin的图像,设置线性为虚线x = np.linspace(0,10,100)plt.plot(x,np.sin(x),-);15设置y轴显示范围为(-1.5,1.5)x = np.linspace(0,10,100)plt.plot(x, np.sin(x)plt.ylim(-1.5, 1.5);16.设
6、置x,y轴标签variable x,value yx = 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);17.设置图表标题“三角函数”x = np.linspace(0.05, 10, 100)y = np.sin(x)plt.plot(x, y, label=sin(x)plt.title(三角函数);18.显示网格x = np.linspace(0.05, 10, 100)y = np.sin(x)plt.plot(x,
7、 y)plt.grid()19.绘制平行于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)20.绘制垂直于x轴x6的参考区域,以及y轴y-0.2的参考区域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,
8、facecolor=y, alpha=0.3); # 垂直y轴21.添加注释文字sin(x)x = np.linspace(0.05, 10, 100)y = np.sin(x)plt.plot(x, y)plt.text(3.2, 0, sin(x), weight=bold, color=r);22.用箭头标出第一个峰值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
9、, arrowprops=dict(arrowstyle=-, connectionstyle=arc3, color=r);四、自定义图例23.在一张图里绘制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();24.调整图例在左上角展示,且不显示边框ax.legend(loc=upper left, frameon=False);fig25.调整图例在画
10、面下方居中展示,且分成2列ax.legend(frameon=False, loc=lower center, ncol=2)fig26.绘制的图像,并只显示前2者的图例y = np.sin(x:, np.newaxis + np.pi * np.arange(0, 2, 0.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)#
11、plt.plot(x, y:, 2:)#plt.legend(framealpha=1, frameon=True);27.将图例分不同的区域展示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),stylesi, color=black)ax.axis(equal)# 设置第一组标签ax.legend(lines:2, line A, line B, loc
12、=upper right, frameon=False)# 创建第二组标签from matplotlib.legend import Legendleg = Legend(ax, lines2:, line C, line D, loc=lower right, frameon=False)ax.add_artist(leg);五、自定义色阶28.展示色阶x = np.linspace(0, 10, 1000)I = np.sin(x) * np.cos(x:, np.newaxis)plt.imshow(I)plt.colorbar();29.改变配色为grayplt.imshow(I, c
13、map=gray);30.将色阶分成6个离散值显示plt.imshow(I, cmap=plt.cm.get_cmap(Blues, 6)plt.colorbar()plt.clim(-1, 1);六、多子图31.在一个1010的画布中,(0.65,0.65)的位置创建一个0.20.2的子图ax1 = plt.axes()ax2 = plt.axes(0.65, 0.65, 0.2, 0.2)32.在2个子图中,显示sin(x)和cos(x)的图像fig = plt.figure()ax1 = fig.add_axes(0.1, 0.5, 0.8, 0.4, ylim=(-1.2, 1.2)a
14、x2 = 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);33.用for创建6个子图,并且在图中标识出对应的子图坐标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) # 方法二# fig = plt.figure()# fig.subplots_adjust(hspace=0.4,
15、 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.设置相同行和列共享x,y轴fig, ax = plt.subplots(2, 3, sharex=col, sharey=row)35.用的方式取出每个子图,并添加子图座标文字for i in range(2): for j in range(3): axi, j.text(0.5, 0.5, str(i, j),fontsize=18, ha=c
16、enter)fig36.组合绘制大小不同的子图,样式如下Image Namegrid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)plt.subplot(grid0, 0)plt.subplot(grid0, 1:)plt.subplot(grid1, :2)plt.subplot(grid1, 2);37.显示一组二维数据的频度分布,并分别在x,y轴上,显示该维度的数据的频度分布mean = 0, 0cov = 1, 1, 1, 2x, y = np.random.multivariate_normal(mean, cov, 3000).T# Se
17、t up the axes with gridspecfig = 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
18、 main axesmain_ax.scatter(x, y,s=3,alpha=0.2)# histogram on the attached axesx_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()七、三维图像38.创建一个三维画布from mpl_toolkits import mplot3dfig = pl
19、t.figure()ax = plt.axes(projection=3d)39.绘制一个三维螺旋线ax = plt.axes(projection=3d)# Data for a three-dimensional linezline = np.linspace(0, 15, 1000)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
20、.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);八、宝可梦数据集可视化41.展示前5个宝可梦的Defense,Attack,HP的堆积条形图pokemon = dfName:5hp = dfHP:5attack = dfAttack:5defense = dfDefense:5ind = x for x, _ in enumerate(pokemon)p
21、lt.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 r
22、ight)plt.title(5 Pokemon Defense & Attack & Hp)plt.show()42.展示前5个宝可梦的Attack,HP的簇状条形图N = 5pokemon_hp = dfHP:5pokemon_attack = dfAttack:5ind = 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 H
23、p & Attack)plt.xticks(ind + width / 2, (dfName:5),rotation=45)plt.legend(loc=best)plt.show()43.展示前5个宝可梦的Defense,Attack,HP的堆积图x = dfName:4y1 = dfHP:4y2 = dfAttack:4y3 = dfDefense:4labels = HP , Attack, Defensefig, ax = plt.subplots()ax.stackplot(x, y1, y2, y3)ax.legend(loc=upper left, labels=labels)p
24、lt.xticks(rotation=90)plt.show()44.公用x轴,展示前5个宝可梦的Defense,Attack,HP的折线图x = dfName:5y1 = dfHP:5y2 = dfAttack:5y3 = dfDefense:5# Create two subplots sharing y axisfig, (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
25、=Pokemon, ylabel=Attack)ax3.plot(x, y3, :)ax3.set(xlabel=Pokemon, ylabel=Defense)plt.show()45.展示前15个宝可梦的Attack,HP的折线图plt.plot(dfHP:15, -r,label=HP)plt.plot(dfAttack:15, :g,label=Attack)plt.legend();46.用scatter的x,y,c属性,展示所有宝可梦的Defense,Attack,HP数据x = dfAttacky = dfDefensecolors = dfHPplt.scatter(x, y,
26、 c=colors, alpha=0.5)plt.title(Scatter plot)plt.xlabel(HP)plt.ylabel(Attack)plt.colorbar();47.展示所有宝可梦的攻击力的分布直方图,bins=10x = dfAttacknum_bins = 10n, 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.f
27、igure(1, figsize=(8,8)dfType 1.value_counts().plot.pie(autopct=%1.1f%)plt.legend()49.展示所有宝可梦Type 1的柱状图ax = dfType 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只宝可梦的系数间的相关系数矩阵import seaborn as snstop_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()
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1