python绘图

Matplotlib

import matplotlib.pyplot as plt
若无法显示图画记得要放在一起写不要分开写

######添加数值

for a,b in zip(ls1,ls2):
plt.text(a, b,’%.0f’%b, ha = ‘center’,va = ‘bottom’,fontsize=10)

#####创建画布
方法1:创建简单画布
figure_1 = plt.figure()
方法2:创建复杂画布
figure_1 = plt.figure(1,(8,4),dpi=140,facecolor=’red’,edgecolor=’yellow’,frameon=True)
注释: 1代表画布编号,8,4表示宽高比,dpi表示像素,facecolor表示底色,edgecolor表示边角色frameon=Teue表示是绘制边框

#####创建画框
①分割画布创建画框
aapic_1 = figure_1.add_subplot(2,2,1) #表示分成2行2列,其中的编号1的画框,编号顺序从左到右从上到下
aapic_1 = figure_1.add_subplot(2,2,2)
aapic_1 = figure_1.add_subplot(2,2,3)
aapic_1 = figure_1.add_subplot(2,2,4)
plt.show()

画线状图

创建一个画布
figure_2 = plt.figure(1,(6,4),dpi=140,frameon=True)
创建一个画框
axes1 = figure_2.add_subplot(1,1,1)
形成线图
axes1.plot(np.arange(0,10),np.random.normal(3,1.6,10,’b -‘)
b表示线颜色为蓝色, 表示点为 ,-表示线为实线

画直方图

fgs = np.random.randn(1000)
创建一个画布
figure_2 = plt.figure(1,(6,4),dpi=140,frameon=True)
创建一个画框
axes1 = figure_2.add_subplot(1,1,1)
创建直方图
axes1.hist(fgs,bins=20) #bins表示分成多少组

散点图

x = np.linspace(-3,3,100)
一步创建画框画布
sfg,axes = plt.subplots(1,1,dpi=140,figsize(6,4))
绘制散点图
axes1.scatter(x,np.cos(x),c=’b’,marker=’ ‘) #x表示x轴,np.cos(x)表示纵轴,c=’b’表示颜色为蓝色,,marker=’ ‘表示外形为 .

饼图

Asx,sd=plt.subplots(1,1) #一行一列遵循数组编号
sd.pie(np.arange(4,9),explode=[0.2,0.1,0.3,0.4,0.3],labels=[‘1’,’2’,’3’,’4,’5’],colors=[‘m’,’r’,’g’,’c’,’b’],autopct=’%.2f%%’,pctdistance=1,shadow=True,labeldistance=1.6,startangle=30,radius=1,frame=True,rotatelabels=True)
np.arange(4,9)用来分块分成5块,explode表示爆炸系数,labels表示标签名,colors表示各个标签对应图的颜色,shadow表示阴影,radius圆半径,autopct指定数值的显示方式,labeldistance每一项的名称label和距离圆心的半径,pctdistance每一项的比例autopct和距离圆心的半径,frame表的轴框架,rotatelabels旋转每个label到指定的角度,startanglex轴逆时针旋转饼图的开始角度.

如果不涉及子图的话,无需先设置画布。可直接画出图形:
plt.plot(np.random.randn(30).cumsum(),’g –’)
等价于Plt.plot(np.random.randn(30).cumsum(),color=’g’,linestyle=’dashed’,marker=’ ’)
plt.plot(data_uique,’r-‘,drawstyle=’steps-post’,label=’line’)====label=’line’标识线型
plt.legend(loc=’best’) 线标签的位置放在最好的地方 plt.legend也可以

刻度和标签

Xlim(X值范围)、xticks(X轴刻度值)和xticklabels(X轴刻度标签)
ticks_1=ax.set_xticks([0,25000,50000,75000,100000])” 分组的组距
scale_name=ax.set_xticklabels([‘step1’,’step2’,’step3’,’step4’,’step5’],rotation=45,fontsize=12) 分组对应的标签名
ax.set_title(‘Python-03 Practice’) 设置画框标题 ,使用画布加标题不需要set
ax.set_xlabel(‘Steps’) 设置x轴标签
ax.set_ylabel(‘Values’) 设置y轴标签
subpic.text(90,35,’key point one’,fontsize=10) 位置定坐标位置添加注解
keymenge=[(67,57,’key point two’),(23,66,’key point two’)] 添加多个注解可以通过循环列表实现
subpic.annotate(‘beautyful point’,xy=(5,23),xytext=(5,23)) 宁一种加注解方式
plt.savefig(‘Desktop python_01.png’,dpi=400,bbox_inches=’tight’) 保存图片

线型和marker表格:

‘-‘ solid line style
‘–’ dashed line style
‘-.’ dash-dot line style
‘:’ dotted line style
‘.’ point marker
‘,’ pixel marker
‘o’ circle marker
‘v’ triangle_down marker
‘^’ triangle_up marker
‘<’ triangle_left marker
‘>’ triangle_right marker
‘1’ tri_down marker
‘2’ tri_up marker
‘3’ tri_left marker
‘4’ tri_right marker
‘s’ square marker
‘p’ pentagon marker
‘ ‘ star marker
‘h’ hexagon1 marker
‘H’ hexagon2 marker
‘+’ plus marker
‘x’ x marker
‘D’ diamond marker
‘d’ thin_diamond marker
‘|’ vline marker
‘_’ hline marker
颜色表格:
‘b’ blue
‘g’ green
‘r’ red
‘c’ cyan
‘m’ magenta
‘y’ yellow
‘k’ black
‘w’ white

Pandas作图

线性图
1
2
3
4
import pandas as pd
import numpy as np
ser=pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
ser.plot()

eries线形
Series.plot 方法的常用参数汇总:
| label | 用于设置图例的标签 |
| ——— | ———————————————————— |
| ax | 确定要被绘制的matplotlib subplot对象。如果没有设置,则使用当前matplotlib subplot |
| style | 设置传给matplotlib的风格字符串(’g*–’) |
| alpha | 图表的填充不透明度(数值为0到1之间的数) |
| kind | 各种图形样式line, bar, barh, kde, density, scatter |
| logy | 在Y轴上使用对数标尺 |
| use_index | 将对象(Series and DataFrame)的索引用作刻度标签 |
| rot | 旋转度数(0到360) |
| xticks | 用作X轴刻度的值 |
| yticks | 用作y轴刻度的值 |
| xlim | x的值域 |
| ylim | y的值域 |
| grid | 设置是否显示轴网格线 |

1
2
3
4
5
6
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Frame_01=pd.DataFrame([[2,4,8,16,32,64],[3,6,12,24,48,96],[5,10,15,20,25,30],[1,3,5,7,9,11],[16,8,4,2,1,0.5]],index=range(0,100,20),columns=['A','B','C','D','E','F'])
pic_2,subplot_object=plt.subplots(1,1)
Frame_01.plot(kind='line',ax=subplot_object,subplots=False,layout=False,logx=True,xlim=[0,100])

ataframe线形
DataFrame的plot的参数
| Subplots | 将依据数据框中的每个列绘制的图分别放置到单个的subplot(子画框)里 |
| ———— | ———————————————————— |
| sharex | Subplots=true时,设定是否共享X的刻度和值域 |
| sharey | Subplots=true时,设定是否共享y的刻度和值域 |
| figsize | 元组,用来表示图像大小(宽,高) |
| title | 设置图像标题 |
| Legend | 设定是否添加一个subplot图例 |
| sort_columns | 设定是否以字母表中字母先后排列顺序绘制各列。 |

柱状图
1
2
3
4
5
6
7
8
9
10
11
Series生成柱状图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
figure_1,get_information_of_pict=plt.subplots(2,1)
datas=pd.Series(np.random.rand(20),index=list('qwertyuiopasdfghjklz'))
datas.plot(kind='barh',ax=get_information_of_pict[0],figsize=(8,12),color='g')
Out[4]: <matplotlib.axes._subplots.AxesSubplot at 0x5be13ea6d8>
datas.plot(kind='bar',ax=get_information_of_pict[1],figsize=(8,12),color='r')
Out[5]: <matplotlib.axes._subplots.AxesSubplot at 0x5be18c41d0>
plt.show()

eries柱状

1
2
3
4
5
6
7
8
9
10
11
数据框生成柱状图
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
Framedata_1=pd.DataFrame(np.arange(16).reshape(4,4)**(1/2)+np.arange(16).reshape(4,4)*3+6,index=['spring','sommer','autumn','winter'],columns=['Benz','BMW','Porsche','VW'])
import matplotlib.pyplot as plt
picrange,pic_inf=plt.subplots(2,1)
Framedata_1.plot(kind='bar',ax=pic_inf[0],title='2018年德系车销售额',rot=50,figsize=(8,12))
Framedata_1.plot(kind='barh',ax=pic_inf[1],title='2018年德系车销售额',rot=130,figsize=(8,12))
plt.show()

ataframe柱状

绘制立体图

1
2
3
4
5
6
7
8
9
10
11
12
13
参数:
X , Y , Z 数据值为二维数组
rstride 数组行步幅(步长)
cstride 数组列步幅(步长)
rcount 最多使用行,默认为50
ccount 最多使用列,默认为50
颜色 曲面片的颜色
cmap 曲面片调色板。
facecolors 单个曲面片的表面色
norm 一个标准化实例,用于将值映射到颜色
vmin 映射的最小值
vmax 映射的最大值
shade 是否遮蔽表面色
曲面图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
例子:非参数化坐标轴下曲面图
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random
def fun(x, y):
return np.sqrt(x**2 + y**2)
fig = plt.figure(0,dpi=120,figsize=(6,6))
ax = fig.add_subplot(111, projection='3d')
x = y = np.linspace(-5.0, 5.0, 100)
X, Y = np.meshgrid(x, y)
zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(Y.shape)
ax.plot_surface(X, Y, Z,cmap='jet')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
#(np.ravel(X)).shape
plt.show()

面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
例子:参数化坐标轴下的三维球
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
u = np.linspace(0,2*np.pi,1000)
v = np.linspace(0,np.pi,1000)
x=10*np.outer(np.sin(v),np.cos(u))
y=10*np.outer(np.sin(v),np.sin(u))
z=10*np.outer(np.cos(v),np.ones(len(np.cos(v))))
#创建二维数据集X,Y和Z,注意他们的值必须在各矩阵相同位置处一一对应。
fig=plt.figure(0,figsize=(8,8),dpi=120)
ax=fig.add_subplot(1,1,1,projection='3d')
#ax.plot_surface(x,y,z,rcount=1000,ccount=1000,cmap='coolwarm')#太浪费时间了,用下面替换语句
ax.plot_surface(x,y,z,cmap='hot')
plt.show()

形

曲线图
1
2
3
4
5
6
7
8
9
10
11
12
13
例子:我的葫芦
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(0,dpi=100,figsize=(6,6))
ax = fig.add_subplot(1,1,1, projection='3d')
theta = np.linspace(-20 * np.pi, 20 * np.pi, 1000)
z = np.linspace(0,10,1000);phi=np.linspace(0,2*np.pi,1000)
r=z*np.sin(phi)
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='curve')
ax.legend()
plt.show()

