matplotlib基础

matplotlib基本用法

一、Matplotlib基础知识

1.绘制一条曲线图

import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
# 1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线
f = lambda x: (1-x**2)**0.5
x = np.linspace(-1,1,100)
y = f(x)
s = Series(index=x, data=y)
s.plot()
# 如果想在一个画布中,绘制多条线,必须保证每一个plot函数都写在同一个cell中
# 每一个cell都自动维护一个画布,所有的plt.plot函数绘制的图形,都呈现在这个画布当中
plt.plot(x,y)
plt.plot(x,-y)
plt.plot(x,x)
#2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线
plt.plot(x,y, x,-y, x,x)

2、画板的布局

 #画布构建
    figure.add_subplot(*args, **kwargs)
    #参数:
    fig.add_subplot(212, facecolor='r')
    fig.add_subplot(111, projection='polar')
      # add Subplot instance sub
    fig.add_subplot(sub)


   #  **kwargs参数
  adjustable: [ 'box' | 'datalim' | 'box-forced'] 
  agg_filter: unknown
  alpha: float (0.0 transparent through 1.0 opaque) 
  anchor: unknown
  animated: [True | False] 
  aspect: unknown
  autoscale_on: unknown
  autoscalex_on: unknown
  autoscaley_on: unknown
  axes: an :class:`~matplotlib.axes.Axes` instance 
  axes_locator: unknown
  axisbelow: [ *True* | *False* | 'line' ] 
  clip_box: a :class:`matplotlib.transforms.Bbox` instance 
  clip_on: [True | False] 
  clip_path: [ (:class:`~matplotlib.path.Path`, :class:`~matplotlib.transforms.Transform`) | :class:`~matplotlib.patches.Patch` | None ] 
  color_cycle: unknown
  contains: a callable function 
  facecolor: unknown
  fc: unknown
  figure: unknown
  frame_on: [ *True* | *False* ] 
  gid: an id string 
  label: string or anything printable with '%s' conversion. 
  navigate: [ *True* | *False* ] 
  navigate_mode: unknown
  path_effects: unknown
  picker: [None|float|boolean|callable] 
  position: unknown
  rasterization_zorder: unknown
  rasterized: [True | False | None] 
  sketch_params: unknown
  snap: unknown
  title: unknown
  transform: :class:`~matplotlib.transforms.Transform` instance 
  url: a url string 
  visible: [True | False] 
  xbound: unknown
  xlabel: unknown
  xlim: unknown
  xmargin: unknown
  xscale: ['linear' | 'log' | 'logit' | 'symlog']
  xticklabels: sequence of strings
  xticks: sequence of floats 
  ybound: unknown
  ylabel: unknown
  ylim: unknown
  ymargin: unknown
  yscale: ['linear' | 'log' | 'logit' | 'symlog']
  yticklabels: sequence of strings
  yticks: sequence of floats
  zorder: any number 
  • 示例代码
#1、通过画板对象设置子画布
# 推荐使用 ,这种方式更方便控制各个画布的绘制
figure = plt.figure(figsize=(8,4))
# 在画板对象上添加子画布
# 后绘制的画布会覆盖先绘制的画布,表示画布在2行2列画板中的第一个
#参数:facecolor="r" projection="polar"
axes = figure.add_subplot(2,2,1)
# 画布可以执行plot函数,来绘制线性图
axes.plot(x,y)

#2、直接通过plt创建
plt.figure(figsize=(12,4))
axes = plt.subplot(1,2,1)
axes.plot(x, y)
axes1 = plt.subplot(1,2,2)
axes1.plot(x, -y)

3、网格线

使用plt.grid方法可以开启网格线,使用plt面向对象的方法,创建多个子图显示不同网格线

