近期学习基于Anylogics的SIR改进,在软件中获得了一些数据,但是在软件中的可视化效果对比不明显,故单独把部分数据处理出来绘制折线图。
数据截图如下:
总共是52行数据,第一行为字段,后面的是在不同条件下,感染人数在51天中每天的具体数量
可视化代码如下:
想画三条折线,需要给三个y值,并赋予三个数据系列
如果python识别不了你在表格里用的字体,可以用plt.rcParams['font.family'] = '',进行修改
保存图片plt.savefig()必须在plt.show()前,不然保存下来的图片是空白的
import matplotlib.pyplot as plt
import pandas as pd
# 设置Matplotlib的字体
plt.rcParams['font.family'] = 'SimSun' # 这里使用了宋体(SimSun)字体
# df = pd.read_excel('C:\Users\94252\Desktop\data.xlsx')
df = pd.read_excel(r'C:\Users\94252\Desktop\data.xlsx')
import matplotlib.pyplot as plt
# 提取感染者人数的三列数据
infection1 = df['infection_num1']
infection2 = df['infection_num2']
infection3 = df['infection_num3']
x = list(range(1, 53)) # X 轴数据
y1 = infection1 # 第一个数据系列
y2 = infection2 # 第二个数据系列
y3 = infection3 # 第三个数据系列
# 创建折线图
plt.figure(figsize=(8, 6)) # 设置图形大小
plt.plot(x, y1, label='没有管控', marker='o') # 绘制第一个数据系列的折线
plt.plot(x, y2, label='拐点前五天管控', marker='s') # 绘制第二个数据系列的折线
plt.plot(x, y3, label='拐点后五天管控', marker='^') # 绘制第三个数据系列的折线
plt.title('感染者人数折线图', fontproperties='SimSun')
plt.xlabel('时间', fontproperties='SimSun')
plt.ylabel('感染者人数', fontproperties='SimSun')
# 设置y轴刻度
min_y = 3000 # 设置y轴的最小值
max_y = max(max(max(y1), max(y2)), max(y3)) # 获取y轴数据的最大值
step = 500000 # 设置刻度的步长
yticks = np.arange(min_y, max_y + step, step)
plt.yticks(yticks)
plt.ylabel('感染者人数(单位:50万人)')
# 添加图例
plt.legend()
# 显示折线图
plt.grid(True) # 添加网格线
# 调整图像分辨率(DPI)
plt.savefig('line_chart8.jpg', dpi=500) # 保存
plt.show()