目录
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline
一、plt.plot()
和下篇文章中的一、plt.plot()一模一样
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, table=False, yerr=None, xerr=None, secondary_y=False, sort_columns=False, **kwds)
- kind: 图表类型,line, bar, barh…(折线图,柱状图,柱状图-横…)
- figsize: 图表大小
- title: 图名
- legend: 是否显示图例,一般直接用plt.legend()
- label: 图例标签,一般仅Series设置label,DataFrame以columns为label
- xlim, ylim: x,y轴边界
- xticks, yticks: x,y轴刻度值
- grid: 是否显示网格,一般直接用plt.grid()
- style: 风格字符串,包括linestyle(-), marker(.), color(g)
- color: 颜色,比style中的color优先
- alpha: 透明度,0-1
- rot: 旋转刻度值,0-360,垂直图旋转xticks,水平图旋转yticks
- use_index: 是否将索引设置为刻度标签,默认为True,False时刻度标签为数字,表示第几个值
以下属性对DataFrame有效
- colormap: 可自动根据颜色板中的颜色自动为不同的项设置不同的颜色,颜色板链接如下:
colormaps_reference
在颜色板颜色后面添加"_r",按照反向顺序设置颜色 - subplots: 是否将各个列绘制为不同图表,默认False
Series.plot():默认index为横坐标,value为纵坐标
ts = pd.Series(np.random.randn(100), index = pd.date_range("2021-01-01", periods = 100))
ts = ts.cumsum()
# 也可以用plt.plot(ts)
ts.plot(kind = "line",
figsize = (6, 4),
title = "title",
legend = True, label = "label",
ylim = [-20, 20], yticks = list(range(-20, 20, 5)),
grid = True,
style = "--g", color = "red", alpha = 0.8,
rot = 45,
use_index = True)
DataFrame.plot()
df = pd.DataFrame(np.random.randn(100, 4),
columns = list('ABCD'),
index = pd.date_range("2021-01-01", periods = 100))
df = df.cumsum()
# 也可以用plt.plot(df)
df.plot(kind = "line",
figsize = (6, 4),
title = "title",
legend = True,
ylim = [-20, 20], yticks = list(range(-20, 20, 10)),
grid = False,
style = "--g", colormap = "cool", alpha = 0.8,
rot = 45,
use_index = True,
subplots = True)
二、plt.figure()
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class ‘matplotlib.figure.Figure’>, **kwargs)
- num:图表序号,如果不写则绘制到上一个Figure对象中,如果是同一个num则绘制到同一个Figure对象中
在matplotlib中,整个图像为一个Figure对象;
一个Figure对象可以包含一个或者多个Axes对象;
每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域。
fig1 = plt.figure(num = 1, figsize = (4, 2))
plt.plot(np.random.rand(50).cumsum(), 'k--')
fig2 = plt.figure(num = 2,figsize = (4, 2))
plt.plot(50 - np.random.rand(50).cumsum(), 'k--')
调用plt.plot()时,如果没有设置plt.figure(),会自动调用plt.figure()生成一个Figure对象,严格讲生成subplots(111)
fig = plt.figure(figsize = (4, 2))
plt.plot(np.random.rand(50).cumsum(), 'k--')
plt.plot(50 - np.random.rand(50).cumsum(), 'k--')
'''
等同于
fig1 = plt.figure(num = 1, figsize = (4, 2))
plt.plot(np.random.rand(50).cumsum(), 'k--')
fig2 = plt.figure(num = 1,figsize = (4, 2))
plt.plot(50 - np.random.rand(50).cumsum(), 'k--')
'''
三、子图
1、fig.add_subplot() 先创建figure对象,再(绘制子图,填充图表)*
先创建图表figure,然后生成子图,(2,2,1)代表创建2*2的矩阵表格,然后选择第一个,顺序是从左到右从上到下
创建子图后绘制图表,会绘制到最后一个子图
fig = plt.figure(figsize = (10, 6), facecolor = "gray")
ax1 = fig.add_subplot(2, 2, 1)
plt.plot(np.random.randn(10).cumsum(), 'k--')
plt.plot(np.random.randn(10).cumsum(), 'b--')
ax2 = fig.add_subplot(2, 2, 2)
ax2.plot(np.random.randn(10).cumsum(), 'k--')
ax4 = fig.add_subplot(2, 2, 4)
ax4.plot(np.random.randn(10).cumsum(), 'b--')
2、plt.subplots() 先创建多个子图的axes,再选择其中的轴绘图
fig, axes = plt.subplots(2, 3, figsize = (10, 4)) # 生成图表对象的数组
ax1 = axes[0, 1]
ax1.plot(np.random.randn(10).cumsum(), 'k--')
'''
fig:Figure(720x288)
type(fig):<class 'matplotlib.figure.Figure'>
axes:
[[<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91EC88908>
<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91ED01400>
<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F21A828>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F9170F0>
<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F95F320>
<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F999B38>]]
axes.shape:(2, 3)
type(axes):<class 'numpy.ndarray'>
'''
sharex, sharey:是否共享x, y刻度
wspace, hspace:控制子图间距和宽度、高度的百分比
fig, axes = plt.subplots(2, 3, figsize = (10, 4), sharex = True, sharey = True) # 生成图表对象的数组
for i in range(2):
for j in range(3):
axes[i, j].plot(np.random.randn(10).cumsum(), 'k--')
#plt.subplots_adjust(wspace = 0.1, hspace = 0)
3、plt.plot(subplots = True) 是否分别绘制子图
layout:绘制子图矩阵,按顺序填充
df = pd.DataFrame(np.random.randn(10, 4))
df = df.cumsum()
df.plot(style = "--.", figsize = (6, 6),
subplots = True,
layout = (2, 2),
sharex = True)
plt.subplots_adjust(wspace = 0.2, hspace = 0)
四、plt.gcf().clear()
plt.gcf().clear(),清空图表内容,可用于创建图表之前
五、图表导出
plt.savefig(path, dpi = 400, bbox_inches = ‘tight’, facecolor = ‘g’, edgecolor = ‘r’)
- path:路径,后缀名支持png, pdf, svg, ps, eps…
- dpi:分辨率
- bbox_inches:图表需要保存的部分,如果设置为‘tight’,则尝试剪除图表周围的空白部分
- facecolor:图像的背景色,默认为‘w’
- edgecolor:图像的边缘线颜色,默认为‘w’
df.plot()
plt.savefig('C:/Users/ctsi/Desktop/pic.png',
dpi = 400,
bbox_inches = 'tight',
facecolor = 'g',
edgecolor = 'r')