plt.grid(axis="x",b=None, which='major', axis='both', **kwargs)
#例子
ax.grid(color='r', linestyle='-', linewidth=2)
#参数
axis显示轴向
agg_filter: unknown
    #alpha表示线的明暗程度
  alpha: float (0.0 transparent through 1.0 opaque) 
  animated: [True | False] 
  antialiased or aa: [True | False] 
  axes: an :class:`~matplotlib.axes.Axes` instance 
  clip_box: a :class:`matplotlib.transforms.Bbox` instance 
  clip_on: [True | False] 
  clip_path: [ (:class:`~matplotlib.path.Path`, :class:`~matplotlib.transforms.Transform`) | :class:`~matplotlib.patches.Patch` | None ] 
    #color代表颜色
  color or c: any matplotlib color 
  contains: a callable function 
  dash_capstyle: ['butt' | 'round' | 'projecting'] 
  dash_joinstyle: ['miter' | 'round' | 'bevel'] 
  dashes: sequence of on/off ink in points 
  drawstyle: ['default' | 'steps' | 'steps-pre' | 'steps-mid' | 'steps-post'] 
  figure: a :class:`matplotlib.figure.Figure` instance 
  fillstyle: ['full' | 'left' | 'right' | 'bottom' | 'top' | 'none'] 
  gid: an id string 
    #
  label: string or anything printable with '%s' conversion. 
    #
  linestyle or ls: ['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq) | ``'-'`` | ``'--'`` | ``'-.'`` | ``':'`` | ``'None'`` | ``' '`` | ``''``]
    #lw代表linewidth,线的粗细
  linewidth or lw: float value in points 
    #
  marker: :mod:`A valid marker style <matplotlib.markers>`
    #
  markeredgecolor or mec: any matplotlib color 
    #
  markeredgewidth or mew: float value in points 
    #
  markerfacecolor or mfc: any matplotlib color 
  markerfacecoloralt or mfcalt: any matplotlib color 
  markersize or ms: float 
  markevery: [None | int | length-2 tuple of int | slice | list/array of int | float | length-2 tuple of float]
  path_effects: unknown
  picker: float distance in points or callable pick function ``fn(artist, event)`` 
  pickradius: float distance in points 
  rasterized: [True | False | None] 
  sketch_params: unknown
  snap: unknown
  solid_capstyle: ['butt' | 'round' |  'projecting'] 
  solid_joinstyle: ['miter' | 'round' | 'bevel'] 
  transform: a :class:`matplotlib.transforms.Transform` instance 
  url: a url string 
  visible: [True | False] 
  xdata: 1D array 
  ydata: 1D array 
  zorder: any number 
  • 示例代码
# 画板
plt.grid(axis="y",lw=3,alpha=0.3,color="#00aaff")

#画布
plt.figure(figsize=(8,6))
ax1 = plt.subplot(2,2,1)
ax1.grid(axis="y",lw=3,alpha=0.3,color="#00aaff")
ax1.plot(x, y)
ax1.plot(x, -y)

3、坐标轴界定

#格式
plt.axis(*v, **kwargs)
#参数
[xmin, xmax, ymin, ymax] 限制坐标轴的数值范围
axis('off')	# 关闭坐标轴和标签
axis('equal')	#x轴和y轴有相同的刻度增长值
axis('scaled')	#改变画布的尺寸得到相同的结果
axis('tight')	#修改(*xmax* - *xmin*)或(*ymax* -)的情况下将数据移动到图的中心
axis('square')	#将*x*和*y*轴的极限范围(*xmax*-*xmin*)和(*ymax*-*ymin*)更改为相同,并具有相同的缩放,从而得到一个正方形的图。

  • 代码示例
#1、设置坐标轴限制
#plt
x = np.linspace(-np.pi, np.pi, 20)
y = np.sin(x)
plt.plot(x, y)
plt.axis([-5,5,-2,2])
# ax 
ax = plt.subplot(1,1,1)
ax.axis([-5,5,-2,2])
ax.plot(x, y)

#2、设置坐标轴类型
x = np.linspace(-1,1,100)
y = (1-x**2)**0.
ax = plt.subplot(111)
ax.plot(x, y)
# on off 设置坐标轴是否显示
# ax.axis("off")
# equal scale设置坐标轴刻度比例
ax.axis("scaled")
# ax.axis("equal")

  • xlim方法和ylim方法,除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
# plt
plt.ylim([-3,3])
plt.xlim([-3,3])
plt.axis("scaled")

#ax
ax = plt.subplot(111)
# set函数
ax.set_ylim([-2,2])

4、坐标轴标签

xlabel方法和ylabel方法
plt.ylabel(‘y = x^2 + 5’,rotation = 60)旋转

plt.xlabel(s, *args, **kwargs)
# 参数
s  #标签名字符串
color #标签颜色
fontsize #字体大小
rotation #旋转角度
  • 代码示例
#plt
plt.xlabel("X-Label",color="purple", fontsize=20)
plt.ylabel("Y-Label", rotation = 50, fontsize=15)

#ax
ax = plt.subplot(111)
ax.set_xlabel("X-label",color="green", fontsize=18)
ax.set_ylabel("Y-label",fontdict={
    "fontsize":20,
    "color":"red"
})

5、标题

  • 格式
 1、plt.title(s, *args, **kwargs)
/2、ax2.set_title(label, fontdict=None, loc='center', **kwargs)
#参数
loc {left,center,right}
color 标签颜色
fontsize 字体大小
rotation 旋转角度
  • 代码示例

    #plt
    plt.title("Title",color="red",fontsize=16,rotation=0, loc="left")
    
    #ax
    plt.figure(figsize=(16,8))
    ax1 = plt.subplot(1,2,1)
    ax1.set_title("AXES1",color="greenyellow")
    
    ax2 = plt.subplot(1,2,2)
    ax2.set_title("AXES2",color="cyan")
    

6、图例

  • 格式
plt.legend(*args, **kwargs)
# 1两种传参方法:
分别在plot函数中增加label参数,再调用legend()方法显示
直接在legend方法中传入字符串列表
# 2、loc参数
loc参数用于设置图例标签的位置,一般在legend函数内
matplotlib已经预定义好几种数字表示的位置
字符串	数值	字符串	数值
best	0	center left	6
upper right	1	center right	7
upper left	2	lower center	8
lower left	3	upper center	9
lower right	4	center	10
right	5
loc参数可以是2元素的元组,表示图例左下角的坐标
[0,0] 左下
[0,1] 左上
[1,0] 右下
[1,1] 右上
# ncol控制图例中有几列,在legend中设置ncol,需要设置loc
 
  • 代码示例
x = np.linspace(-np.pi, np.pi, 50)
y = np.sin(x)
# 第一种方法【推荐】
plt.plot(x, y, label="sin(x)")
plt.plot(x, np.cos(x), label="cos(x)")
# 必须调用legend函数,才能显示图例
plt.legend()

# 第二种方法
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.legend(["sin(x)", "cos(x)"])


plt.plot(x, y, label="sin(x)")
plt.plot(x, np.cos(x), label="cos(x)")
# 在legend函数中,传入loc参数,来控制图例的显示位置
plt.legend(loc=[1.1,0.1])


plt.plot(x, y, label="sin(x)")
plt.plot(x, np.cos(x), label="cos(x)")
# ncol参数,用于设置图例显示的列数
plt.legend(loc=0, ncol=2)


7、修改线条样式(linestyle、color、marker)

  • 格式
#1点和线的样式
#颜色
参数color或c
#颜色值的方式
颜色	别名	HTML颜色名	颜色	别名	HTML颜色名
蓝色	b	blue	绿色	g	green
红色	r	red	黄色	y	yellow
青色	c	cyan	黑色	k	black
洋红色	m	magenta	白色	w	white
#HTML十六进制字符串
color = '#eeefff'
#归一化到[0, 1]的RGB元组
color = (0.3, 0.3, 0.4)

#alpha参数   小数

#设置背景色,通过plt.subplot()方法传入facecolor参数,来设置坐标系的背景色

#线性,参数linestyle或ls
线条风格	描述	线条风格	描述
'-'	实线	':'	虚线
'--'	破折线	'steps'	阶梯线
'-.'	点划线	'None' / ','	什么都不画
#自定义 线性
不同宽度的破折线
dashes参数 eg.dashes = [20,50,5,2,10,5]
设置破折号序列各段的宽度

#线宽
linewidth或lw参数

# 2、点型
#marker 设置点形
标记	描述	标记	描述
'1'	一角朝下的三脚架	'3'	一角朝左的三脚架
'2'	一角朝上的三脚架	'4'	一角朝右的三脚架
标记	描述	标记	描述
's'	正方形	'p'	五边形
'h'	六边形1	'H'	六边形2
'8'	八边形
标记	描述	标记	描述
'.''x'	X
'*'	星号	'+'	加号
','	像素
标记	描述	标记	描述
'o'	圆圈	'D'	菱形
'd'	小菱形	'','None',' ',None	无
标记	描述	标记	描述
'_'	水平线	'|'	竖线
标记	描述	标记	描述
'v'	一角朝下的三角形	'<'	一角朝左的三角形
'^'	一角朝上的三角形	'>'	一角朝右的三角形
#markersize 设置点形大小
#markeredgecolor 设置点边缘颜色
#markeredgewidth	设置点边缘宽度
# markerfacecolor 设置点主体颜色

  • 代码示例
x = np.arange(0,5,step=1)
y = x**2
# marker设置点的形状
plt.plot(x, y, ls="steps", marker="x", color= (0.2, 0.1, 0.5), linewidth=3)

## 点的边界线, 点的背景色
ax = plt.subplot(111)
ax.plot(x, y, marker="d", markersize=20, markeredgecolor="red", markeredgewidth=2, markerfacecolor="green")

一、连用
#① 颜色、点型、线型,可以把几种参数写在一个字符串内进行设置 'r-.o'
# 多个都进行设置时,多参数连用 plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)
plt.plot(x, y,'r-.o', x, 2*y, 'b--s')

#② 面向对象式操作
lines = plt.plot(x, y,  x, 2*y)
plt.legend(["normal","fast"])
#对两个对象分别设置
lines[0].set_color("red")
lines[0].set_dashes([5,1])
lines[0].set_linewidth(3)
lines[1].set_marker("D")
lines[1].set_markersize(16)
lines[1].set_markeredgecolor("black")
lines[1].set_markeredgewidth(2)
lines[1].set_markerfacecolor("green")
lines[1].set_linestyle("--")
lines[1].set_color("black")

# ③ 多个曲线同一设置
plt.plot(x1, y1, x2, y2, fmt, ...)
plt.plot(x, y, x, 2*y, color="red", ls="--", marker="s")
# 自定义虚线, dashes必须传入一个偶数个数的列表
plt.plot(x, y, dashes=[3,9,1,5], color="black",lw=3)

8、保存图片

  • 格式
 savefig(fname, dpi=None, facecolor='w', edgecolor='w',
          orientation='portrait', papertype=None, format=None,
          transparent=False, bbox_inches=None, pad_inches=0.1,
          frameon=None)
    
 # 参数
filename
含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……)
dpi
图像分辨率(每英寸点数),默认为100
facecolor
图像的背景色,默认为“w”(白色)
    
    
  • 示例代码
