python里的matplotlib画图总结

python里面的matplotlib

  • 一.图表常用设置参数介绍
    • 1.线条颜色设置
    • 2.线条样式与标记样式
    • 3.图表标题设置
    • 4.坐标标题、轴刻度与范围设置
    • 5.添加文本标签
    • 6.添加图例与注释
    • 7.设置图标与画布边缘间距
    • 8.设置网格线
    • 9.画布设置
  • 二.基本绘图使用方法
    • 1.折线图
    • 2.柱状图
    • 3.直方图
    • 4.散点图
    • 5.饼形图
    • 6.环形图
  • 三.绘制子图方式
    • 1. subplot()
    • 2.add_subplot()

一.图表常用设置参数介绍

1.线条颜色设置

设置值 说明
b 蓝色
g 绿色
r 红色
c 蓝绿色
m 洋红色
y 黄色
k 黑色
w 白色
#ffffff 白色(RGB表示方式也可以)
import matplotlib.pyplot as plt
import numpy as np
x1=np.random.randint(1,10,size=(5,))#随机生成范围为1到10(不包含10)的整数,大小为5
y=np.arange(5)#生成一组0到4的数组
print(x1)
print(y)
plt.plot(x1,y,color='#ff8000')#颜色为橙色,
plt.show()#显示画布图像

很多时候我们需要在一张画布画多条的时候,每条线它会自动为我们更改颜色,其他图行一样
python里的matplotlib画图总结_第1张图片

2.线条样式与标记样式

线条样式linestyle

linestyle设置值 说明
‘_’ 实线
‘- -’ 双划线
‘-.’ 点划线
‘:’ 虚线

线条标记样式marker

marker设置值 说明
. 点标记
o 实心圆标记
v 下三角标记
^ 上三角标记
* 星形标记
p 实心五角形标记
s 实心正方形标记

使用实列:

import matplotlib.pyplot as plt
import numpy as np
x1=np.random.randint(1,10,size=(5,))#随机生成范围为1到10的整数,大
x2=np.random.randint(1,10,size=(5,))
y=np.arange(5)
# print(x)
print(y)
# plt.plot(x0,y)
plt.plot(x1,y,linestyle='--',marker="o")
plt.plot(x2,y,linestyle=':',marker="*")
plt.show()

运行结果:
python里的matplotlib画图总结_第2张图片

3.图表标题设置

plt.title(“”)

import pandas as pd
import matplotlib.pyplot as plt
x=[1,2,3,2,5]
y=['a','b','c','d','你']
plt.plot(x,y)
plt.title("加油哦")
plt.show()

运行结果中文都没有显示出来,如果含有中文汉字,我们需要加上这段代码解决乱码问题:plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
plt.rcParams[‘axes.unicode_minus’] = False

运行结果如图:python里的matplotlib画图总结_第3张图片

4.坐标标题、轴刻度与范围设置

添加坐标轴标题:plt.xlable(“”)或者plt.ylable(“”)
添加轴刻度: plt.xticks()与plt.yticks()
轴刻度范围: plt.xlim()与plt.ylim()
操作代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.xticks(range(1,5),['1月','2月','3月','4月'])
plt.ylim(0,7)
plt.plot(x,y)
plt.title("加油哦")
plt.show()

python里的matplotlib画图总结_第4张图片

5.添加文本标签

添加文本标签: plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)

x,y:位置(position)
s:该position需要展示的值
fontdict:字体
withdash:宽度

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# x=[1,2,3,2,5]
# y=['a','b','c','d','你']
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.xticks(range(1,5),['1月','2月','3月','4月'])
plt.ylim(0,7)
for i in range(len(x)):
    plt.text(x[i],y[i],s=y[i])
plt.plot(x,y)
plt.title("加油哦")
plt.show()

python里的matplotlib画图总结_第5张图片

6.添加图例与注释

添加图例: plt.legend()
第一步:给plt.plot( )中参数label=''传入字符串类型的值,也就是图例的名称
第二步:使用plt.legend( )使上述代码产生效果

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
# plt.xticks(range(1,5),['1月','2月','3月','4月'])
plt.bar(x,y,width=0.25,label='A')
plt.bar(x+0.3,y,width=0.25,label='B')
plt.legend()
plt.title("加油哦")
plt.show()

python里的matplotlib画图总结_第6张图片

添加注释: plt.annotate()参数

s 为注释文本内容
xy 为被注释的坐标点
xytext 为注释文字的坐标位置
xycoords and textcoords 是坐标xy与xytext的说明
weight 设置字体线型
color 设置字体颜色
arrowprops #箭头参数,参数类型为字典dict
bbox给标题增加外框

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.bar(x,y,width=0.25,label='A')
plt.legend()
plt.title("加油哦")
for i in range(len(x)):
    plt.annotate(x[i],xy=(x[i],y[i]))
plt.show()

这里不多说,感觉跟plt.text()差不多,就是比它功能更多一点。

7.设置图标与画布边缘间距

plt.subplots_adjust(left,right,top,bottom)
这里需要注意的是,left不可以大于等于right,bottom与top也一样.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(num="画布",facecolor="yellow")
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.bar(x,y,width=0.25,label='A')
plt.legend()
plt.subplots_adjust(left=0.1,right=0.9,bottom=0.09,top=0.9)
plt.show()

