Matplotlib 进阶(三)

一、Pandas绘图

Series和DataFrame是Pandas库中主要的两种数据结构,都内置了plot方法,可以绘制图形

1.Series.plot Series是一个一维数据结构,它由index和value组成,类似于Excel表格中的一列数据,由行号和数据组成。根据这样一列数据,我们可以绘制各种图表,如柱状图、条形图、折线图、饼图等。

2.DataFrame.plot DataFrame是一个二维结构,除了拥有index和value之外,还拥有column。它类似于一张Excel表格,由多行、多列构成。DataFrame由多个Series对象组成,无论是行还是列,单独拆分出来都是一个Series对象。

官网:pandas.DataFrame.plot — pandas 1.5.0 documentation 

 df.plot(*args, **kwargs)

1.Series.plot()

import pandas as pd
import matplotlib.pyplot as plt

#设置中文
plt.rcParams['font.sans-serif']='Microsoft YaHei'
# plt.rcParams['font.size']=12

#数据
data=pd.Series([500,300,700,400],index=['1季度', '2季度', '3季度', '4季度'])

#
fig=data.plot(kind='bar',title='2021年各季度销量(单位:万台)',figsize=(10,8),fontsize=30)

# fig=data.plot(kind='pie',title='2021年各季度销量(单位:万台)',figsize=(10,8),fontsize=30)

fig.axes.title.set_size(40)  #设置标题字号
plt.show()

 2.DataFrame.plot()

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

#数据
data=pd.DataFrame(np.random.randn(8,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(20,100,10))

data.plot()

 

import pandas as pd
import matplotlib.pyplot as plt

#设置中文
plt.rcParams['font.sans-serif']='Microsoft YaHei'
plt.rcParams['font.size']=12

#数据
data=pd.DataFrame([[7,11],[10,1],[18,9],[12,5]],index=['1季度', '2季度', '3季度', '4季度'],columns=['python','java'])

#
fig=data.plot(kind='bar',title='2021年各季度销量书',figsize=(10,8))

fig.axes.title.set_size(40)  #设置标题字号

plt.show()

 

二、绘制多图 

 1. subplot函数:可以一张图中展示多个子图

语法:      

  subplot(nrows, ncols, index, facecolor, polar, **kwargs)        

  创建一个nrows 行,ncols 列的 Axes 对象,然后返回在 index 位置的子图

参数:

nrows,ncols,index:如果这三个数都小于10,则可以连写,2,2,1 可以写为 221。 facecolor:string型,如 ‘b',’r' 等,设置子图的背景。

polar:bool类型,默认为False,设置坐标是否为极坐标。 

import matplotlib.pyplot as plt
import numpy as np

#数据
x=np.linspace(0.0,6.0)
y1=np.cos(np.pi*x)
y2=np.cos(np.pi*x*2)

plt.subplot(211)
plt.plot(x,y1,'b--',label='cos(pi*x)')
plt.ylabel('y1')

plt.subplot(212)
plt.plot(x,y2,'r--',label='cos(pi*2*x)')
plt.xlabel('x')
plt.ylabel('y2')

plt.show()

# plt.subplot(211)会将原始的图像切割成2个子图像,是2行1列,并将现在的操作位置转到第一个子图上,这样便实现了绘制子图

import matplotlib.pyplot as plt
import numpy as np

#数据
x=np.linspace(0.0,6.0)
y1=np.cos(np.pi*x)
y2=np.cos(np.pi*x*2)
y3=np.sin(np.pi*x)
y4=np.sin(np.pi*x*2)

#画布
plt.figure(figsize=(10,6),dpi=80)

#子图1
plt.subplot(221)
plt.plot(x,y1,'b--',label='cos(pi*x)')
plt.ylabel('y1')

#子图2
plt.subplot(222)
plt.plot(x,y2,'r--',label='cos(pi*2*x)')
plt.xlabel('x')
plt.ylabel('y2')

#子图3
plt.subplot(223)
plt.plot(x,y3,'r*',label='sin(pi*x)')
plt.xlabel('x')
plt.ylabel('y3')

#子图4
plt.subplot(224)
plt.plot(x,y4,'b*',label='sin(pi*2)')
plt.xlabel('x')
plt.ylabel('y4')

#显示
plt.show()

# plt.subplot(221),表示将会切割成2行2列额4个子图

 2.subplots函数:可以一张图中展示多个子图

subplots 函数会返回一个figure 对象和一个 Axes 对象。

包含两个元素:第一个为一个画布figure,第二个是子图Axes

语法: subplots(nrows=1, ncols=1, sharex=False, sharey=False,   squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

参数:  

 nrows and ncols:行和列的个数。    

sharex and sharey:决定是否共享x轴或y轴。    

**fig_kw:figure 函数的参数都可以,如 figsize、facecolor等。

import matplotlib.pyplot as plt

plt.subplots()   #subplots返回的值的类型为元组,其中包含两个元素:第一个为一个画布,第二个是子图

 

import numpy as np
figure,ax=plt.subplots()
ax.plot(np.arange(1,10))
plt.show()

 

figure,ax=plt.subplots(2,2)  # 2行2列
figure

 

可见,画布被分为了4各部分,而ax变成了一个包含四个子图对象的array 

figure,ax=plt.subplots(2,2)
ax[0][0].plot(x,y1)
ax[0][1].plot(x,y2)
ax[1][0].plot(x,y3)
plt.show()

 

# plt.subplots()一次制作所有子图,然后将子图的图形和轴(复数轴)作为元组返回
#create a subplot with 2 rows and 1 columns
fig,axes=plt.subplots(2,1,figsize=(10,8),dpi=80)

#数据
data=pd.Series(np.random.rand(10)*100,index=list('abcdefghij'))

#柱状垂直图
data.plot.bar(ax=axes[0],color='g',alpha=.5)
axes[0].set_title('绘制垂直图')

#柱状水平图
data.plot.barh(ax=axes[1],color='r',alpha=.5)
axes[1].set_title('绘制水平图')

 

# 案例:创建 2 行 2 列的子图,并在每个子图中显示 4 个不同的图像。
# subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,
# 而 subplot() 只是创建一个包含子图区域的画布
import matplotlib.pyplot as plt
import numpy as np

#创建了一个 2 行 2 列的子图
# figsize:整型元组,来设置每英寸的宽度和高度,默认为None。
# dpi:整型,每英寸的像素点,默认值为None
fig,axes=plt.subplots(2,2,figsize=(10,8),dpi=80)


#数据
x=np.arange(1,6)
#绘制立方函数
axes[0][0].plot(x,np.power(x,3))
axes[0][0].set_title('绘制立方函数')
#绘制指数函数
axes[0][1].plot(x,np.exp(x))
axes[0][1].set_title('绘制指数函数')
#绘制平方函数
axes[1][0].plot(x,np.power(x,2))
axes[1][0].set_title('绘制平方函数')
#绘制平方根函数
axes[1][1].plot(x,np.sqrt(x))
axes[1][1].set_title('绘制平方根函数')
#轴标签
axes[1][1].set_xlabel('X')
axes[1][1].set_ylabel('Y')

#显示图片
plt.show()

 

 3.subplot和subplots两者区别

subplots 一次性创建并返回所有的子图和其 axe 对象。

subplot 是分开多次添加子图。每次调用返回一个子图和对应的 ax 对象

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值