# figure函数中的facecolor是用于展示的背景色
figure = plt.figure(figsize=(12,5), facecolor="greenyellow")
ax = figure.add_subplot(111)
ax.plot(x, y, color="red",lw=3, marker="s")
ax.set_title("This is a line2D")

# savefig函数中的facecolor是用于存储图片的背景色
# dpi表示像素
figure.savefig("data.jpg",dpi=50, facecolor="lightgray")

9、x、y轴坐标刻度

  • 格式
 plt.xticks(*args, **kwargs)
plt.xticks()和plt.yticks()方法
需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
支持fontsize、rotation、color等参数设置 
  • 代码示例
#plt
plt.plot(x, y)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],["-tom","-$\pi$/2","0","Π/2","lucy"])
plt.yticks([-1,0,1], ["min","0","max"])

#ax
x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)
ax.set_xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
ax.set_xticklabels(["-tom","-$\pi$/2","0","Π/2","lucy"])
ax.set_yticks([-1,0,1])
ax.set_yticklabels(["min","0","max"]

10、字体设置

全局设置
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

# 测试
plt.title("-中文字体")
加载自定义字体,设置局部
from matplotlib import font_manager
myfont = font_manager.FontProperties(fname='辣鸡心心体.ttf')
# myfont = font_manager.FontProperties(fname='彭为栋九成宫醴泉铭.ttf')

# 测试
plt.title("-中文测试字体", fontproperties=myfont, fontsize=15)

11、图形内的文字、注释、箭头

控制文字属性的方法:

pyplot函数API方法描述
text()mpl.axes.Axes.text()在Axes对象的任意位置添加文字
xlabel()mpl.axes.Axes.set_xlabel()为X轴添加标签
ylabel()mpl.axes.Axes.set_ylabel()为Y轴添加标签
title()mpl.axes.Axes.set_title()为Axes对象添加标题
legend()mpl.axes.Axes.legend()为Axes对象添加图例
figtext()mpl.figure.Figure.text()在Figure对象的任意位置添加文字
suptitle()mpl.figure.Figure.suptitle()为Figure对象添加中心化的标题
annnotate()mpl.axes.Axes.annotate()为Axes对象添加注释(箭头可选)

所有的方法会返回一个matplotlib.text.Text对象

  • 图形内的文字

#plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)
x = np.linspace(0,np.pi*2, 100)
y = np.sin(x)
plt.plot(x, y)
plt.text(x=1.57,y=0.8, s="最大值",fontdict={
    "color":"red",
    "fontsize":20
})

  • 画板的中心标题
#figure.suptitle(t, **kwargs)
# 添加画板文字
figure = plt.figure(figsize=(12,4))
ax1 = figure.add_subplot(1,2,1)
ax1.plot(x, np.sin(x), color="green")
ax1.set_yticks([-1,0,1])
ax1.grid(axis="y")

ax2 = figure.add_subplot(1,2,2)
ax2.plot(x, np.cos(x), color="green")
ax2.grid(axis="x")

# x, y不在使用具体的刻度,因为画板没有刻度,所以使用的是相对位置
figure.text(x=0.5,y=0,s="这是正弦和余弦曲线图",fontdict={
    "color":"green"
})

# 添加画板的中心标题
figure.suptitle(t="画板标题",fontsize=30, color="red")
  • 注释
ax.annotate(*args, **kwargs)
xy参数设置箭头指示的位置
xytext参数设置注释文字的位置
arrowprops参数以字典的形式设置箭头的样式
width参数设置箭头长方形部分的宽度
headlength参数设置箭头尖端的长度,
headwidth参数设置箭头尖端底部的宽度
shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值),可以理解为控制箭头的长度

