画图工具:Matplotlib(1)

一,Matplotlib简介及图标窗口

Matplotlib → 一个python版的matlab绘图接口,以2D为主,支持python、numpy、pandas基本数据结构,运营高效且有较丰富的图表库

1.1,图标窗口(1)
# 图标窗口(1) -->  plt.show()

plt.plot(np.random.rand(10))
plt.show()
# 必须使用plt.show()生成窗口图标

在这里插入图片描述

1.2,图表窗口(2)
# 图标窗口2 -->  魔法函数,嵌入图标

%matplotlib inline
x = np.random.rand(1000)
y = np.random.rand(1000)
plt.scatter(x, y)
# 直接嵌入图表,不用plt.show()
# <matplotlib.collections.PathCollection at ...> 代表该图表对象

在这里插入图片描述

1.3,图表窗口(3)
# 图标窗口3  -->  魔法函数,在notebook里弹出可交互的Matplotlib窗口

%matplotlib notebook
s = pd.Series(np.random.rand(100))
s.plot(style='k-o', figsize=(10, 5))
# 可交互的matplotlib窗口,不用plt.show()
# 可做一定调整

在这里插入图片描述

1.4,图表窗口(4)
# 图表窗口4 → 魔法函数,弹出matplotlib控制台

%matplotlib qt5
df = pd.DataFrame(np.random.rand(50,2),columns=['A','B'])
df.hist(figsize=(12,5),color='g',alpha=0.8)
# 可交互性控制台
# 如果已经设置了显示方式(比如notebook),需要重启然后再运行魔法函数
# 网页嵌入的交互性窗口 和 控制台,只能显示一个

#plt.close()    
# 关闭窗口

#plt.gcf().clear()  
# 每次清空图表内内容

在这里插入图片描述

1.5,notebook与qt5区别
"""
	使用%matplotlib qt5和%matplotlib notebook绘图注意点:
		1.网页嵌入的交互性窗口 和 控制台,只能显示一个
		2.如果已经使用系统会提醒:
			Warning: Cannot change to a different GUI toolkit: qt5. Using notebook instead.
		3.如出现上面的情况必须重新启动服务
		4.如果继续画图则会按照%matplotlib引入的执行
"""
1.6,Matplotlib中文显示乱码
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong'] 
mpl.rcParams['axes.unicode_minus'] = False 
# 指定默认字体仿宋
# 解决保存图像是负号'-'显示为方块的问题
字体输入
黑体SimHei
仿宋FangSong
楷体(最好看)KaiTi

二,图表的基本元素

1.1,基本表格要素
df = pd.DataFrame(np.random.rand(10,2),columns=['a','b'])

fig = df.plot(figsize=(10, 4))	# figsize:设置窗口大小


plt.title('我的第一个图标')	# 图表名
plt.xlabel('X轴')	# x轴标签
plt.ylabel('Y轴')	# y轴标签

plt.legend(loc='lower center')    # 图例的位置
# 显示图例,loc表示位置
# 'best'         : 0, (only implemented for axes legends)(自适应方式)
# 'upper right'  : 1, 右上
# 'upper left'   : 2, 左上
# 'lower left'   : 3, 左下
# 'lower right'  : 4, 右下
# 'right'        : 5, 右边
# 'center left'  : 6, 左中
# 'center right' : 7, 右中
# 'lower center' : 8, 下中
# 'upper center' : 9, 上中
# 'center'       : 10,正中

# plt.xlim([0, 9])    # x轴边界(数值的范围)
# plt.ylim([0, 10])   # y轴边界(数值的范围)
# plt.xticks(range(11))  # 设置x刻度范围
# plt.yticks([0,0.2,0.4,0.6,0.8,1.0,1.2])  # 设置y刻度范围
fig.set_xticklabels("%.1f" %i for i in range(10))  # x轴刻度标签
fig.set_yticklabels("%.2f" %i for i in [0,0.2,0.4,0.6,0.8,1.0,1.2])  # y轴刻度标签
# 范围只限定图表的长度,刻度则是决定显示的标尺 → 这里x轴范围是0-12,但刻度只是0-9,刻度标签使得其显示1位小数
# 轴标签则是显示刻度的标签

print(fig,type(fig))
# 查看表格本身的显示方式,以及类别

在这里插入图片描述

1),边界和刻度的区别

​ 【边界】xlim指的是整个表格x轴的值y轴的值的范围(图表会根据边界改变形状)

​ 【刻度】ticks指的是表格上显示的刻度的值(比如实际x边界是-55,你可以让他的刻度值显示05)在这里插入图片描述

​ 【刻度标签】刻度显示的值,可以自定义,比如此图是0~9的边界,把刻度标签换成abcd

1.2,网格,刻度,坐标轴
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
c, s = np.cos(x), np.sin(x)
plt.plot(x, c)
plt.plot(x, s)
# 通过ndarry创建图表

plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5",axis = 'x')  
# 显示网格
# linestyle:线型
# color:颜色
# linewidth:宽度(粗)
# axis:x,y,both,显示x/y/两者的格网

plt.tick_params(bottom='on',top='off',left='on',right='off')  
# 表格边界上下左右的刻度显示,on开启,off关闭

