一、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)
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()
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()
语法:
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个子图
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()
subplots 一次性创建并返回所有的子图和其 axe 对象。
subplot 是分开多次添加子图。每次调用返回一个子图和对应的 ax 对象