文章目录
四、matplotlib的补充与结合numpy,pandas使用
1、移动坐标轴位置
导入axis(坐标轴)数据
ax = plt.gca()
调整坐标轴位置
如:
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
data是说基于数据的值来选位置
0指在x=0,y=0时相交(与xticks无关,以原轴决定)
以例证明:
from matplotlib import pyplot as py
x=[i for i in range(-10,11)]
y=[2*j for j in x]
py.plot(x,y)
ax = py.gca()
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)#擦去右和下的边框
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
py.show()
结果为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9UCcfhiu-1667032352905)(C:\Users\10291\AppData\Roaming\Typora\typora-user-images\image-20221029110029956.png)]
2、使用annotation进行标注
方法一
plt.plot([x0,x0],[y0,0],'k--',linewidth='3')
plt.annotate('',xy=(x0,y0),xycoords='data',xytext=(+n,-n),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
第一条是画图一条垂直于x轴的虚线
''内输入标注内容
(x0,y0)是定点的位置
xycoords=data是说基于数据的值来选位置
xytext后接n来从(x0,y0)开始加减n调整标注打印的位置
arrowprops后接内容用于调整指示箭头
方法二
plt.text(x0,y0,'',fondict={'size':13,'color'='red'})
(x0,y0)是定点的位置,在这里是标注开始的位置
''内输入标注内容
3、使用pandas和numpy提供数据以绘图
导入模块
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import random
使用Series
例:
a = pd.Series(np.random.randn(100),index=np.arange(100))
a.plot()
ax = plt.gca(
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))#顺便结合上面讲的坐标轴调整
plt.show()
结果为:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-caXmIelB-1667032352906)(C:\Users\10291\Figure_6.png)]
使用DataFrame
例:
a = pd.DataFrame({'a':[1,2,3],'b':[4,5,6]},index=np.arange(1,4))
a.plot()
ax = plt.gca()
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.spines['left'].set_position(('data',1))
ax.spines['bottom'].set_position(('data',1))
plt.show()
结果为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uGEdepZk-1667032352906)(C:\Users\10291\AppData\Roaming\Typora\typora-user-images\image-20221029110920701.png)]
index对应a,b内的数个数,而columns会把a,b里的数拿出来出现分组
4、打印颜色块
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import randoma = np.array([]).reshape(m,n)
plt.imshow(a,,interplotation='',cmap='',origin='upper')
plt.colorbar(shrink=i)
[]输入数值对应颜色,(m,n)表示形状
upper为正向显示,换为lower则反向
colorbar是对照色表,shrink是缩小,设定i的值即可
interplotation设定了边界模糊度,参数有:‘none’,‘nearest’,‘bilinear’,‘bicubic’,‘spline16’, ‘spline36’,‘hanning’,‘hamming’,‘hermite’,‘kaiser’,‘quadric’,‘catrom’,‘gaussian’,‘bessel’,‘mitchell’, ‘sinc’,‘lanczos’
逐渐模糊
cmap是热力图颜色,参数有:
Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu(绿到蓝), GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd(橘色到红色), OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia(蓝绿黄), Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd(红橙黄), YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm(蓝到红), coolwarm_r, copper(铜色), copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r(红黄), hsv, hsv_r, icefire, icefire_r, inferno, inferno_r, jet, jet_r, magma, magma_r, mako, mako_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, seismic, seismic_r, spring, spring_r, summer (黄到绿), summer_r (绿到黄), tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r, twilight, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r
版权声明:本段引用自CSDN博主「兔子爱读书」
原文链接:https://blog.csdn.net/ztf312/article/details/102474190
例:
import numpy as np
from matplotlib import pyplot as plt
a = np.array([0.66,0.44,0.4,0.2,0.7,0.1,0.54,0.64,0.3]).reshape(3,3)
plt.imshow(a,interpolation='None',cmap='GnBu',origin='upper')
plt.colorbar(shrink=0.9)
plt.show()
结果为:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2JnPYRtA-1667032352906)(C:\Users\10291\AppData\Roaming\Typora\typora-user-images\image-20221029113254613.png)]
5、打印3D图像
导入模块
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
使用figure函数
ax = plt.axes(projection='3d')#创建3D坐标系
设定XYZ
如:
X = np.arange(-3,3,0.5)
Y = np.arange(-3,3,0.5)
X,Y = np.meshgrid(X,Y)#把X,Y放在底面
R = np.sqrt(X**2+Y**2)#sqrt为平方根
Z = np.sin(R)#取正弦值并转化为高度值
画图
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow')
plt.show()
rstride行跨,cstride列跨
可以画出一个奇妙的图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFiVNaIg-1667032352906)(C:\Users\10291\AppData\Roaming\Typora\typora-user-images\image-20221029160243330.png)]
如果加上
ax.contourf(X,Y,Z,zdir='z',offset=-0.75,cmap='rainbow')
因为设定了zdir=‘z’(打印在xoy平面上),offset后接的数表示打印平面偏离z=0多少
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3utAoPkK-1667032352907)(C:\Users\10291\AppData\Roaming\Typora\typora-user-images\image-20221029160644629.png)]
这种方法通常用来画等高线
6、同时打印多个图
使用subplot创建小图
如:
plt.figure()
plt.subplot(2,2,1)
plt.plot(x,y)
这样就把大图(figure)分成了2行2列,并创建了第一张图
举例说明:
from matplotlib import pyplot as plt
plt.figure()
plt.subplot(2,3,1)
plt.plot([0,1],[0,1])
plt.subplot(2,3,2)
plt.plot([0,1],[0,1])
plt.subplot(2,3,3)
plt.plot([0,1],[0,1])
plt.subplot(2,1,2)#2是相对于2行1列的排列结果
plt.plot([0,1],[0,1])
plt.show()
结果为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NvMOgAjz-1667032352907)(C:\Users\10291\AppData\Roaming\Typora\typora-user-images\image-20221029162637108.png)]
7、创建画中画
使用
fig.add_axes([left/right,top/bottom,width,height])
在原图创建一个新的坐标系
其他操作与原图相同