import matplotlib
matplotlib.rcParams['xtick.direction'] = 'out' 
matplotlib.rcParams['ytick.direction'] = 'inout' 
# 轴刻度的方向(向内还是向外),in(里面),out(外面),inout(中间)

#plt.axis('off')
# 关闭坐标轴

frame = plt.gca()
#frame.axes.get_xaxis().set_visible(False)
#frame.axes.get_yaxis().set_visible(False)
# x/y 轴不可见

在这里插入图片描述

三,图表的样式参数

linestylestylecolormarker

3.1,linestyle线样式
plt.plot(np.arange(100),
        linestyle = '-.')
# '-'       solid line style
# '--'      dashed line style
# '-.'      dash-dot line style
# ':'       dotted line style

在这里插入图片描述

3.2,marker数据点样式
s = pd.Series(np.random.randn(100).cumsum())
s.plot(linestyle = '--',
      marker = 'h')
# '.'       point marker
# ','       pixel marker
# 'o'       circle marker
# 'v'       triangle_down marker
# '^'       triangle_up marker
# '<'       triangle_left marker
# '>'       triangle_right marker
# '1'       tri_down marker
# '2'       tri_up marker
# '3'       tri_left marker
# '4'       tri_right marker
# 's'       square marker
# 'p'       pentagon marker
# '*'       star marker
# 'h'       hexagon1 marker
# 'H'       hexagon2 marker
# '+'       plus marker
# 'x'       x marker
# 'D'       diamond marker
# 'd'       thin_diamond marker
# '|'       vline marker
# '_'       hline marker

在这里插入图片描述

3.3,color颜色设置(数据颜色)
plt.hist(np.random.randn(100),
        color = 'r',alpha = 0.7)

# alpha:0-1,透明度
# 常用颜色简写:red-r, green-g, black-k, blue-b, yellow-y
# 颜色也可以显示为列如#eeeeee这样的网页颜色

在这里插入图片描述

df = pd.DataFrame(np.random.randn(1000, 4),columns=list('ABCD'))
df = df.cumsum()
df.plot(style = '--.',alpha = 0.8,colormap = 'YlOrRd_r')
# colormap:颜色板,包括:
# Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r,
# Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, 
# PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, 
# RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, 
# YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, 
# cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r,
# gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, 
# gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, 
# nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spectral, 
# spectral_r ,spring, spring_r, summer, summer_r, terrain, terrain_r, viridis, viridis_r, winter, winter_r

# 其他参数见“颜色参数.docx”

在这里插入图片描述

3.4,style复合样式写法(lcm)
ts = pd.Series(np.random.randn(1000).cumsum(), index=pd.date_range('1/1/2000', periods=1000))
ts.plot(style = '-g*',grid = True)
# style → 风格字符串,这里包括了linestyle(-),color(g),marker(*)
# plot()内也有grid(显示网格)参数

在这里插入图片描述

3.5,整体风格样式
import matplotlib.style as psl
print(plt.style.available)
# 查看样式列表
psl.use('Solarize_Light2')
# 选取风格,注意!一旦使用其中一种风格,所有的图表都会有
['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']

在这里插入图片描述

四,刻度、注解、图表输出

​4.1,刻度
1),主刻度
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

x = [i**2 for i in range(100)]
ax = plt.subplot() #注意:格式一般都在ax中设置,不在plot中设置
plt.grid(True, linestyle = "-.",color = "green", linewidth = "0.7",axis = 'both')  
plt.plot(x, color='r')

xmajorLocator = MultipleLocator(5) # x轴主标签的值格式,5的倍数
ymajorLocator = MultipleLocator(500) # y轴主标签的值格式,5的倍数
ax.xaxis.set_major_locator(xmajorLocator)  # 应用x轴主刻度
ax.yaxis.set_major_locator(ymajorLocator)  # 应用y轴主刻度

xmajorFormatter = FormatStrFormatter('%.0f') # 设置x轴标签文本的格式
ymajorFormatter = FormatStrFormatter('%.0f') # 设置y轴标签文本的格式

ax.xaxis.set_major_formatter(xmajorFormatter)  # 应用x轴标签文本格式
ax.yaxis.set_major_formatter(ymajorFormatter)  # 应用y轴标签文本格式

在这里插入图片描述

2),副刻度
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

x = [i**2 for i in range(100)]
ax = plt.subplot(111) #注意:一般都在ax中设置,不再plot中设置
plt.grid(True, linestyle = "-.",color = "green", linewidth = "0.7",axis = 'both')  
plt.plot(x, color='r')

xminorLocator = MultipleLocator(500) # x轴副标签的值格式,500的倍数
yminorLocator = MultipleLocator(250) # y轴副标签的值格式,250的倍数

ax.xaxis.set_minor_locator(xminorLocator)  # 应用x轴次刻度
ax.yaxis.set_minor_locator(yminorLocator)  # 应用y轴次刻度

在这里插入图片描述

3),刻度网格

决定要不要让网格根据副刻度划分图标

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

