一、Matplotlib基础知识

pd.scatter_matrix(DataFrame)

Matplotlib中的基本图表包括的元素

  • x轴和y轴
    水平和垂直的轴线
  • x轴和y轴刻度
    刻度标示坐标轴的分隔,包括最小刻度和最大刻度
  • x轴和y轴刻度标签
    表示特定坐标轴的值
  • 绘图区域
    实际绘图的区域
import numpy as np

import matplotlib.pyplot as plt
%matplotlib inline

只含单一曲线的图

# pandas 绘制图形,调用plot
# plt 导包,绘制图形,调用plot方法,就可以绘制
# 正弦波
x = np.linspace(0,2*np.pi,100)

y = np.sin(x)
display(x,y)
# l = plt.plot(x,y)
# l[0]

# 列表中数据只有一个,取出来,声明一下,后面+,取出对象
line, = plt.plot(x,y)
line
26.png

包含多个曲线的图

1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线

plt.plot(x,y)

plt.plot(x,np.cos(x))
16.png

2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线

line1,line2 = plt.plot(x,y,x,np.cos(x))

display(line1,line2)
05.png
# 高级语言中方法中参数,[该参数可有可无]
plt.plot(x,y)
8.png
plt.plot(y)
81.png

网格线

绘制正选余弦

plt.plot(x,y)
plt.grid(True)
weww.png

使用plt.grid(True)方法为图添加网格线
设置grid参数(参数与plot函数相同),使用plt面向对象的方法,创建多个子图显示不同网格线
[图片上传失败...(image-abd188-1558368389415)]

  • lw代表linewidth,线的粗细
  • alpha表示线的明暗程度
  • color代表颜色
plt.figure(figsize=(12,3))

# 第一个子视图
axes = plt.subplot(1,3,1)
axes.plot(x,y)
axes.grid(True)

# 第二个子视图
axes = plt.subplot(1,3,2)
axes.plot(x,y)
axes.grid(True,color = 'red')


# 第三个子视图
axes = plt.subplot(1,3,3)
axes.plot(x,y)
axes.grid(True,color = 'purple',linestyle = '--',alpha = 0.3)
1256.png

坐标轴界限

axis方法

如果axis方法没有任何参数,则返回当前坐标轴的上下限axis(xmin =,ymax = )

plt.plot(x,y)
plt.axis([-5,10,-2,2])
06.png
plt.axis('xxx') 'tight'、'off'、'equal'……

设置坐标轴类型
关闭坐标轴

f = lambda x:(1 - x**2)**0.5

X = np.linspace(-1,1,100)

plt.plot(X,f(X),X,-f(X))

# 相等,横纵坐标刻度相等
plt.axis('equal')
23.png
X = np.linspace(0,2*np.pi,100)
s = np.sin(X)
c = np.cos(X)
plt.plot(s,c)
_ = plt.axis('equal')
1345.png
plt.imshow(cat)
# off关闭,刻度
plt.axis('off')
qwe20.png

xlim方法和ylim方法

除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围

65406.png

坐标轴标签

xlabel方法和ylabel方法  
plt.ylabel('y = x^2 + 5',rotation = 60)旋转
21e56.png

标题

title方法

plt.plot(x,y)

plt.xlabel('X',color = 'red',fontsize = 20)

plt.ylabel('f(x) = sin(X)',rotation = -60,fontsize = 20)

# 中文没有正常展示,字体类型,默认类型,电脑,缺失字体
plt.title('正弦波',fontproperties = 'SimHei',fontsize = 25)
2352.png

图例

legend方法

两种传参方法:

  • 【推荐使用】在plot函数中增加label参数
  • 在legend方法中传入字符串列表
plt.plot(x,y,x,np.cos(x))

# 图例标注一线那条线是哪条
plt.legend(['sin','cos'])
6624.png
plt.plot(x,y,label = 'sin')

plt.plot(x,np.cos(x),label = 'cos')

# 图例显示,必须调用legend
plt.legend()
157.png
label参数为'_xxx',则图例中不显示  
plt.plot(x, x*1.5, label = '_xxx')
1253.png
plt.plot(x,y,label = 'sin')

