数据分析四——matplotlib的补充与结合numpy,pandas使用

四、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])

在原图创建一个新的坐标系

其他操作与原图相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值