如下都是arrowstyle可以选择的风格样式

``'->'``       head_length=0.4,head_width=0.2
``'-['``       widthB=1.0,lengthB=0.2,angleB=None
``'|-|'``      widthA=1.0,widthB=1.0
``'-|>'``      head_length=0.4,head_width=0.2
``'<-'``       head_length=0.4,head_width=0.2
``'<->'``      head_length=0.4,head_width=0.2
``'<|-'``      head_length=0.4,head_width=0.2
``'<|-|>'``    head_length=0.4,head_width=0.2
``'fancy'``    head_length=0.4,head_width=0.4,tail_width=0.4
``'simple'``   head_length=0.5,head_width=0.5,tail_width=0.2
``'wedge'``    tail_width=0.3,shrink_factor=0.5
ax = plt.subplot(111)

ax.plot(x, np.sin(x))
# 添加注释信息
# ax.annotate(s, xy, xytext, arrowprops)
# 直接使用预定义好的箭头样式
ax.annotate(s="最大值", xy=[1.57,1], xytext=[3,0.6], arrowprops={
    "arrowstyle":"fancy"
})
# 自定义箭头样式
ax.annotate(s="最小值", xy=[np.pi*3/2, -1], xytext=[2.5, -0.25], arrowprops={
    "width":2,
    "headlength":5,
    "headwidth":4,
    "shrink":0.1
})

