该文章包括了数学建模时需要画的一些常见图,供大家参考。注释写的也较为详细可以帮助大家学习。由于时间紧急整理的种类较少,我会在该篇文章中持续更新一些其他图形。
柱状图
import numpy as np
import matplotlib.pyplot as plt
import random
# 准备数据
x_data = [f"20{i}年" for i in range(18, 23)]
y_data = [random.randint(100, 300) for i in range(5)]
# 正确显示中文和负号
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 画图,plt.bar()可以画柱状图
for i in range(len(x_data)):
plt.bar(x_data[i], y_data[i])
# 设置图片Title
plt.title("设置title")
# 设置x轴标签名
plt.xlabel("年份")
# 设置y轴标签名
plt.ylabel("销量")
# 显示
plt.show()
折线图
import numpy as np
import matplotlib.pyplot as plt
# x轴刻度标签
x_ticks = ['x_1', 'x_2', 'x_3', 'x_4', 'x_5', 'x_6']
# x的长度
x = np.arange(len(x_ticks))
# 第1条折线数据
y1 = [4, 3, 2, 4, 1, 5]
# 第2条折线数据
y2 = [3, 1, 6, 5, 2, 4]
# 正确显示中文和负号
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 创建图形画布
plt.figure(figsize=(20, 8))
# 绘制第一条折线
plt.plot(x, y1, color='#FFF000', label='label1', linewidth=3.0)
# 绘制第二条折线
plt.plot(x, y2, color='#00FFFF', label='label2', linewidth=3.0)
# 给第1条折线数据点加上数值,前两个参数是坐标,第三个是数值,ha和va分别是水平和垂直位置(数据点相对数值)。
for a, b in zip(x, y1):
plt.text(a, b, '%d'%b, ha='center', va= 'bottom', fontsize=18)
# 给第2条折线数据点加上数值
for a, b in zip(x, y2):
plt.text(a, b, '%d'%b, ha='center', va= 'bottom', fontsize=18)
# 画水平横线。
plt.hlines(3, 0, len(x)-1, colors = "#000000", linestyles = "dashed")
# 绘制横坐标,rotation旋转角度
plt.xticks([r for r in x], x_ticks, fontsize=18, rotation=20)
plt.yticks(fontsize=18)
# 添加x轴和y轴标签
plt.xlabel(u'x_label', fontsize=18)
plt.ylabel(u'y_label', fontsize=18)
# 标题
plt.title(u'Title', fontsize=18)
# 图例
plt.legend(fontsize=18)
# 保存图片
plt.savefig('./figure.pdf', bbox_inches='tight')
# 显示图片
plt.show()
横向柱形图
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 准备数据
columns=['column_1','column_2','column_3','column_4']
number=[100,200,300,400]
# 正确显示中文和负号
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 绘制图像
# plt.subplots()是创建画布的功能
fig, ax=plt.subplots()
b = ax.barh(range(len(columns)),number,color='#6699CC')
# 添加数据标签
for rect in b:
w = rect.get_width()
ax.text(w,rect.get_y()+rect.get_height()/2,'%d'%int(w),ha='left',va='center')
#设置Y轴刻度线标签
ax.set_yticks(range(len(columns)))
ax.set_yticklabels(columns)
plt.show()
扇形图
import matplotlib.pyplot as plt
# 扇形的数据
sizes = [15, 30, 45, 10]
# 扇形的标签
labels = ['A', 'B', 'C', 'D']
# 扇形的颜色
colors = ['red', 'blue', 'green', 'orange']
# 突出显示某个扇形
explode = (0.1, 0, 0, 0) # 用于突出显示第一个扇形
# 正确显示中文和负号
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 绘制扇形图
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140, explode=explode)
# 设置图表标题
plt.title('扇形图示例')
# 显示图例
plt.legend(labels, loc="best")
# 显示图表
plt.axis('equal') # 保持纵横比相等,使得扇形图为圆形
plt.show()
热力图
import numpy as np
import matplotlib.pyplot as plt
# 创建一个示例数据矩阵
data = np.random.rand(10, 10) # 10x10的随机数据矩阵
# 正确显示中文和负号
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 绘制热力图
plt.imshow(data, cmap='coolwarm', interpolation='nearest')
# 添加颜色条
plt.colorbar()
# 设置坐标轴标签
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')
# 设置标题
plt.title('热力图示例')
# 显示热力图
plt.show()
正态分布图
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# 生成正态分布数据
mu = 0 # 均值
sigma = 1 # 标准差
size = 1000 # 数据点数量
data = np.random.normal(mu, sigma, size)
# 绘制直方图,bins=30是30根柱子,alpha=0.6表示直方图的柱子具有60%的不透明度
plt.hist(data, bins=30, density=True, alpha=0.6, color='g', edgecolor='black')
# 绘制正态分布曲线
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, sigma)
plt.plot(x, p, 'k', linewidth=2)
# 添加标题和标签
plt.title('正态分布图')
plt.xlabel('值')
plt.ylabel('概率密度')
plt.show()
该文章还处于待更新状态,目前只能更新6张图。如果你喜欢的话,请点个赞吧!