R用户要整点python--pandas画图

科技   2024-09-01 20:56   山东  
 今天是生信星球陪你的第987天

   
公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课。下一期的时间,点进去咨询微信↓
生信分析直播课程(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()


生信星球
一个零基础学生信的平台-- 原创结构化图文/教程,精选阶段性资料,带你少走弯路早入门,收获成就感,早成生信小能手~
 最新文章