线

边框图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
线框图
例子:
import numpy as np
def fun(x,y):
return np.power(x,2)+np.sin(np.power(y,2))*x

fig1=plt.figure(0,dpi=160,figsize=(8,8))
ax=Axes3D(fig1)#三维化画布并产生三维画框
X=np.arange(-3,3,0.05)
Y=np.arange(-3,3,0.05)
X,Y=np.meshgrid(X,Y)#生成坐标点
Z=fun(X,Y)
plt.title('python-08')
ax.plot_wireframe(X, Y, Z, rstride=3, cstride=3)#一定要调节成大的扫描步长才有效果
ax.set_xlabel('x label', color='r')
ax.set_ylabel('y label', color='g')
ax.set_zlabel('z label', color='b')
plt.show()

格

#####等高线图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
*X*, *Y*, *Z*     数组型数据
*extend3d* 是否在3D中扩展等高线图(默认值:False)
*stride* *步幅*,用于扩展等高线图的步幅(步长)
*zdir* 等高线图产生方向: x, y 或 z (default)
*offset* 如果赋值,绘制等高线投影到垂直于zdir并且通过偏移量确定位置的平面

例子:
import numpy as np

def fun(x,y):
return (1/(2*np.pi))*np.exp(-0.5*(x**2+y**2))
fig1=plt.figure(0,dpi=160,figsize=(8,8))
ax=Axes3D(fig1)#三维化画布并产生三维画框
X=np.arange(-3,3,0.05)
Y=np.arange(-3,3,0.05)
X,Y=np.meshgrid(X,Y)#生成坐标点
Z=fun(X,Y)
plt.title('python-08')
ax.plot_surface(X, Y, Z, rstride=3, cstride=3,cmap='jet')
ax.contour(X, Y, Z, zdir='z',offset=0.16,cmap='coolwarm')
cset = ax.contour(X, Y, Z, zdir='x', offset=-3, cmap='coolwarm')
cset = ax.contour(X, Y, Z, zdir='y', offset=3, cmap='coolwarm')
ax.set_xlabel('x label', color='r')
ax.set_ylabel('y label', color='g')
ax.set_zlabel('z label', color='b')
plt.show()

势线