x = [i**2 for i in range(100)]
ax = plt.subplot(111) #注意:一般都在ax中设置,不再plot中设置
plt.grid(True, linestyle = "-.",color = "green", linewidth = "0.7",axis = 'both')  
plt.plot(x, color='r')

ax.xaxis.grid(True, which='both') #x坐标轴的网格主副刻度都使用
ax.yaxis.grid(True, which='minor') #y坐标轴的网格使用副刻度
# which:格网显示    which : {'major', 'minor', 'both'}

在这里插入图片描述

4),删除刻度显示
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

x = [i**2 for i in range(100)]
ax = plt.subplot(111) #注意:一般都在ax中设置,不再plot中设置
plt.grid(True, linestyle = "-.",color = "green", linewidth = "0.7",axis = 'both')  
plt.plot(x, color='r')

#删除坐标轴的刻度显示
ax.yaxis.set_major_locator(plt.NullLocator()) 
ax.xaxis.set_major_formatter(plt.NullFormatter())

在这里插入图片描述

4.2,注释
df = pd.DataFrame(np.random.randn(10,2))
df.plot(style = '--o')
plt.text(5,0.5,'hahaha',fontsize=10)  
plt.text(2, 0.5, '666', fontsize=10)
# 注解 → 横坐标,纵坐标,注解字符串

在这里插入图片描述

4.3,图表输出

df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
df = df.cumsum()
df.plot(style = '--.',alpha = 0.5)
plt.legend(loc = 'best')
plt.savefig('D:/python/python思维导图和笔记/数据分析/五,Matplotlib/text.png',
            dpi=400,
            bbox_inches = 'tight',
            facecolor = 'blue',
            edgecolor = 'r')
# 可支持png,pdf,svg,ps,eps…等,以后缀名来指定
# dpi是分辨率
# bbox_inches:图表需要保存的部分。如果设置为‘tight’,则尝试剪除图表周围的空白部分。
# facecolor(图像周围颜色),edgecolor: 图像的背景色,默认为‘w’(白色)

在这里插入图片描述

五,子图

  1. plt.figure():绘图对象(相当于创建了一块画布用来填充子图的对象)
  2. 参数:plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None,frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, **kwargs)
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--')
# num:图表序号,可以试试不写或都为同一个数字的情况,图表如何显示
# figsize:图表大小

# 当我们调用plot时,如果设置plt.figure(),则会自动调用figure()生成一个figure, 严格的讲,是生成subplots(111)
5.1,子图的创建方法一
fig = plt.figure(figsize=(10, 6), facecolor='orange')    # 创建图标对象(画布)

fig.add_subplot(2, 2, 1)    # 创建第一个子图,(2,2,1)代表创建2*2的矩阵表格,1代表第一个图
plt.plot(np.random.randn(50).cumsum(), '--*r')    # 在第一个子图上画图
fig.add_subplot(2, 2, 2)    # 创建第二个子图,(2,2,1)代表创建2*2的矩阵表格,2代表第二个图
plt.plot(np.random.randn(100).cumsum(), '-.*b')
x = fig.add_subplot(2, 2, 3)    # 创建第三个子图,(2,2,1)代表创建2*2的矩阵表格,3代表第二个图
x.plot(np.random.randn(100).cumsum(), '-.*y')    # 直接在子图上画

在这里插入图片描述

5.2,子图的创建方法二
fig, axes = plt.subplots(2, 3, figsize=(10, 4))
ts = pd.Series(np.random.randn(1000).cumsum())
print(axes.shape, type(axes))    # (2, 3) <class 'numpy.ndarray'>

ax1 = axes[0, 0]    # 选中那个图表(图表下标)
ax1.plot(ts)

axes[1, 2].plot(ts, '--r')   # 选中第二排第三个

在这里插入图片描述

5.3,plt.subplots,子图参数
fig, axes = plt.subplots(2, 3, figsize=(10, 4), sharex=True,sharey=True)
# sharex,sharey:是否共享x,y刻度
ts = pd.Series(np.random.randn(1000).cumsum())

ax1 = axes[0, 0]    # 选中那个图表(图表下标)
ax1.plot(ts)

axes[1, 2].plot(ts, '--r')   # 选中第二排第三个

在这里插入图片描述

5.4,子图创建3 - 多系列图,分别绘制
df = pd.DataFrame({
    'xyb':pd.Series(np.random.rand(7)*100, index=pd.date_range('2019-12-1', '2019-12-7')),
    'XYs':pd.Series(np.random.rand(7)*100, index=pd.date_range('2019-12-1', '2019-12-7')),
    'C':pd.Series(np.random.rand(7)*100, index=pd.date_range('2019-12-1', '2019-12-7')),
    'yb':pd.Series(np.random.rand(7)*100, index=pd.date_range('2019-12-1', '2019-12-7')),
})

df.plot(style = '--.',alpha = 0.4,grid = True,figsize = (8,8),
        subplots = True,    # subplots,是否分别绘制子图
        layout = (2,3),     # layout:容纳子图容器的形状(2行3列),按顺序填充
        sharex=True,        
        sharey=True)    # 公用x,y轴
plt.subplots_adjust(wspace=0.3,hspace=0.1)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值