matplotlib中柱状图Y轴坐标不按顺序排列问题

背景:

昨天偶然做一个爬取数据,做成直方图的小练习发现,最后出来的图标Y轴并不是按顺序排列,按照老规矩,百度一下,找到了原因,一个低级的问题

import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
import bs4
import numpy as np
import matplotlib
import seaborn as sns
import requests
import pandas as pd
# import pickle

def datas() :#封装爬取数据函数,以便后续使用
    url = 'https://www.iqiyi.com/dianying_new/i_list_paihangbang.html'
    #按照获取的URL进行入参
    res = requests.get(url)
    #获取网页内容
    # print(res.status_code)
    #检查连接状态
    bs = bs4.BeautifulSoup(res.text, 'html.parser')
    #用BS解释网页
    datas = bs.find('ul',class_="site-piclist").find_all('li')
    #根据网页特征定位相关数据位置
    data1 = {}#设置相应字典,用来装爬取到的数据并且返回
    for data in datas :
        mov_name = data.find('img')['title'] # 获取电影名字
        try :
            mov_rank = data.find('span',class_='dypd_piclist_nub dypd_piclist_nubHot').text #获取电影排名,由于前三特征与后面的不同,因此采用试错历遍相关特征
        except :
            mov_rank = data.find('span',class_='dypd_piclist_nub').text #同上
        mov_score = data.find('span',class_='score').text #获取电影评分数据
        data1[int(mov_rank)]=mov_score

    return data1 # 返回获取到的数据
#-----------------------------------------------------------2.对数据进行清洗和处理---------------------------------
data_dict= datas() #提取前述数据进行处理
rate1=list(data_dict.keys())
rate2=list(data_dict.values())
d={'    排名   ':rate1,
   '   评分   ':rate2}
df=pd.DataFrame(d)    #将年份和比率结合一起
# print(df)                   #输出结果


#-----------------------------------------------------------4.对数据进行清洗和处理---------------------------------
#-----------------------------------------------------------折线图---------------------------------

# x=rate1   #设置x轴
# y=rate2
# plt.figure(figsize=(200,8),dpi=80)   #设置绘制的图像和字体大小
# plt.plot(x,rate2,color = 'y',label="score")#k是黄色
# plt.xlabel("rank")#横坐标名字
# plt.ylabel("score")#纵坐标名字
# x_major_locator=MultipleLocator(10)
# #把x轴的刻度间隔设置为10,并存在变量里
# ax=plt.gca()
# #ax为两条坐标轴的实例
# ax.xaxis.set_major_locator(x_major_locator)
# #把x轴的主刻度设置为10的倍数
# plt.xlim(1,146)
# #把x轴的刻度范围设置为1到146,十倍间隔
# plt.legend(loc = "best")#图例
# plt.show() 

代码为上述,但是出来的结果如图
在这里插入图片描述

解决方案:

经过一番查证后发现其实是爬取数据的时候评分字段的数据类型是文本= =
因此多加一个int或者float就可以解决对应问题

for data in datas :
        mov_name = data.find('img')['title'] # 获取电影名字
        try :
            mov_rank = data.find('span',class_='dypd_piclist_nub dypd_piclist_nubHot').text #获取电影排名,由于前三特征与后面的不同,因此采用试错历遍相关特征
        except :
            mov_rank = data.find('span',class_='dypd_piclist_nub').text #同上
        mov_score = data.find('span',class_='score').text #获取电影评分数据
        data1[int(mov_rank)]=float(mov_score)

输出结果
在这里插入图片描述撒花(估计专业程序猿不会犯着低级错误)

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值