plt.plot(x,np.cos(x),label = 'cos')

# 图例显示,必须调用legend
plt.legend(loc = 8)
2328.png

loc参数可以是2元素的元组,表示图例左下角的坐标

plt.plot(x,y,label = 'sin')

plt.plot(x,np.cos(x),label = 'cos')

# 图例显示,必须调用legend
# loc元组(数值,单位图片一个宽度和一个高度)
plt.legend(loc = (0.5,1.1))
7.png

图例也可以超过图的界限loc = (-0.1,0.9)

ncol参数

ncol控制图例中有几列

plt.plot(x,y,label = 'sin')

plt.plot(x,np.cos(x),label = 'cos')

# 图例显示,必须调用legend
plt.legend(ncol = 2,loc = (0,1))
24.png

55.png
x1 = x[::5]
y1 = y[::5]
''' linestyle or ls: ['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq)
| ``'-'`` | ``'--'`` | ``'-.'`` | ``':'`` | ``'None'`` | ``' '`` | ``''``]'''
plt.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)
45.png

10.png
plt.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)

# density pixel(像素):像素密度
plt.savefig('./img.pdf',dpi = 500,facecolor = 'red')
56.png
plt.figure(facecolor='red')
plt.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)
34.png
# 一个子视图
# 想要背景红色,需要subplot这个方法进行设置
axes = plt.subplot(111,facecolor = 'red')
axes.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)
# show显示,调用不调用都能展示,调用,创建一个新的绘图对象
plt.savefig('img4.png')
plt.show()
07.png

二、设置plot的风格和样式

plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
plt.plot(X, Y, 'format', ...)

40.png
0xff

255

# 红绿蓝
plt.plot(x,y,c = '#88eeaa')
31.png
plt.plot(x,y,c = np.random.rand(3))
03.png
透明度

alpha参数


41.png

19.png
plt.plot(x,y,ls = 'steps')
56.png
线宽

linewidth或lw参数


w33.png
不同宽度的破折线

dashes参数
设置破折号序列各段的宽度

218.png

39.png
plt.plot(x[::5],y[::5],marker = '4',markersize = 15)
34.png

41.png
plt.plot(x[::5],y[::5],marker = 'h',markersize = 15)
16.png

36.png
plt.plot(x[::5],y[::5],marker = '+',markersize = 15)
15.png
36.png
plt.plot(x[::5],y[::5],marker = 'D',markersize = 15)
23.png
239.png

59.png
plt.plot(x[::5],y[::5],marker = '_',markersize = 15)
2333.png
57.png
plt.plot(x[::5],y[::5],marker = '>',markersize = 15)
32.png

多参数连用

颜色、点型、线型

plt.plot(x1,y1,color = 'red',ls = '--',marker = '*')
4.11.png
# 多参数连用
plt.plot(x1,y1,'g-.*')
48.png

23.22.png
plt.plot(x1,y1,color  = 'red',alpha = 0.8,
         ls = '--',marker = '*',markersize=15,
         markerfacecolor = 'green',markeredgecolor = 'purple',
         markeredgewidth = 2)
23.png

在一条语句中为多个曲线进行设置

多个曲线同一设置

属性名声明
plt.plot(x1, y1, x2, y2, fmt, ...)

plt.plot(x,y,x,np.cos(x),color = 'green',ls = 'steps',alpha = 0.8)
210.png
多个曲线不同设置

多个都进行设置时,无需声明属性
plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)

plt.plot(x,y,'r--*',x,np.cos(x),'g-.o')
200.png
使用setp()方法
# 模块plt的方法
line, = plt.plot(x[::5],y[::5])

plt.setp(line,color = 'purple',marker = 'd')

X、Y轴坐标刻度

xticks()和yticks()方法

plt.plot(x,y)

_ = plt.yticks([-1,0,1],['min',0,'max'])

# np.arange(7) :[0,1,2,3,4,5,6]
_ = plt.xticks(np.arange(7),list('abcdefg'),fontsize = 25,color = 'r',rotation = -60)
22.png

面向对象方法

