一、基础介绍
--------------------------------------------------------------------------------
plt.plot(X, Y, 'b') -------- 'b' 蓝色
plt.plot(X, Y, 'bo') -------- 'bo' 蓝色圆形散点图
plt.plot(X, Y, 'bv') -------- 'bv' 蓝色三角散点图
plt.plot(X, Y, 'bo--') -------- 'bo--' 蓝色圆形连续图
--------------------------------------------------------------------------------
plt.plot([0, 80], [theta1 * 0 + theta0, theta1 * 80 + theta0], 'r--')
- 结果图像如下:
二、常见图形
三、代码实例
1、导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] ---------显示中文
mpl.rcParams['axes.unicode_minus'] = False
=======================================================================================
%matplotlib tk --------图像在外部
%matplotlib inline --------图像在内部
2、代码
# 折线图
# plt.plot(x,y)
# label 线条的图例
# color 颜色 颜色英文单词 或者16进制色
# linestyle 线条的形状 --虚线 - 实线 -.
# linewidth 线条的宽度
# marker 标记点形状
# 简写形式 "颜色标记点样式线条样式"
# plt.plot([1,2,3],[50,70,65])
x=np.arange(-3,3,0.5)
y=np.cos(x)
y1=np.sin(x)
plt.figure(figsize=(8,5)) # figure() 图形,可以理解为现实的画板
plt.plot(x,y,label="cos",color="red",linestyle=':',marker='o',linewidth=3)
plt.plot(x,y1,"b|-",label='sin')
plt.legend()
plt.show() # 生成图形
===================================================================================
# 3个人的成绩
# plt.plot()
# plt.xticks() plt.yticks() 设置刻度
# plt.xlabel() plt.ylabel() 设置x轴y轴标签显示
# plt.xlim() plt.ylim() 设置范围
# 在图形化界面中显示
# %matplotlib tk
# 在行内显示
# %matplotlib inline
persons=['Tom','jerry','anne']
scores=[90,88,37]
plt.plot(range(len(persons)),scores)
plt.xticks(range(len(persons)),persons) # 设置刻度 如果写了一个参数,那么就把参数的值当成刻度 ,如果写了两个值,把第一个作为绘图位置,第二个作为显示的效果
override = {
'fontsize' : 'small',
'verticalalignment' : 'center',
'horizontalalignment' : 'left',
'rotation':'horizontal',
"align":"right",
}
plt.xlabel("姓名",override)
plt.ylabel("分数")
plt.ylim(0,120)
plt.title("成绩折线图")
ax=plt.gca()
ax.spines['right'].set_color("none")
ax.spines['top'].set_color("none")
plt.show()
3、实例
实例1:
plt.figure(figsize=(10,6)) ------------ 创建画板对象
inDatas = [600,700,800]
outDatas = [500,900,1000]
index = np.arange(0,len(inDatas)) ----------- 生成x轴的数字字段,建议先生成数字字段再修改为字符串字段
width = 0.2/2
x1_index = index - width/2
x2_index = index + width/2
plt.bar(x1_index,inDatas,width = width,label = '进口数据 单位/美元')
plt.bar(x2_index,outDatas,width = width,label = '出口数据 单位/美元')
plt.xticks(index,['一月份','二月份','三月份']) ------------- 修改x轴的字段名
for i in range(len(inDatas)): -----------标记数据数值
plt.text(x1_index[i]-0.025,inDatas[i]+10,str(inDatas[i]))
for i in range(len(outDatas)):
plt.text(x2_index[i]-0.025,outDatas[i]+10,str(outDatas[i]))
plt.xlabel('季度/月') ---------x,y轴标签
plt.ylabel('数据量')
plt.title('季度数据量') ------------- 标题
ax = plt.gca() -------------- 去掉上下框
ax.spines['top'].set_color('None')
ax.spines['right'].set_color('None')
plt.legend() -------------- 显示图例
plt.show() -------------- 显示图像
实例2:
4、Series 与 DataFrame中的 .plot()方法:
inDatas = [600,700,800]
outDatas = [500,900,1000]
df_data = pd.DataFrame([inDatas,outDatas],index=['进口数据','出口数据'],columns = ['第一季度','第二季度','第三季度'])
df_data.plot(kind = 'bar') # ------------------- DataFrame 对象的 .plot() 方法
plt.show()
5、matplotlib 画多元函数
https://blog.csdn.net/liuxiao214/article/details/78975792 ------------------ 二维及三维图像
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D ----- 导入3d方法
from matplotlib import cm
def func(x,y): # 自定义函数数
return 0.3+x -2*y
fig = plt.figure()
ax = Axes3D(fig) ----- 3d对象
x1 = np.arange(0,4,1)
x2 = np.arange(0,5,1)
X,Y = np.meshgrid(x1,x2) ----- x1,x2网格化函数,结果是一个二(多维,根据自变量维度)维数组
print(X,Y)
point = list(zip(X.flatten(),Y.flatten())) ----- 映射坐标点,如果直接利用numpy元素级操作则不需要映射坐标点
print(point)
z = np.array(list(map(lambda t:func(t[0],t[1]),point))) ----- 计算z函数值
z.shape = X.shape --------- 这一步很重要,将z的维度转化为与X相同的维度
ax.plot_surface(X,Y,z) -------- 画出图形(它只能画二维自变量的图形)
plt.show()
================================== 另一种做法:numpy的元素级操作 ========================
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
fig = plt.figure()
ax = Axes3D(fig)
x1 = np.arange(0,4,1)
x2 = np.arange(0,5,1)
X,Y = np.meshgrid(x1,x2)
z = 0.3+X-2*Y --------- 元素级操作函数
ax.plot_surface(X,Y,z)
plt.show()
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import pyplot as plt
fig = plt.figure()
ax = Axes3D(fig) ----------- 3d对象
x=np.arange(-2*np.pi,2*np.pi,0.1)
y=np.arange(-2*np.pi,2*np.pi,0.1)
X, Y = np.meshgrid(x, y) #网格的创建,这个是关键
Z=np.sin(X)*np.cos(Y) ------------ 元素级操作
plt.xlabel('x')
plt.ylabel('y')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow') ------- 后面的参数是颜色
plt.show()
================ 三维空间散点图 ===============================
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X = np.array([[10,1],[20,1],[30,1],[30,2],
[70,3],
[70,2]
])
Y = np.array([[0.8],[1.8],[2.2],
[2.5],
[5.5],
[5.2]
])
def plot_(X,Y):
x = X[:,0].reshape((-1,1))
y = X[:,1].reshape((-1,1))
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x,y, Y)
plt.show()
print(x,y)
plot_(X,Y)
fig = plt.figure(facecolor='w')
x_list = np.array(x_list).reshape(-1)
y_list = np.array(y_list).reshape(-1)
print(x_list)
print(y_list)
ax = Axes3D(fig)
Z = F_xy(x_list,y_list).reshape(-1)
print(Z)
X1 = np.arange(-10, 11, 0.2)
X2 = np.arange(-10, 11, 0.2)
X1, X2 = np.meshgrid(X1, X2)
Z2 = np.array(F_xy(X1, X2))
Z2.shape = X1.shape
# 画图
ax.plot_surface(X1, X2, Z2, rstride=1, cstride=1, cmap=plt.cm.jet) ------- 三维空间的平面图
================ 三维空间点线图 ===============================
plt.plot(x_list,y_list,Z,'ro-') ---------- 三维空间的点线图 (plot 需要一维的参数)
plt.show()