二、2D图像的绘制

1、直方图

【直方图的参数只有一个x!!!不像条形图需要传入x,y】

plt.hist(x, bins=None, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, data=None, **kwargs)

#hist()的参数
- bins
  可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10
- normed
  如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False
- color
  指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色
- orientation
  通过设置orientation为horizontal创建水平直方图。默认值为vertical


  • 示例代码
# 柱高 在特定范围内数据出现的次数
# 柱宽 表示数据的范围
# bins  0-100  bins=10
# normed=True 设置出现数据的概率
data = np.random.randn(1000)
plt.hist(x=data, bins=10, normed=True)
seaborn.kdeplot(data)
  • 拓展(seaborn)
df = DataFrame(data={
    "X_label":np.arange(10),
    "Y_label":np.arange(10)
})
seaborn.barplot(x="X_label", y="Y_label",data=df)

2、条形图

【条形图有两个参数x,y】

  • width 纵向设置条形宽度
  • height 横向设置条形高度
 #纵向条形图bar()、
    plt.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
 
 # 横向条形图 barh()
     plt.barh(bottom, width, height=0.8, left=None, hold=None, **kwargs)
  • 示例代码
index = np.arange(5)
height = [10,27,19,22,18]
plt.bar(left=index, height=height, align="edge",width=0.7)
plt.xticks(index,["tom","lucy","mery","rose","jack"])

#
plt.barh(index, width=height, align="edge",height=0.7)

3、玫瑰图/极坐标条形图

创建极坐标,设置polar属性

  • plt.axes(polar = True)

绘制极坐标条形图

  • index = np.arange(-np.pi,np.pi,2*np.pi/6)
  • plt.bar(x=index ,height = [1,2,3,4,5,6] ,width = 2*np.pi/6)
# 1. 开启极坐标坐标系
plt.axes(polar=True)

# 【注意】刻度和数据的个数要匹配
data = np.arange(1,9,step=1)

