Python散点图——绘制Oxford在2020QS中的专业排名情况

第一次正经用Python做散点图,遇到了很多问题,记录下来

数据来源:QS世界大学排名

数据处理:把数据放置到一个excel中,做成如下图表:
Sheet1
一开始想做两个平面图,一个放学科和rank,一个放专业和rank,再把两个拼接起来,但是实在不是很会最后只做了一个专业的。为了便于读取数据,把专业和排名单独放在sheet3里面:
sheet3读取文件只需要读取sheet3的内容:

data2 = pd.read_excel(r'C:\Users\Lenovo\Desktop\QS Oxford Subject Ranks(2020)\QS_Oxford_Subject_Ranks(2020).xlsx',sheet_name=2)

要特别注意一点,文件的名字最好不要有空格,这里是用’_‘代替了空格’ '。

读取之后就是处理数据,两个过程要用到matplotlib和pandas库:

import pandas as pd
import matplotlib.pyplot as plt

关于库的下载,如果用的是IDLE之类的集成开发,应该需要进入cmd(搜索“运行”),输入pip install +库名
因为我用的是pycharm直接可以在setting的python interpreter下面搜索安装

将横纵轴的值保存在变量profession 和 rank下面

profession = data2['Profession']
rank2 = data2['Rank']

设计坐标轴名称,横轴为PROFESSION,纵轴RANK。并且希望坐标轴名称能够加粗、变个颜色,字号大一些,需要用到fontdict={}

# 设置坐标轴名称,fontdict用于改变字体属性,比如加粗、大小、颜色等
plt.xlabel('PROFESSIONS',fontdict={'weight':'heavy','size':50,'color':'blue'})
plt.ylabel('RANK',fontdict={'weight':'heavy','size':50,'color':'blue'})

设计坐标轴标签的样式

# 设置坐标轴标签的样式,fontsize表示字号,rotation是旋度
plt.xticks(fontsize=30,rotation=90)    # 标签旋转90°
plt.yticks(fontsize=30)

如果不加rotation,因为横轴标签太长,会导致字符重叠
运行后发现这里存在一个问题,即纵轴是从0开始的,而排名没有第0名,希望从1开始,用到numpy下的一个函数arange,界定纵轴刻度、区间。

import numpy as np
y = np.arange(1,31,1)
plt.yticks(y,fontsize=30)

最后绘制散点图,用scatter函数

# 构建散点图
plt.title('QS Oxford Profession Ranks')
plt.scatter(profession, rank2, marker='o', s=400)  # 可以写成plt.scatter(profession[:],rank2[:]),好处是可以只选择部分数据

fig = plt.gcf()
fig.set_size_inches(40,32,forward=True)

# 调节内容在整幅图的位置
plt.subplots_adjust(top=0.9,bottom=0.2,left=0.15,right=0.95)

plt.show()

# 保存为图片
fig.savefig('QS Oxford Subject Ranks(2020).png',dpi=100)

在这里插入图片描述

这时候发现纵轴是1,2,3···30,太过于密集,想写成1开头,但是在5,10,15,20,25,30标出,则可以把y直接定义成列表

y = [1, 5, 10, 15, 20, 25, 30]

完整代码如下:

# -*- coding:utf-8 -*-
# author:LMo time:2020/11/6


import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


# 读取excel的专业数据
data2 = pd.read_excel(r'C:\Users\Lenovo\Desktop\QS Oxford Subject Ranks(2020)\QS_Oxford_Subject_Ranks(2020).xlsx',sheet_name=2)
print(data2)
profession = data2['Profession']
rank2 = data2['Rank']

# 设置坐标轴名称,fontdict用于改变字体属性,比如加粗、大小、颜色等
plt.xlabel('PROFESSIONS',fontdict={'weight':'heavy','size':50,'color':'blue'})
plt.ylabel('RANK',fontdict={'weight':'heavy','size':50,'color':'blue'})

# 设置坐标轴标签的样式,fontsize表示字号,rotation是旋度
plt.xticks(fontsize=30,rotation=90)    # 标签旋转90°
y = [1,5,10,15,20,25,30]
plt.yticks(y,fontsize=30)

# 构建散点图
plt.title('QS Oxford Profession Ranks')
plt.scatter(profession, rank2, marker='o', s=400)  # 可以写成plt.scatter(profession[:],rank2[:]),好处是可以只选择部分数据

fig = plt.gcf()
fig.set_size_inches(40,32,forward=True)

# 调节内容在整幅图的位置
plt.subplots_adjust(top=0.9,bottom=0.2,left=0.15,right=0.95)

plt.show()

# 保存为图片
fig.savefig('QS Oxford Subject Ranks(2020).png',dpi=100)

运行效果如图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值