折线图:里面的数据不能运行只是介绍用法
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import font_manager
from matplotlib.pyplot import MultipleLocator
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体显示中文
xlist = []
ylist = []
plt.plot(xlist, ylist, color ='red', linestyle = '--')#给个xlist和ylist画函数图x是x轴坐标y是Y轴坐标存取时一一对应
#plt.plot(ylist, color ='blue', linestyle = '--')
plt.axvline(0, color='blue', linestyle='--')#绘制y轴平行线
plt.axvline(0.25, color='blue', linestyle='--',linewidth=2)
plt.axvline(0.43, color='blue', linestyle='--')
plt.axvline(0.69, color='blue', linestyle='--')
plt.axvline(1, color='blue', linestyle='--')
plt.axhline(0, color='red', linestyle='--')#绘制x轴平行线
plt.title("BaTiO3能带曲线图")#设置标题
plt.xlabel("Band energy", fontsize=12)#x轴名称
plt.ylabel("Energy(Ha)")#y轴名称
plt.tick_params(axis='both',labelsize=10)# 设置坐标轴刻度标记的大小
plt.axis([-1,1,-1,1])#这个是设置x轴y轴的左右的极限值也就是横纵坐标大小
plt.show()#显示图像
plt.xticks([1, 1.5,2,2.5, 3,3.5, 4,4.5, 5,5.5, 6],["1:20","1:25","1:30", "1:35","1:40","1:45", "1:50", "1:55", "1:60","1:70","1:75"])#这个是更改x轴的名字每个刻度变成了这个名字
这是公式造图
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 1, 50)#-1是开始点1是结束点50是每个格子的长度
y = x**2
plt.plot(x, y)
plt.show()
这是3d图
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()#建一个框
ax = Axes3D(fig)
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)
z = np.sin(r)
ax.plot_surface(x, y, z, rstride=1,cstride=1, cmap=plt.get_cmap('rainbow'))
plt.show()
这是当时学习笔记
import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl
from matplotlib.pyplot import MultipleLocator
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体解决中文转码
x = np.linspace(-1, 1, 50)#-1是开始点1是结束点50是把全长分成50份
y1 = 2*x+1
y2 = x**2
plt.figure()#num是编号figsize()是显示框大小表示新创建一个图像框不信创建的话会图像重叠
plt.plot(x, y1)
plt.figure(num = 3, figsize=(8,5))#num是编号figsize()是显示框大小
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=5.0, linestyle='--')
plt.xlim((-1,2))#x轴的左边和右边的极限值
plt.ylim((-2,3))#y轴的取值
plt.xlabel('x的描述')
plt.ylabel('y的描述')
x_major_locator = MultipleLocator(3)
ax = plt.gca()
# 把x轴的主刻度设置为1的倍数
# 把x轴的刻度间隔设置为1,并存在变量里
x_major_locator = MultipleLocator(0.5)
# 把y轴的刻度间隔设置为1,并存在变量里
y_major_locator = MultipleLocator(0.5)
# ax为两条坐标轴的实例
ax = plt.gca()
# 把x轴的主刻度设置为1的倍数
ax.xaxis.set_major_locator(x_major_locator)
# 把y轴的主刻度设置为1的倍数
ax.yaxis.set_major_locator(y_major_locator)
3d图形笔记
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 三维,两个特征
fig = plt.figure(figsize=(8, 6)) #设置图标的大小
ax = fig.add_subplot(111, projection='3d') # 111的意思是把画布分为1行1列,画在第一个方格内。其实就是整个画布。
# 创建样本,注意两个特征不能线性相关,否则无法用最小二乘解参数
X1 = np.arange(-4, 4, 0.1)
m = len(X1)
X2 = np.random.rand(m)*5
# print(X2)
# print(X1)
# 堆叠全1数组和X1以及X2形成样本的矩阵,倒置,用以矩阵乘法
X = np.vstack((np.full(m, 1), X1, X2)).T
# y = 15*X1 + 3 * X2 + theta0
# 自定义样本输出
Y = X1 + 3 * X2 + 3*np.random.randn(m)
# 利用标准方程(最小二乘法求解theta)
theta = np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(X), X)),
np.transpose(X)), Y)
print(theta)
# 构造网格 meshgrid函数可以通过延伸矩阵构造多维坐标中的网格坐标。
M, N = np.meshgrid(X1, X2)
# zip函数构建一个多元祖[(x1,y1),(x2,y2)...],ravel函数将一个多维数组合并成一维数组
Z = np.array([theta[1] * d + theta[2]*p + theta[0] for d, p in zip(np.ravel(M), np.ravel(N))]).reshape(M.shape)
# 根据网格和函数构建图形 suface是一个完整的面
#ax.plot_surface(M, N, Z)
# scatter是散点图
ax.scatter(X1, X2, Y, c='r')
# 设置坐标轴的名称
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
这是一个3d例子:
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
X1 = np.arange(-4, 4, 0.1);X2 = np.random.rand(len(X1))*10
X = np.vstack((np.full(len(X1), 1), X1, X2)).T
Y = X1 + 3 * X2 + 3*np.random.randn(len(X1))
thetac = np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(X), X)),np.transpose(X)), Y)
print(thetac)
M, N = np.meshgrid(X1, X2)
Z = np.array([thetac[1] * d1 + thetac[2]*p + thetac[0] for d1, p in zip(np.ravel(M), np.ravel(N))]).reshape(M.shape)
ax.scatter(X1, X2, Y, c='r')
ax.set_xlabel('X(*1e2nm)')
ax.set_ylabel('Y(*1e2nm)')
ax.set_zlabel('Z(*1e2nm)')
plt.show()
这是直方图:
import numpy as np
import pandas as pd
from pylab import mpl
import matplotlib.pyplot as plt
series = np.array([3, 5, 7, 10, 3])
plt.bar(x=list('ABCDE'), height=series, color='tab:green', width=.5)
plt.show()
plt.barh(y=list('abcde'), width=series, height=.5)
plt.show()
直方图操作实例可以运行:
import numpy as np
import pandas as pd
from pylab import mpl
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
mpl.rcParams['font.sans-serif'] = ['SimHei']
series = np.array([15.4, 12.3, 9.2, 6.4, 2.2])
series1 = np.array([14.3, 11.4, 7.4, 5.5, 1.1])
series2 = np.array([14.6, 9.6, 6.5, 4.3, 1.6])
labels = [1,2,3,4,5]
x = np.arange(len(labels))
width = 0.1
plt.xlabel("time(day)", fontsize=12)
plt.ylabel("Surplus of sand(cm3)", fontsize=12)
plt.bar(x-width, series, width, label='cone')
plt.bar(x, series1, width, label='Cylinder')
plt.bar(x+width, series2, width, label='Pyramid')
plt.legend()
plt.xticks(x, labels)
plt.title("The change of sand surplus caused by the impact of sea water on sand pile at different time", fontsize=7)
plt.show()