写在前⾯的话
好久不来,随便看了下CSDN推送的热门⽂章,标题都相当⽆耻了啊,⼤家为了骗阅读量都把标题取得这么骚。⽽且像我这么俗的⼈,肯定也是必须要为强权低头的,妈呀。这个标题我⾃⼰看着眼睛都有点疼,不知道为⽑现在程序○都喜欢搞成专业⽹络写⼿,现在还让不让⼈活了。。。
⼀向不正经的正⽂
1. 什么是 seaborn
seaborn 可以看成是matplotlib的⼀个辅助和升级的⼯具,可能叫升级有点不太准确,主要是为了给matplotlib 做辅助的吧,它很有⾃⼰的风格。我觉得画图还是不错的,⼤家有时间可以学起来。
今天我们就介绍⼀下,怎么使⽤seaborn 画出唯美的科研论⽂图⽚。到底怎么个唯美法呢,我们先来看看⼏个例⼦,
哈哈哈,要是有⼈觉得不好,emmm, 那也没有办法,我喜欢就好,哈哈哈哈,⽽且别⼈的意见我也不是很在意,此处应该有⼀个厌世脸 = =
2. 相关资料
⼤家可以在下⾯这些⽹站上看到更多的教程
关于seaborn ⽤的例⼦,我们可以在github上到相应的数据集,具体的可以参见下⾯的这个连接
你要⽤seaborn 作图,主要是要明⽩这个的作图的数据集要怎么创建。现在很多⽹站给的例⼦都是官⽹上的例⼦,给⼀个随机数,然后⽣成⼀个图⽚,可能学习模仿的意义不打,直接⽤数据集,教你⼿把⼿构建属于⾃⼰的数据集,然后画图,是本⽂的主要任务。
使⽤
我们要使⽤seaborn 当然是要先下载安装好它,我们可以这么做:
pip install seaborn
在这⾥我们会借助pandas 来处理我们的数据, 所以也需要安装⼀下,pandas
pip install pandas
我们以热⼒图来作为例⼦,讲解怎么使⽤seaborn 来作图
# 引⼊基本的模块
import numpy as np
import seaborn as sb
import matplotlib.pyplot as plt
# 创造⼀个随机的矩阵作为我们的输⼊数据
data = np.random.rand(4,6)
heat_map = sb.heatmap(data)
plt.show()
这样,我们们就得到上⾯这个图⽚。当然这个的实⽤性太差了,我们要⾃⼰定制我们的数据集。
写在前⾯的话
当我们使⽤python来画图的时候,我觉得最难的部分应该是数据加载。因为尽管官⽹的教程给出了怎么画出某个图⽚的⽰例,但是数据往往是随机产⽣的,这些数据和我们需要的数据往往是不符的。这个时候可能就需要加载我们⾃⼰的数据。
但是怎么加载,其实很多⽹站和教材都没有说,直接搜索出来的画图教程⼤多都是直接搬运了官⽹的教程,数据都是随机产⽣的。⽽且我们很多时候都是碎⽚化的学习,因此我⾃⼰的感觉每次都是怎么加载这个数据,因此,针对这个问题,我们就在这⾥拿出⼀章来专门说明我们怎么处理这个问题。
数据的存储
⼀般情况下,我觉得使⽤python画图,我们⾸先要达成⼀个基本的认识前提,那就是数据⼀般会存储为⼀个数组的形式,就是array.
这个时候在画图的时候,我们往往需要引进 numpy 这个模块,因此我们常常会看到⼀些代码在画图的时候,⽤了下⾯这个语句
import numpy as np
这个可以把python 中最常见的List 转换为我们的数组类型, 如果是数据量⽐较⼩,⽐如说画⼀个饼图,或者是柱状图,我们可以把数据直接写成⼀个list, 直接赋值给对应的画图函数就可以。
但是单数据量⽐较⼤的时候,⼏百上千的时候这个时候就⽐较⿇烦了。我们⼀般会把数据保存在⼀个csv ⽂件⾥⾯,这个时候我们⼀般会使⽤ pandas 来解析⽂件
import os
import pandas as pd
path ="path store your csv file"
df = pd.read_csv(path)
⽐如我们的数据如下⾯所⽰:
我们可以⽤这个⽅法得到我们的每⼀列的数据
x = df["No."]
y = df["Stars"]
如果要画我们⾃⼰的专属图⽚,可以再看下⾯的这个例⼦。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
# 加载我们⾃⼰的数据集,这个数据集是⼀个叫做flights的CSV⽂件flights = sns.load_dataset("flights")
flights = flights_long.pivot("month","year","passengers")
ax = sns.heatmap(flights)
plt.title("Heatmap Flight Data")
plt.show()
你就可以得到下⾯的这个图⽚了
flights = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
上⾯的语句可以替换为
df = pd.pivot_table(data=sns.load_dataset("flights"),
index='month',
values='passengers',
columns='year')
可能这样⼤家就更好理解每⼀个是什么意思了,就是每⼀列表⽰的是年份,每⼀个⽉就是纵坐标,然后旁边的颜⾊带代表的是乘客的数⽬,颜⾊越深就说明乘客数⽬越多。
这个flights 的数据集是什么样⼦的,我们可以看⼀下
这个是⼀个CSV的表格,它是有表头的,表头的数据必须和我们的pivot的写的⾏列内容⼀致否则就会报错。
然后我们发现这个表可以看成是⼀个笛卡尔集,然后你要话这个heatmap也要构建⼀个类似的数据集就可以了。
之后在看官⽹的教程,不妨先仔细看看他的数据集是什么构建的,然后就能依葫芦画瓢完成对应的图⽚了
但是由于csv 可能有⼀些标题⾏或者⽆效⾏,所以我们可以通过 skiprows 这个函数把他们去除
import pandas as pd
PATH ='./test.csv'
df = pd.read_csv(PATH, skiprows=1)
print(df.head(5))
⽐如原来的是这个样⼦的
1 2 3 4
0 datetime host hit volume
1 2018-07-24 09:00:00 weibo 20 1020
2 2018-07-25 09:00:00 qq no 20 1028
3 2018-07-26 19:00:00 sina 25 1181
4 2018-07-27 21:00:00 sohu 1
5 4582
现在删除之后变成了这个样⼦
发布评论