记录一些用python和matlab画基本函数图像的基本代码,应用时可以根据要求修改数值,增添内容。
- python
- numpy 可用来存储和处理大型数组或矩阵,比Python自带列表要高效的多。
- Matplotlib是Python的2D绘图库,以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。如曲线图、条形图、直方图、饼图、散点图等等。
- -pyplot.plot(x,y)→画曲线图
-
-pyplot.bar(x,柱高度,柱宽度,颜色)→柱状图
-
-pyplot.text(x,y,内容,垂直/水平对齐方式)→ 文本
-
-pyplot.barh(y,条宽度,条高度,颜色)→水平条形图
- -pyplot.pie(比例,说明文字,百分比格式,中心距离)
- -pyplot.scatter(x,y,样式,大小,颜色)
- -pyplot.savefig(保存图片路径)
- -pyplot.subplot(格式)→ 等分画布,多图显示
- figure.figsize :图形的默认大小(宽度,高度)
- axes.titlesize :坐标轴标题的字体大小
- lines.linewidth :线条的默认宽度
- text.color :文本的颜色
- image.cmap :用于图像的颜色映射
-
曲线图
- python
#曲线图
#例子一 一个函数
import numpy as np
import matplotlib.pyplot as plt
plt.title ('y=x**2') #设置标题
x=np.arange(-100,100) #生成-100~99的数组
y=x**2 #对应x平方的数组
plt.plot(x,y) #绘制曲线
plt.show #显示图形
#例子二 两个函数,同一张图上显示
import numpy as np
from matplotlib import pyplot as plt
plt.title('y=x的平方') #设置标题
#解决中文乱码问题,字体为'SimHei'
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决x轴负号显示问题
plt.rcParams['axes.unicode_minus']=False
plt.xlabel('年度',fontsize=15) #x轴标签
plt.ylabel('销售额',fontsize=15) #y轴标签
ticks =[-100,-50,0,50, 100] #×轴刻度值
labels = ['2018','2019','2020','2021','2022'] #x轴刻度名
#设置刻度,刻度值与刻度名数量一致,名称逆时针旋转45°
plt.xticks(ticks, labels, rotation = 45)
x= np.arange(-100, 100) #×的取值范围
y=x**2 #y的曲线方程式
y2=x*20+10 #y2的直线方程式
#绘制曲线图y1和y2,设置线宽,图例标签名称
plt.plot(x,y,linewidth=5,label='商品1')
plt.plot(x,y2,linewidth=3,label='商品2')
plt.legend(loc=9)#显示图例(上右)
#利用等差数列,在曲线标注数据
x=np.linspace(-100,100,5)
y =x**2
for x, y in zip(x,y):
plt.text(x,y,y)
#显示绘图窗口
plt.show()
#例子三 两个函数,多图显示
import numpy as np
from matplotlib import pyplot as plt
#211:等分画布,分为2行1列,第1个位置
plt.subplot(211,title='test1',xlabel='x1')
plt.plot(range(50,71),marker='o') # 曲线节点
plt.grid() #显示网格
# 212:等分画布,分为2行1列,第2个位置
plt.subplot(212,title='test2',xlabel='x1')
plt.plot(np.arange(10)**2, marker='H')
plt.tight_layout() # 紧凑布局,否则可能有文字重叠
plt.show()
- matlab
clear;
clc;
close all;
x=linspace(1,200,100); %均匀生成数字1-200,共计100个
y1=log(x)+1; %生成函数y=log(x)+1
y2=log(x)+2; %生成函数y=log(x)+2
figure;
plot(x,y1); %作图 y=log(x)+1
hold on
plot(x,y2,'Linewidth',2); %作图y=log(x)+2,LineWidth指线性的宽度,粗细尺寸2
hold off %关闭多图共存在一个窗口上
legend('y1','y2'); %生成图例y1和y2
-
直方图/柱状图
#直方图
#例子一
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('数学成绩分数段统计')
plt.xlabel('数学')
plt.ylabel('分数')
#100~150分的365个数学成绩
scores = np.random.randint(100,151,356)
#创建直方图,10个范围区间,白色边缘
n,b,p = plt.hist(scores,bins=10,edgecolor='w')
# n:每个柱子高度,b:每个bin区间,p:每个bin包含数据
# 在顶部显示数量
width =(b[1] - b[0])/2
for i in range(len(n)):
plt.text(b[i] + width,n[i], int(n[i]),
va='bottom',ha='center')
plt.show()
#例子二
import numpy as np
import matplotlib.pyplot as plt
#随机生成10000个符合正态分布的数列
x= np.random.randn(10000)
#绘制条直方图,100个区间段
plt.hist(x,bins=100)
plt.show()
A=[60.689;87.714;143.1;267.9515];
C=[127.5;160.4;231.9;400.2];
B=C-A;
D=[A,B,C];
bar1=bar([2:5:17],A,'BarWidth',0.2,'FaceColor','k');
hold on;
bar2=bar([3:5:18],B,'Barwidth',0.2,'FaceColor',[0.5 0.5 0.5]);
hold on;
bar3=bar([4:5:19],C,'BarWidth',0.2,'Facecolor','w');
ylabel('耗时/s');
xlabel('GMM阶数');
legend('训练耗时','测试耗时','总耗时');
labelID={'8阶','16阶','32阶','64阶'};
set(gca,'XTick',3:5:20);
-
饼图
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('2023年国内手机市场占有率')
# 标签和数值
labels = ['vivo','荣耀','OPPO','Apple','小米','其他']
x2023 =[400,420,470,490,410,576]
# 扇形距离中心分离参数
ex = [0.3,0.05, 0.05, 0.05,0.05, 0.05]
# 扇形标签、百分比标签远离中心距离的百分比
plt.pie(x2023, labels=labels,
autopct='%.2f%%', explode=ex,
labeldistance=1.1, pctdistance=0.5)
#图例
plt.legend(loc=3)
plt.show()
-
散点图
import numpy as np
from matplotlib import pyplot as plt
#设置x和y
x= np.arange(1,10)
y= np.array([1,2,3,4,6,8,7,9,10])
#随机大小
size = np.random.randint(50,200,9)
#随机颜色数值
color = np.random.randint(100,200,9)
#绘制散点图
plt.scatter(x, y, marker='o',s=size, c=color)
#保存图片到d盘,savefig()一定要写在show()前面
plt.savefig('e:/test.png')
plt.show()
figure;
x=linspace(1,200,100);
yl=log(x)+1;
y3=yl+rand(1,100)-0.5;
plot(x,y1,'LineWidth',2,'Color',[0.21,0.21,0.67]);
hold on;
%设置数据点的型状、数据点的填充颜色、数据点的轮廓颜色
plot(x,y3,'o','LineWidth',2,'Color',[0.46,0.63,0.90],'MarkerFaceColor',[0.35,0.90,0.89],'MarkerEdgeColor',[0.18,0.62,0.17]);
hold off;
-
多图显示
import numpy as np
from matplotlib import pyplot as plt
#211:等分画布,分为2行1列,第1个位置
plt.subplot(211,title='test1',xlabel='x1')
plt.plot(range(50,71),marker='o') # 曲线节点
plt.grid() #显示网格
# 212:等分画布,分为2行1列,第2个位置
plt.subplot(212,title='test2',xlabel='x1')
plt.plot(np.arange(10)**2, marker='H')
plt.tight_layout() # 紧凑布局,否则可能有文字重叠
plt.show()
-
填充图
x=0.4:0.1:2*pi;
y1=sin(2*x);
y2=sin(x);
%确定有y1和y2的上下边界
maxY=max([y1;y2]);
minY=min([y1;y2]);
%确定填充多边形,按照顺时针方向来确定点
%fliplr实现左右翻转
xFill=[x,fliplr(x)];
yFill=[maxY,fliplr(minY)];
figure;
fill(xFill,yFill,[0.21,0.21,0.67]);
hold on;
%描绘轮廓线
plot(x,y1,'k','LineWidth',2);
plot(x,y2,'k','LineWidth',2);
hold off;
-
箱线图
import numpy as np
from matplotlib import pyplot as plt
#创建测试数据
x= np.array([10, 50, 60, 80, 100])
# 画箱线图,显示平均值点(默认绿色点)
plt.boxplot(x,showmeans=True)
#显示网格
plt.grid()
plt.show()