python里的matplotlib画图总结_第7张图片

8.设置网格线

**plt.grid(b, which, axis, color, linestyle, linewidth, kwargs)

b : 布尔值。就是是否显示网格线的意思。官网说如果b设置为None, 且kwargs长度为0,则切换网格状态。但是没弄明白什 么意思。如果b设置为None,但是又给了其它参数,则默认None值失效。
which : 取值为’major’, ‘minor’, ‘both’。 默认为’major’。看别人说是显示的,我的是Windows7下,用Sublime跑的,minor只是一个白画板,没有网格,major和both也没看出什么效果,不知道为什么。
axis : 取值为‘both’, ‘x’,‘y’。就是以什么轴为刻度生成网格。例如我输入参数x就会在x轴方向上生成纵向的网格刻度。没有输入的方向则不会显示网格刻度。这里多谢 @湖尘 指正。
color : 这就不用多说了,就是设置网格线的颜色。或者直接用c来代替color也可以。
linestyle :也可以用ls来代替linestyle, 设置网格线的风格,是连续实线,虚线或者其它不同的线条。 | ‘-’ | ‘–’ | ‘-.’ | ‘:’ | ‘None’ | ’ ’ | ‘’]
linewidth : 设置网格线的宽度

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(num="画布",facecolor="yellow")
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.bar(x,y,width=0.25,label='A')
plt.legend()
plt.title("加油哦")
plt.grid()
plt.show()

python里的matplotlib画图总结_第8张图片

9.画布设置

语法使用:
plt.figure()

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

  • num:图像编号或名称,数字为编号 ,字符串为名称
  • figsize:指定figure的宽和高,单位为英寸; dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
  • facecolor:背景颜色 edgecolor:边框颜色
  • frameon:是否显示边框

如果frameon设置为False,那么背景颜色为默认的白色
代码操作:

import pandas as pd
import matplotlib.pyplot as plt
plt.figure(num="nnihao",facecolor='red',frameon=True)
plt.show()

python里的matplotlib画图总结_第9张图片

二.基本绘图使用方法

1.折线图

# 折线图:女体重大致情况
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
f_weight=list(data[data['性别']=='女'].loc[1::,'体重(kg)'])
x=np.arange(len(f_weight))
plt.ylabel("体重(kg)")
plt.plot(x,f_weight)
plt.grid(axis='y')
plt.show()

python里的matplotlib画图总结_第10张图片

2.柱状图

垂直方向的条形图
plt.bar(),这个就不展示了,可以自己尝试
水平方向的条形图
plt.barh()

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data1=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
# 柱形图:来自个省份的人数分布
provice_group=data1.groupby('省份')
p_count=provice_group['姓名'].count().values
provice=provice_group['姓名'].count().index
plt.barh(provice,p_count)
plt.title("运动员个省份人数分布情况")
plt.show()

python里的matplotlib画图总结_第11张图片

3.直方图

# 直方图:运动员身高分布情况
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
bin=[155,160,165,170,175,180,185,190,195,200,205,210]
y=data.loc[1:,'身高(cm)'].values
plt.hist(y,bin)
plt.show()

python里的matplotlib画图总结_第12张图片

4.散点图

# 散点图:运动员年龄与身高分布情况

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
x=data['身高(cm)']
y=data['年龄(岁)']
plt.scatter(x,y)
plt.show()

python里的matplotlib画图总结_第13张图片

5.饼形图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
data['年龄分段']=' '
# for i in range()
a=data['年龄(岁)'].between(20,24)
b=data['年龄(岁)'].between(24,30)
c=data['年龄(岁)'].between(30,35)
data['年龄分段'][a]="20~24"
data['年龄分段'][b]="24~30"
data['年龄分段'][c]="30~35"
new_data=data.groupby('年龄分段')
x=new_data['姓名'].count().values
y=new_data['姓名'].count().index
plt.pie(x,labels=y,autopct='%1.1f%%')
#plt.pie(x,labels=y,autopct='%1.1f%%',explode=(0.1,0,0.1,0),shadow=True)
plt.legend(y)
plt.show()

python里的matplotlib画图总结_第14张图片
python里的matplotlib画图总结_第15张图片

6.环形图

plt.pie(x,labels=y,autopct='%1.1f%%',explode=(0.1,0,0.1,0),shadow=True,wedgeprops={'width':0.4,'edgecolor':'r'})

python里的matplotlib画图总结_第16张图片

三.绘制子图方式

1. subplot()

subplot(numRows, numCols, plotNum)

  • 图表的整个绘图区域被分成 numRows 行和 numCols 列
  • 然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1
  • plotNum 参数指定创建的 Axes 对象所在的区域
  • 如果 numRows = 2, numCols = 3, 那整个绘制图表样式为 2X1的图片区域, 用坐标表示为(1,1)、(1,2)
import matplotlib.pyplot as plt
import numpy as np
n1=np.arange(0,6,0.05)
n2=np.arange(0,6,0.1)
print(n1)
# 建立画布
plt.figure()
plt.subplot(1,2,1)
plt.plot(n1,np.cos(2*np.pi*n1))
plt.subplot(1,2,2)
plt.plot(n2 ,np.cos(2*np.pi*n2))
plt.show()

2.add_subplot()

两者差不多

你可能感兴趣的:(python,matplotlib,numpy)