matplotlib轴乱序解决

本文讲述了如何从CSV文件中导入数据时遇到的y轴数值乱序问题,通过将字符串转换为整数解决,并展示了使用matplotlib正确绘制图表的过程。

使用plt画图出现轴乱序

问题:从csv文件导入数据后y轴的数是乱序的

详情:
csv文件
在这里插入图片描述
代码

xdate=[]
ynewdi=[]#新确诊
ynosym=[]
with open("广州疫情.csv",encoding='utf-8')as f:
    i=f.readlines()
    for j in range(1,len(i)):
        col=i[j].replace('\n','').split(',')
        xdate.append(col[0])
        ynewdi.append(col[1])
        ynosym.append(col[2])
    print(xdate)
    print(ynewdi)
    print(ynosym)
#解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('广州疫情',fontstyle='italic',backgroundcolor='g')
plt.xlabel('日期')
plt.ylabel('人数')
plt.plot(xdate,ynewdi,'r<--',xdate,ynosym,'go-')
plt.show()

结果
在这里插入图片描述
原因:
csv导入的数据为string,需要将ynewdi[]和ynosym[]中的转换为int才是我所需要的

修改后:

xdate=[]
ynewdi=[]#新确诊
ynosym=[]
with open("广州疫情.csv",encoding='utf-8')as f:
    i=f.readlines()
    for j in range(1,len(i)):
        col=i[j].replace('\n','').split(',')
        xdate.append(col[0])
        ynewdi.append(int(col[1]))
        ynosym.append(int(col[2]))
    print(xdate)
    print(ynewdi)
    print(ynosym)
    #解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('广州疫情',fontstyle='italic',backgroundcolor='g')
plt.xlabel('日期')
plt.ylabel('人数')
plt.plot(xdate,ynewdi,'r<--',xdate,ynosym,'go-')
plt.show()

正确显示
在这里插入图片描述

除了按列排序外,解决折线图出现乱序问题还可以采用以下方法: #### 手动调整绘图顺序 如果已知数据的正确顺序,可以手动按照该顺序选取数据进行绘图。例如,有两个列表`x`和`y`,可以创建一个索引列表来指定绘图顺序。 ```python import matplotlib.pyplot as plt x = [3, 1, 2] y = [10, 20, 30] order = [1, 2, 0] # 手动指定顺序 new_x = [x[i] for i in order] new_y = [y[i] for i in order] plt.plot(new_x, new_y) plt.show() ``` #### 数据插值和重采样 对于不规则间隔的数据,可以进行插值或重采样,使其具有规则的间隔,再进行绘图。以`numpy`和`scipy`为例: ```python import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import interp1d x = [3, 1, 2] y = [10, 20, 30] # 对数据进行排序 sorted_indices = np.argsort(x) x_sorted = np.array(x)[sorted_indices] y_sorted = np.array(y)[sorted_indices] # 创建插值函数 f = interp1d(x_sorted, y_sorted) # 生成新的规则间隔的x值 x_new = np.linspace(min(x_sorted), max(x_sorted), num=100) y_new = f(x_new) plt.plot(x_new, y_new) plt.show() ``` #### 检查数据的关联性 如果折线图涉及多组数据,要确保不同组数据之间的关联性正确。例如在双Y绘图时,要保证两组数据的`x`对应关系无误。参考如下代码,确保`simple_x`和`simple_x2`与对应的`datelist`和`datelist2`数据对应正确: ```python import matplotlib.pyplot as plt import numpy as np # 示例数据 simple_x = [1, 2, 3] datelist = [10, 20, 30] simple_x2 = [1, 2, 3] datelist2 = [11, 21, 31] fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(simple_x, datelist, label="pred") ax2 = ax1.twinx() ax2.plot(simple_x2, datelist2, label="real", color='red', linewidth=2.0, linestyle='--') fig.legend(loc="lower right") plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值