公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课。下一期的时间,点进去咨询微信↓ 生信分析直播课程(10月初下一期) 生信新手保护学习小组(预计9.13下一期) 单细胞陪伴学习小组(预计9.16下一期)
python的几个绘图库:pandas、Seaborn、matplotlib
1.单变量画图
pandas 中的.plot方法可以直接画图。在要画图的列上调用 .plot()
方法并传入 kind
参数。该方法适用于数据框和Series object。
查了一下series:表格数据的每一行或每一列的数据结构都是series,可以将它看成一维的表格数据。可以属于DataFrame的一部分也可以作为一个单独的数据结构存在。我们可以用values,index,items等Series的属性来获取各个部分的值。
例如:
from pandas import Series
emp=['001','002','003','004','005','006']
name=['亚瑟', '后裔','小乔','哪吒' ,'虞姬','王昭君']
series = Series(data=name,index=emp)
# 获取数据的值
print(series.values)
# 获取索引的值
print(series.index.tolist())
# 获取每对索引和值
print(list(series.items()))
直方图和箱线图适用于连续数据。
因为pandas的.plot方法时以matplotlib为基础的,所以每次画图之前要先import matplotlib.pyplot as plt,画图之后又需要show()展示图片。
import matplotlib.pyplot as plt
# Histogram
df['column_name'].plot(kind='hist')
plt.show()
# Boxplot
df['column_name'].plot(kind='box')
plt.show()
插播:在python里面使用iris
(现搜的)
第一种方法时从sklearn库里面获取,没有第五列,也不是个规范的数据框,不甚推荐
!pip install scikit-learn
from sklearn import datasets
iris = datasets.load_iris()
print(iris.data)
第二种方法是从seaborn库里获取,代码简单,是一个有5列的数据框,推荐
!pip install seaborn
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
type(iris)
## pandas.core.frame.DataFrame
iris.head()
## sepal_length sepal_width petal_length petal_width species
## 0 5.1 3.5 1.4 0.2 setosa
## 1 4.9 3.0 1.4 0.2 setosa
## 2 4.7 3.2 1.3 0.2 setosa
## 3 4.6 3.1 1.5 0.2 setosa
## 4 5.0 3.6 1.4 0.2 setosa
和R语言的内置数据iris内容一致,列名不同。
直方图-hist
用 matplotlib.pyplot
中的 show()
函数来显示绘图。
import matplotlib.pyplot as plt
# Histogram
iris['sepal_length'].plot(kind='hist')
plt.show()
条形图-bar
barplot适用于分类数据。在绘图之前,要先用 .value_counts()
方法获取值的计数。
# Bar plot
counts = iris.species.value_counts()
colors = sns.color_palette("Set2", n_colors=len(counts)) # "Set2" 是一种调色板
counts.plot(kind='bar', color=colors)
plt.show()
练习
课程使用的示例数据是tips,来自seaborn包,内容如下:
import seaborn as sns
tips = sns.load_dataset('tips')
tips.head()
## total_bill tip sex smoker day time size
## 0 16.99 1.01 Female No Sun Dinner 2
## 1 10.34 1.66 Male No Sun Dinner 3
## 2 21.01 3.50 Male No Sun Dinner 3
## 3 23.68 3.31 Male No Sun Dinner 2
## 4 24.59 3.61 Female No Sun Dinner 4
1.用 tip 列画直方图
2.用 tip 列画箱线图
3.sex
列画条形图,展示每个性别的数量。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
# Histogram of tip
tips.____.____(____)
____
# Boxplot of the tip column
____
plt.show()
# Bar plot
cts = tips.____.____
cts.plot(____)
plt.show()
答案:
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
# Histogram of tip
tips.tip.plot(kind = 'hist')
plt.show()
# Boxplot of the tip column
tips.tip.plot(kind = 'box')
plt.show()
# Bar plot
cts = tips.sex.value_counts()
cts.plot(kind = 'bar')
plt.show()
2.两变量画图
点图-scatter
两个连续变量可以画散点图。两变量的图不是在单列上调用.plot方法,而是在整个数据框上调用。
# Scatter plot
iris.plot(kind = 'scatter',x = 'sepal_length',y = 'sepal_width')
plt.show()
箱线图-boxplot
箱线图来展示一个连续变量和一个分类变量。但是,要用 .boxplot()
方法而不是 .plot()
方法。
# Boxplot
iris.boxplot(column='sepal_length', by='species')
plt.show()
也可以直接对整个数据框的每列画箱线图,字符串列会自动跳过去。
iris.plot(kind = "box")
plt.show()
练习
1.'total_bill'列做横坐标,'tip'列做纵坐标,画散点图
2.'sex'列做横坐标,'tip'列做纵坐标,画箱线图
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
# Scatter plot between the tip and total_bill
tips.plot(____, ____, ____)
plt.show()
# Boxplot of the tip column by sex
tips.____(column=____, by=____)
plt.show()
答案
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
# Scatter plot between the tip and total_bill
tips.plot(x = 'total_bill', y = 'tip', kind = 'scatter')
plt.show()
# Boxplot of the tip column by sex
tips.boxplot(column='tip', by='sex')
plt.show()