python plot函数
1、线形图Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线型图(如下图所示):In [1]: from pandas import Series,DataFrameIn [2]: import numpy as npIn [3]: s=Series(np.random.randn(10).cumsum(),index=np.arange(0,10
1、线形图
Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线型图(如下图所示):
In [1]: from pandas import Series,DataFrame
In [2]: import numpy as np
In [3]: s=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
In [4]: s.plot()
该Series对象的索引会被传给matplotlib,并用以绘制X轴。可以通过use_index=False禁用该功能。X轴的刻度和界限可以通过xticks和xlim选项进行调节,Y轴就用yticks和ylim。plot参数的完整列表请参见表一。
pandas的大部分绘图方法都有一个可选的ax参数,它可以是一个matplotlib的subplot对象。这使我们能够在网格布局中更为灵活地处理subplot的位置。
DataFrame的plot方法会在一个subplot中为各列绘制一条线,并自动创建图例,如下图所示:
In [21]: from pandas import Series,DataFrame
In [22]: df=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'] ,index=np.arange(0,100,10))
In [23]: df.plot()
表一:Series.plot方法的参数
参数 说明
label 用于图例的标签
ax 要在其上进行绘制的matplotlib subplot对象。如果没有设置,则使用当前matplotlib subplot
sytle 将要传给matplotlib的风格字符串(如‘ko--’)
alpha 图表的填充不透明度(0到1之间)
kind 可以是'line'、'bar'、'barh'、'kde'
logy 在Y轴上使用对数标尺
use_index 将对象的索引用作刻度标签
rot 旋转刻度标签(0到360)
xticks 用作X轴刻度的值
yticks 用作Y轴刻度的值
xlim X轴的界限(例如[0,10])
ylim Y轴的界限
grid 显示轴网格线(默认打开)
DataFrame还有一些用于列进行灵活处理的选项,例如,是要将所有列都绘制到一个subplot中还是创建各自的subplot。详细信息参见表二
表二:专用于DataFrame的plot的参数
参数 说明
subplot 将各个DataFrame列绘制到单独的subplot中
sharex 如果subplots=True,则共用同一个X轴,包括刻度和界限
sharey 如果subplots=True,则共用同一个Y轴
figsize 表示图像大小的元组
title 表示图像标题的字符串
legend 添加一个subplot图例(默认为True)
sort_columns 以字母表顺序绘制各列,默认使用当前列顺序
2、柱状图
在生成线形图的代码中加上kind='bar'(垂直柱状图)或kind='barh'(水平柱状图)即可生成柱状图。这时,Series和DataFrame的索引将会被用作X(bar)或Y(barh)刻度(如下图所示):
data = pd.Series(np.random.rand(10),index=pd.date_range('20210101',
periods=10,freq='d'))
fig,axes=plt.subplots(2,1)
data.plot(kind='bar',ax=axes[0],color='k',alpha=0.7)
data.plot(kind='barh',ax=axes[1],color='k',alpha=0.7)
对于DataFrame,柱状图会将每一行的值分为一组,如下图所示:
data = pd.DataFrame(np.random.rand(6,4),index=['one','two','three','four',
'five','six'],columns=list('ABCD'))
data.plot(kind='bar',alpha=0.7)
注意,DataFrame各列的值被用作了图例的标题。设置stacked=True即可为DataFrame生成堆积柱状图,这样每行的值就会被堆积在一起(如下图所示):
data = pd.DataFrame(np.random.rand(6,4),index=['one','two','three','four',
'five','six'],columns=list('ABCD'))
data.plot(kind='bar',stacked=True,alpha=0.7)
3、直方图和密度图
直方图(histogram)是一种可以对值频率进行离散化显示的柱状图。数据点被拆分到离散的、间隔均匀的面元中,绘制的是各面元中数据点的数量。与此相关的一种图表类型是密度图,它是通过计算“可能会产生观测数据的连续概率分布的估计”而产生的。一般的过程是将该分布近似为一组核(即诸如正态(高斯)分布之类的较为简单的分布)。因此,密度图也被称作KDE(Kernel Density Estimate,核密度估计)图。调用plot时加上kind='kde'即可生成一张密度图(标准混合正态分布KDE)
这两种图表常常会被画在一起。直方图以规格化形式给出(以便给出面元化密度),然后再在其上绘制核密度估计。接下来来看一个由两个不同的标准正态分布组成的双峰分布:
import numpy as np
import scipy
comp1 = np.random.normal(0,1,size=200)
comp2 =np.random.normal(10,2,size=200)
values=pd.Series(np.concatenate([comp1,comp2]))
values.hist(bins=100,alpha=0.3,color='k',density=True)
values.plot(kind='kde',style='k--')
4、散点图
import numpy as np
import matplotlib.pyplot as plt
N=50
x=np.random.rand(N)
y=np.random.rand(N)
colors=np.random.rand(N)
area = (30*np.random.rand(N))**2
plt.scatter(x,y,s=area,c=colors,alpha=0.5)
更多推荐
所有评论(0)