set_xticks、set_yticks、set_xticklabels、set_yticklabels方法


正弦余弦

LaTex语法,用\pi等表达式在图表上写上希腊字母

plt.plot(x,y)

# matplotlib中拉丁字母显示$\pi$
_ = plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],['$\gamma$','$\pi$/2','$\pi$','3$\pi$/2','2$\pi$'],fontsize = 30)
55.png

直方图

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

  • bins
    可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10
  • normed
    如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False
  • color
    指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色
  • orientation
    通过设置orientation为horizontal创建水平直方图。默认值为vertical
wind = np.load('./Ravenna_wind.npy')
wind
24.png
plt.hist(wind,bins = 8,rwidth = 0.5,range=[0,360])
54.png

条形图

【条形图有两个参数x,y!】
bar()、barh()

# x = np.arange(10)
x = np.arange(0,100,10)
y = np.random.randint(0,100,size = 10)
plt.bar(x,y,width = 5)
253.png

水平条形图

barh()

plt.barh(x,y,height = 5)
56.png

饼图

【饼图也只有一个参数x!】
pie()
饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小

普通各部分占满饼图

plt.pie([0.3,0.4,0.2,0.1])

plt.axis('equal')
23.png

饼图阴影、分裂等属性设置
labels参数设置每一块的标签;labeldistance参数设置标签距离圆心的距离(比例值)
autopct参数设置比例值的显示格式(%1.1f%%);pctdistance参数设置比例值文字距离圆心的距离
explode参数设置每一块顶点距圆形的长度(比例值);colors参数设置每一块的颜色;
shadow参数为布尔值,设置是否绘制阴影

x = np.array([0.2,0.3,0.15,0.15,0.1,0.1])

labels = np.array(['A','B','C','D','E','F'])
plt.figure(figsize=(5,5))
_ = plt.pie(x,labels = labels,autopct='%0.1f%%',
            pctdistance=0.5,explode = [0,0.1,0,0.2,0,0],shadow =True )

plt.savefig('./pie.png')
22.png
startangle设置旋转角度

散点图

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

x = np.random.randint(0,100,size = 100)
y = np.random.randint(0,100,size = 100)
# scatter调整大小参数s不是size
# scatter就是显示两列数据之间的关系
plt.scatter(x,y,s = np.random.randint(10,60,size = 100),c = np.random.rand(100,3))
02.png

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

234.png

图形内的文字

text()
使用figtext()

注释

annotate()
xy参数设置箭头指示的位置,xytext参数设置注释文字的位置
arrowprops参数以字典的形式设置箭头的样式
width参数设置箭头长方形部分的宽度,headlength参数设置箭头尖端的长度,
headwidth参数设置箭头尖端底部的宽度,
facecolor设置箭头颜色
shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值)

箭头

plt.figure(figsize=(12,9))
plt.axis([0, 10, 0, 20]);
arrstyles = ['-', '->', '-[', '<-', '<->', 'fancy', 'simple', 'wedge']
for i, style in enumerate(arrstyles):
    plt.annotate(style, xytext=(1, 2+2*i), xy=(4, 1+2*i), arrowprops=dict(arrowstyle=style));

connstyles=["arc", "arc,angleA=10,armA=30,rad=30", "arc3,rad=.2", "arc3,rad=-.2", "angle", "angle3"]
for i, style in enumerate(connstyles):
    plt.annotate(style, xytext=(6, 2+2*i), xy=(8, 1+2*i), arrowprops=dict(arrowstyle='->', connectionstyle=style));
plt.show()
35.png

创建极坐标条形图

count,range_ = np.histogram(wind,bins = 8,range=[0,360])
display(count,range_)
plt.bar(x = range_[:-1],height = count,width = 22.5)
243.png

# 角度值,表示横坐标0 ~ 360
# 0 ~ 2*np
# 一行代码,就极坐标出来
# 玫瑰图
plt.axes(polar = True)

# 条形图
x = np.arange(0,2*np.pi,np.pi/4)
plt.bar(x = x,height = count,width = np.pi/4,color = np.random.rand(8,3))
1205.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容