数学建模(Python)
循环语句
for i in range(1, 10, 1):
print(i, end=" ")
#输出:
#1 2 3 4 5 6 7 8 9
i = 1
n = 10
while i < n:
print(i, end=" ")
#输出:
#1 2 3 4 5 6 7 8 9
输出在同一行并以空格区分写法:在print函数里写end=" "
range(start, end, step)左闭右开所以不包括end,step表示以step个间隔
列表—可修改
#自然语言:输出0到10的所有偶数
a = [x for in x range(1, 10) if x%2 == 0]
print(a)
#输出
#2 4 6 8
元组—不可修改,同列表类似,[]换成()
格式化字符串
print("我叫%s, 今年%d岁了" %("lzl", 100))
#我叫lzl,今年100岁了
字典—>用{}
#字典的声明
tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}
#类似于散列表,冒号前为key值,冒号后为value值
集合—>用{},但空集用set()
set1 = {1,2,3,4}
set2 = {2,3,4,5}
print(set1 | set2)
print(set1 & set2)
print(set1 - set2)
print(set1 ^ set2)
'''
set1 = {1,2,3,4}
set2 = {2,3,4,5}
print(set1 | set2)
print(set1 & set2)
print(set1 - set2)
print(set1 ^ set2)
'''
import numpy as np# 用于科学计算的库
import matplotlib.pyplot as plt# 导入matplotlib库中的pyplot模块,并将其命名为plt,pyplot模块提供了类似MATLAB的绘图框架。
x = np.linspace(0, 10, 1000)# 生成一个包含1000个元素的数组,这些元素在0到10之间均匀分布,用于表示x轴上的数值。最后一个参数越大越精确
y = np.sin(x)# 计算数组x中每个元素的正弦值
z = np.cos(x**2)# 计算数组x中每个元素的...值 x**2表示x的平方
# 创建一个新的图形窗口,并指定其大小为宽8英寸,高4英寸。
plt.figure(figsize = (8, 4))
# 绘制以x为横坐标,z为纵坐标的曲线图,标签为sin(x),颜色为红色,线宽为2。
plt.plot(x, y, label = "$sin(x)$", color = "red", linewidth = 2)
# 绘制以x为横坐标,z为纵坐标的曲线图,标签为cos(x^2),颜色为蓝色虚线。两边加$$有点格式化的意思
plt.plot(x, z, "b--", label = "$cos(x^2)$")
# 分别设置x轴标签Time(s)和y轴标签
plt.xlabel("Time(s)")
plt.ylabel("Volt")
# 设置图表标题
plt.title("PyPlot First Example")
# ylim即ylimit 设置y轴的取值范围为-1.2到1.2
plt.ylim(-1.2, 1.2)
# 显示图例
plt.legend()
# 显示图表
plt.show()
折线图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 数据示例,假设有5条折线,每条折线有5个数据点
y1 = [2, 4, 1, 5, 2]
y2 = [1, 3, 2, 3, 4]
y3 = [3, 1, 3, 2, 5]
y4 = [4, 2, 3, 1, 3]
y5 = [2, 3, 4, 2, 1]
x = [i for i in range(len(y1))] # 0 1 2 3 4
# 创建一个Figure对象和一个子图
fig, ax = plt.subplots()
# 设置折线的线条样式,颜色和标签
line_styles = ['-', '--', ':', '-.', 'dashdot']
# 线条样式有
line_colors = ['b', 'g', 'r', 'y', 'black'] # 这是线条颜色分别是蓝绿红黄黑
line_labels = ['line 1', 'line 2', 'line 3', 'line 4', 'line 5'] # 这是图例名称
line_widths = [1.5, 2.0, 2.5, 1.0, 1.5] # 调整线条粗细的参数
for i in range(5):
ax.plot(x, globals()[f'y{i+1}'], linestyle = line_styles[i], color = line_colors[i], label = line_labels[i], linewidth = line_widths[i])
# 添加具体数值
for i in range(len(x)):
ax.annotate(f'{y1[i]}', (x[i], y1[i]), textcoords = "offset points", xytext = (0, 10), ha = 'center')
# 添加图例
ax.legend()
# 添加横纵坐标标签,fontsize表示字体大小
ax.set_xlabel('x轴', fontsize = 12)
ax.set_ylabel('y轴', fontsize = 12)
# 设置图表标签 fontweight表示字体粗细有normal,bold,light三个参数可选
ax.set_title('折线图', fontsize = 16, fontweight = 'bold')
# 设置刻度标签字体大小 axis='both'不需要改即两个轴都设置 which='major'不用改表示主刻度 labelsize=10也基本不用改表示刻度字体大小10左右就行
ax.tick_params(axis = 'both', which = 'major', labelsize = 10)
#添加网格线linestyle表示网格线形式,alpha表示网格线的透明度
ax.grid(True, linestyle = '--', alpha = 0.7)
# 设置背景颜色 如果将none改为balck或者将该两行注释掉就相当于这是一个封闭的矩形框中画的折线图
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 显示图形
plt.show()
fig, ax = plt.subplots()
:创建了一个Figure对象和一个子图。Figure对象是画布,而子图是实际绘图的区域。第一个for循环是输出5根线,分别包括以下属性:线样式、颜色、线条粗细
第二个for循环添加了具体数值的注释,以展示每个数据点的数值即y点坐标,
该函数的textcoords、xyset和ha参数都不需要变
执行区间
import matplotlib.pyplot as plt
import numpy as np
# 示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
confidence_interval = 0.2
upper_bound = y+confidence_interval
lower_bound = y-confidence_interval
# 创建一个Figure对象和一个子图
plt.figure(figsize=(10, 6))
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Confidence Intervals')
# 绘制线条
plt.plot(x, y, label = 'Data', color = 'b')
# 执行区间填色
plt.fill_between(x, lower_bound, upper_bound, color = 'lightblue', alpha = 0.5, label = 'Confidence Intervals')
# 添加图例
plt.legend()
# 显示图形
plt.show()
函数调用大致相同,就是多了一个plt.fill_between()函数,这个是填充颜色的函数,几个参数分别是自变量,下界,上界,颜色,透明度和标签
柱状图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']# 为了支持中文字体
plt.rcParams['axes.unicode_minus'] = False #上述字库没负号,因此负号不进行字体变换
# 数据示例,假设有5个数据的高度
heights = [5, 17, 13, 4, 6]
x = [i for i in range(len(heights))]
# 创建一个Figure对象和一个子图
fig, ax = plt.subplots()
# 不同柱子的颜色
colors = ['blue', 'green', 'red', 'purple', 'orange']
# 绘制柱状图
width = 0.5 # 宽度
# 绘制
for i in range(len(heights)):
bar = ax.bar(x[i], heights[i], width, color = colors[i], label = f'Bar{i+1}')
height = bar[0].get_height()
ax.annotate(f'{height}', xy = (bar[0].get_x()+bar[0].get_width()/2, height), xytext = (0, 3),
textcoords="offset points", ha = 'center', va = 'bottom')# 在柱状图上添加对应数据
ax.plot(x, globals()[f'heights'], linestyle='solid', color='black', label='line1',
linewidth=2)
# 添加图例
plt.legend(fontsize = 12, loc = 'best');
# 添加横纵坐标label
ax.set_xlabel('X轴', fontsize = 14, fontweight = 'bold')
ax.set_ylabel('Y轴', fontsize = 14, fontweight = 'bold')
# 设置y范围
plt.ylim([0, 20])
# 设置图表标题
ax.set_title('柱状图', fontsize = 16, fontweight = 'bold')
# 设置刻度标签
ax.set_xticks(x)
ax.set_xticklabels([f'Bar{i+1}' for i in range(len(heights))], fontsize = 12, fontweight = 'bold')
# 设置网格线 只画横向的axis = y如果是axis = 'both'或者True就是横纵都画
ax.grid(axis = 'y', linestyle = '--', alpha = 0.7)
# 设置背景颜色
ax.set_facecolor('#f0f0f0')
# 去除图表边框
for spine in ax.spines.values():
spine.set_visible(False)
# 显示图形
plt.show()