# 2. 极坐标的刻度是用弧度表示的,不是角度
x = np.linspace(0,2*np.pi,8, endpoint=False)

# 弧度*360/2*np.pi == 角度
# 不要使用角度做索引,因为极坐标图像,是以弧度作为索引的
# x*180/np.pi
plt.bar(x, data, color=np.random.random(size=(8,3)), align="edge")

4、饼图

【饼图也只有一个参数x!】

饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, hold=None, data=None)
#参数
labels参数设置每一块的标签;
labeldistance参数设置标签距离圆心的距离(比例值,只能设置一个浮点小数)
autopct参数设置比例值的显示格式(%1.1f%%);
pctdistance参数设置比例值文字距离圆心的距离
explode参数设置每一块顶点距圆形的长度(比例值,列表);
colors参数设置每一块的颜色(列表);
shadow参数为布尔值,设置是否绘制阴影
startangle参数设置饼图起始角度
  • 示例代码

    plt.figure(figsize=(8,8))
    _= plt.pie([38,5,10], labels=["GOOD","Normal","VERY GOOD"], 
               labeldistance=0.8, autopct="%1.1f%%",pctdistance=0.9,
               explode=[0.1,0,0],colors=np.random.random(size=(3,3)),shadow=True,startangle=180)
    

5、散点图

【散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!】

 plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
 # 参数
 s 表示点的大小
 c 表示点的颜色
 marker 表示点的形状
  • 示例代码
x = np.random.randn(1000)
y = np.random.randn(1000)

plt.figure(figsize=(8,4))
# s 表示点的大小
# c 表示点的颜色
# marker 表示点的形状
plt.scatter(x,y, s=np.random.randint(30,150,size=1000),c=np.random.random(size=(1000,3)),alpha=0.6, marker="o")

三、3D图

导包

from mpl_toolkits.mplot3d.axes3d import Axes3D
使用mershgrid函数切割x,y轴

X,Y = np.meshgrid(x, y)
创建3d坐标系

axes = plt.subplot(projection='3d')
绘制3d图形

p = axes.plot_surface(X,Y,Z,color='red',cmap='summer',rstride=5,cstride=5)
添加colorbar

plt.colorbar(p,shrink=0.5)
  • 示例代码
from mpl_toolkits.mplot3d.axes3d import Axes3D
# 获取三维画布
plt.figure(figsize=(8,6))
axes = plt.subplot(projection="3d")

x = np.linspace(-np.pi, np.pi, 100)
y = np.linspace(-np.pi, np.pi, 100)

# 把x,y由一维拓展到二维,用于计算Z值,得到一个二维平面
X, Y = np.meshgrid(x, y)

# 胡乱写了一个函数关系,用来表达Z平面和X,Y的关系
Z = np.sin(X) * np.cos(Y)

# z轴必须是一个二维数组,才能绘制出三维图形
# axes.plot(x,y)
# rstride=2,cstride=2 设置网格线密度
# cmap 色调的映射
axes.plot_surface(X,Y,Z,cmap="winter",rstride=2,cstride=2)

00),c=np.random.random(size=(1000,3)),alpha=0.6, marker=“o”)




## 三、3D图

```python
导包

from mpl_toolkits.mplot3d.axes3d import Axes3D
使用mershgrid函数切割x,y轴

X,Y = np.meshgrid(x, y)
创建3d坐标系

axes = plt.subplot(projection='3d')
绘制3d图形

p = axes.plot_surface(X,Y,Z,color='red',cmap='summer',rstride=5,cstride=5)
添加colorbar

plt.colorbar(p,shrink=0.5)
  • 示例代码
from mpl_toolkits.mplot3d.axes3d import Axes3D
# 获取三维画布
plt.figure(figsize=(8,6))
axes = plt.subplot(projection="3d")

x = np.linspace(-np.pi, np.pi, 100)
y = np.linspace(-np.pi, np.pi, 100)

# 把x,y由一维拓展到二维,用于计算Z值,得到一个二维平面
X, Y = np.meshgrid(x, y)

# 胡乱写了一个函数关系,用来表达Z平面和X,Y的关系
Z = np.sin(X) * np.cos(Y)

# z轴必须是一个二维数组,才能绘制出三维图形
# axes.plot(x,y)
# rstride=2,cstride=2 设置网格线密度
# cmap 色调的映射
axes.plot_surface(X,Y,Z,cmap="winter",rstride=2,cstride=2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值