import matplotlib.pyplot as plt x = [1,2,3] y = [2,3,6] plt.plot(x,y)#绘制折线图 plt.show2、直方图
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(10000)
# bins为颗粒度、及直方图的柱形数量,edgecolor为边框颜色
plt.hist(data,bins=40,edgecolor='black')
plt.savefig("p1")
plt.show()
3、条形图
import numpy as np
import matplotlib
# matplotlib.use('nbagg')#(jupyter图形显示)
import matplotlib.pyplot as plt
# %matplotlib#(pycharm或jupyter图形独立显示)
np.random.seed(0)
x = np.arange(5)
y = np.random.randint(-5,5,5)
print (y)
fig,axes = plt.subplots(ncols = 2)
v_bars = axes[0].bar(x,y,color='red')
h_bars = axes[1].barh(x,y,color='blue')
axes[0].axhline(0,color='grey',linewidth=2)
axes[1].axvline(0,color='grey',linewidth=2)
plt.savefig('img/pi')
plt.show()
在绘图过程中,有事需要考虑误差棒,以表示数据或实验的偏离情况
variance = [0.2,0.4,0.5]
mean_values = [1,2,3]
variance = [0.2,0.4,0.5]
bar_label = ['bar1','bar2','bar3']
x_pos = list(range(len(bar_label)))
plt.bar(x_pos,mean_values,yerr=variance,alpha=0.3)
max_y = max(zip(mean_values,variance))
plt.ylim([0,(max_y[0]+max_y[1])*1.2])#[0,(max_y[0]+max_y[1])*1.2]
plt.ylabel('variable y')
plt.xticks(x_pos,bar_label)
plt.show()
有时候我们需要多组数据对比
import numpy as np
import matplotlib
# matplotlib.use('nbagg')
import matplotlib.pyplot as plt
# %matplotlib
import numpy as np
x1 = np.array([1,2,3])
x2 = np.array([2,2,3])
bar_labels = ['bat1','bar2','bar3']
fig = plt.figure(figsize = (8,6))
y_pos = np.arange(len(x1))
print(y_pos)
y_pos = [x for x in y_pos]
print(y_pos)
plt.barh(y_pos,x1,color='g',alpha = 0.5)
plt.barh(y_pos,-x2,color='b',alpha = 0.5)
plt.xlim(-max(x2)-1,max(x1)+1)
plt.ylim(-1,len(x1)+1)
plt.savefig('img/p2')
plt.show()
注意:论文如果不彩色打印,绘制打印出来的图几乎一样,没有色彩渲染,以下可以这样绘制
patterns = ('-', '+', 'x', '\', '*', 'o', 'O', '.')
fig = plt.gca()
mean_value = range(1,len(patterns)+1)
x_pos = list(range(len(mean_value)))
bars = plt.bar(x_pos,mean_value,color='white',edgecolor='black')
for bar,pattern in zip(bars,patterns):
bar.set_hatch(pattern)
plt.show()
4、盒图
梳理统计中经常用到盒图分析数据从上到下:最大值(max)、上四分位数(Q3)、中位数(median)、下四分位数(Q1)、最小值(min)
导入需要的库
import matplotlib.pyplot as plt import numpy as np
常用属性,建议直接copy(亲测实用!!)
| 属性 | 说明 |
|---|---|
| notch | 展示箱图是否凹口,默认False |
| sym | 设置异常数据样式 |
| meanline | 均值样式,这里绿色表示均值 |
| showmeans | 显示均值线 |
实例:
import matplotlib.pyplot as plt
import numpy as np
tang_data = [np.random.normal(0,std,100) for std in range(1,4)]
fig = plt.figure(figsize = (8,6))
plt.boxplot(tang_data,notch=True,sym='+',meanline=True,showmeans=True)
plt.xticks([y+1 for y in range(len(tang_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')
plt.show()
5、散点图
散点图反应数据分散情况,为以后数据建模回归分析具有很大作用
实例:
N=1000 x = np.random.randn(N) y = np.random.randn(N) plt.scatter(x,y,alpha=0.5) plt.grid(True) plt.show()
给点设置颜色添加美观
import matplotlib.pyplot as plt
import numpy as np
n = 1000
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
T = np.arctan2(Y,X)#for color later on
plt.scatter(X,Y,s = 75,c = T,alpha = .5)
plt.xlim((-1.5,1.5))
plt.xticks([])#ignore xticks
plt.ylim((-1.5,1.5))
plt.yticks([])#ignore yticks
plt.savefig('img/p6')
plt.show()
6、3D
如果需要绘制3D图,需要额外导入3D库
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D
基础三维坐标显示
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111,projection = '3d') plt.show()
3D绘制
fig = plt.figure()
ax = Axes3D(fig)
#X Y value
X = np.arange(-4,4,0.25)
Y = np.arange(-4,4,0.25)
X,Y = np.meshgrid(X,Y)
R = np.sqrt(X**2 + Y**2)
#hight value
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))
"""
============= ================================================
Argument Description
============= ================================================
*X*, *Y*, *Z* Data values as 2D arrays(数据值作为2D数组)
*rstride* Array row stride (step size), defaults to 10(数组行步幅(步长),默认为10)
*cstride* Array column stride (step size), defaults to 10(数组列步幅(步长),默认为10)
*color* Color of the surface patches(表面斑块的颜色)
*cmap* A colormap for the surface patches.(表面补丁的彩色地图)
*facecolors* Face colors for the individual patches(面部颜色的个别补)
*norm* An instance of Normalize to map values to colors(Normalize将值映射到颜色的实例)
*vmin* Minimum value to map(最小映射值)
*vmax* Maximum value to map
*shade* Whether to shade the facecolors(是否要遮光脸的颜色)
============= ================================================
"""
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow'))
"""
========== ================================================
Argument Description
========== ================================================
*X*, *Y*, Data values as numpy.arrays
*Z*
*zdir* The direction to use: x, y or z (default)(使用方向:x, y或z(默认))
*offset* If specified plot a projection of the filled contour
on this position in plane normal to zdir(如果指定,绘制填充轮廓的投影
在垂直于zdir的平面上的这个位置)
========== ================================================
"""
ax.set_zlim(-2, 2)
plt.savefig('img/p7')
plt.show()
三维柱形图
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# %matplotlib
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
xs = np.arange(20)
ys = np.random.rand(20)
cs = [c]*len(xs)
ax.bar(xs,ys,zs = z,zdir='y',color = cs,alpha = 0.5)
plt.show()



