数学建模画图(Python版)

该文章包括了数学建模时需要画的一些常见图,供大家参考。注释写的也较为详细可以帮助大家学习。由于时间紧急整理的种类较少,我会在该篇文章中持续更新一些其他图形。

柱状图

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张图。如果你喜欢的话,请点个赞吧!

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值