1 plot介绍
????????使用DataFrame的plot方法绘制图像会按照数据的每一列绘制一条曲线,默认按照列columns的名称在适当的位置展示图例,比matplotlib绘制节省时间,且DataFrame格式的数据更规范,方便向量化及计算。
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False,
sharex=None, sharey=False, layout=None, figsize=None,
use_index=True, title=None, grid=None, legend=True,
style=None, logx=False, logy=False, loglog=False,
xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
fontsize=None, colormap=None, position=0.5, table=False, yerr=None,
xerr=None, stacked=True/False, sort_columns=False,
secondary_y=False, mark_right=True, **kwds)
?2 主要参数
kind? | 绘图类型 | ‘line’ | 折线图 | ‘bar’ | 条形图。 stacked为True时为堆叠的柱状图 | ‘barh’? | 横向条形图 | ‘hist’ | 直方图(数值频率分布) | ‘box’? | 箱型图 | ‘kde’ | Kernel Density Estimation plot 密度图,主要对柱状图添加Kernel 概率密度线 | ‘area’? | 与x轴所围区域图(面积图)。 Stacked=True时,每列必须全部为正或负值, stacked=False时,对数据没有要求 | ‘pie’ | 饼图。 数值必须为正值,需指定Y轴或者subplots=True | ‘scatter’? | 散点图。需指定X轴Y轴 | ‘hexbin’? | 蜂巢图。需指定X轴Y轴 | subplots? | ?boolean default False 是否对列分别作子图 | grid | 图片是否有网格 | legend | 子图的图例 (默认为True) | logx? | 设置x轴刻度是否取对数 | logy? | 设置y轴刻度是否取对数 | loglog | 同时设置x,y轴刻度是否取对数 | xlim&ylim | 设置坐标轴的范围。 数值(最小值)或元组(区间范围) | fontsize | 设置轴刻度的字体大小 | colormap | 设置图的区域颜色 | colorbar | 柱子颜色 | secondary_y? | ?boolean or sequence, default False? 设置第二个y轴(右辅助y轴) |
?2.1 其他需要注意的地方
2.1.1 设置X、Y轴名称
ax.set_ylabel('yyy')
ax.set_xlabel('xxx')
2.1.2 plt.legend(loc='best')
2.1.3每种绘图类型都有相对应的方法。
比如,?df.plot(kind='line')与df.plot.line()等价
2.1.4 画图步骤
1)首先定义画图的画布:fig = plt.figure( )
2)然后定义子图ax ,使用 ax= fig.add_subplot( 行,列,位置标)
3)用 ax.plot( )函数或者 df.plot(ax = ax)
4)结尾加plt.show()
3 画图举例
3.0 直接做图
每一列一条线
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
# ts = ts.cumsum()
df =pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()
df.plot()
#每一列一条线
?
?
3.1 主副轴
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
df =pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()
#A图用左Y轴标注,B图用右Y轴标注,二者共用一个X轴
df.A.plot()#对A列作图,同理可对行做图
df.B.plot(secondary_y=True, style='g')#设置第二个y轴(右y轴)
?3.1.1 主副轴分别设置标签位置
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
df =pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()
ax = df.plot(secondary_y=['A', 'B'])
# 定义column A B使用右Y轴。
ax.set_ylabel('CD scale')
ax.right_ax.set_ylabel('AB scale')
ax.legend(loc='upper left') #设置图例的位置
ax.right_ax.legend(loc='upper right')
#分别设置主副轴的位置和标题
plt.show()
?
|