Matplotlib 几种图的绘制
Matplotlib
matplotlib pyplot
plot():绘制线图和散点图
scatter():绘制散点图
bar():绘制垂直条形图和水平条形图
hist():直方图
pie():饼图
imshow():图像
subplots():创建子图
import matplotlib.pyplot as plt import numpy as np xpoints = np.array([0,6]) ypoints = np.array([0,100]) plt.plot(xpoints,ypoints) plt.show() # plot(x,y,'n')
颜色字符:
线型参数:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。
标记字符:'.' 点标记,',' 像素标记(极小点),'o' 实心圈标记,'v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记...等等。
绘图标记(marker)


marker的标记的图案
fmt参数
# fmt = '[marker][line][color]' ypoints = np.array([6,2,13,10]) # o 表示实心圆标记,: 表示虚线,r 表示颜色为红色 plt.plot(ypoints,'o:r') plt.show()
线的类型、颜色类型:
标记大小与颜色
我们可以自定义标记的大小与颜色,使用的参数分别是:
-
markersize,简写为 ms:定义标记的大小。
-
markerfacecolor,简写为 mfc:定义标记内部的颜色。
-
markeredgecolor,简写为 mec:定义标记边框的颜色。
ypoints = np.array([6,2,13,10]) # plt.plot(ypoints,marker='o',ms=20) # plt.plot(ypoints,marker='o',ms=20,mec='r') plt.plot(ypoints,marker='o',ms=20,mfc='r') plt.show()
线的类型 linestyle(ls)
一般用linestyle定义,简写ls

import matplotlib.pyplot as plt import numpy as np ypoints = np.array([6,2,13,10]) # plt.plot(ypoints,linestyle='dotted') plt.plot(ypoints,ls='dotted') plt.show()


线的宽度 linewidth(lw)
值可以是一系列数
y1=np.array([3,7,5,9]) y2=np.array([6,2,13,10]) plt.plot(y1) plt.plot(y2) plt.show()

x = np.array([1,2,3,4]) y = np.array([1,4,9,16]) plt.plot(x,y) plt.xlabel("x - label") plt.ylabel("y - label") plt.show()

图形的中文显示
(在自己的matplotlib文件下)
source-han-sans/OTF/SimplifiedChinese at release · adobe-fonts/source-han-sans · GitHub
from matplotlib import pyplot as plt import matplotlib zhfont = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf") x = np.arange(1,11) y = 2*x+5 plt.title("xixi",fontproperties=zhfont) # fontsize 设置字体大小 plt.xlabel("x-label",fontproperties=zhfont) plt.ylabel("y-label",fontproperties=zhfont) plt.plot(x,y) plt.show()

#自定义样式 import numpy as np from matplotlib import pyplot as plt import matplotlib zhfont = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf" ,size=18) font1 = {'color':'blue','size':20} font2 = {'color':'darkred','size':15} x = np.arange(1,11) y = 2*x+5 plt.title("xixi",fontproperties = zhfont,fontdict = font1) plt.xlabel("x-label",fontproperties=zhfont) plt.ylabel("y-label",fontproperties=zhfont) plt.plot(x,y) plt.show()

#标题与标签的定位 import numpy as np from matplotlib import pyplot as plt import matplotlib zhfont = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf" ,size=18) font1 = {'color':'blue','size':20} font2 = {'color':'darkred','size':15} x = np.arange(1,11) y = 2*x+5 plt.title("xiix",fontproperties=zhfont,fontdict=font1,loc="left") #plt.xlabel("x-label",fontproperties=zhfont,loc="left")显示错误?? plt.xlabel("x-label",fontproperties=zhfont) plt.ylabel("y-label",fontproperties=zhfont) plt.plot(x,y) plt.show()


import numpy as np import matplotlib.pyplot as plt x = np.array([1,2,3,4]) y = np.array([1,4,9,16]) plt.title("grid()") plt.xlabel("x-label") plt.ylabel("y-label") plt.plot(x,y) plt.grid() plt.show()

plt.plot(x,y) plt.grid(axis="x") plt.show()

参数说明:
color:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。
linestyle:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。
linewidth:设置线的宽度,可以设置一个数字。
plt.plot(x,y) plt.grid(color='r',ls='--',lw='0.5') plt.show()

绘制多图 subplot() 和 subplots()

import matplotlib.pyplot as plt import numpy as np xpoints = np.array([0,6]) ypoints = np.array([0,100]) #plot 1 plt.subplot(1,2,1) plt.plot(xpoints,ypoints) plt.title("plot 1") #plot 2 x = np.array([1,2,3,4]) y = np.array([1,4,9,16]) plt.subplot(1,2,2) plt.plot(x,y) plt.title("plot 2") plt.suptitle("Test") plt.show(

#plot 1 x = np.array([0,6]) y = np.array([0,100]) plt.subplot(2,2,1) plt.plot(x,y) plt.title("plot 1") #plot 2 x = np.array([1,2,3,4]) y = np.array([1,4,9,16]) plt.subplot(2,2,2) plt.plot(x,y) plt.title("plot 2") #plot 3 x = np.array([1,2,3,4]) y = np.array([3,5,7,9]) plt.subplot(2,2,3) plt.plot(x,y) plt.title("plot 3") #plot 4 x = np.array([1,2,3,4]) y = np.array([4,5,6,7]) plt.subplot(2,2,4) plt.plot(x,y) plt.title("plot 4") plt.suptitle("Test") plt.show()

import matplotlib.pyplot as plt import numpy as np #plot 1 创建一些测试数据 x = np.linspace(0,2*np.pi,400) y = np.sin(x**2) #创建一个画像和子图 fig,ax = plt.subplots() ax.plot(x,y) ax.set_title('Simple plot') #创建两个子图 f,(ax1,ax2) = plt.subplots(1,2,sharey=True) ax1.plot(x,y) ax1.set_title("Sharing Y axis") ax2.scatter(x,y) #创建四个子图 fig,axs = plt.subplots(2,2,subplot_kw=dict(projection="polar")) axs[0,0].plot(x,y) axs[1,1].scatter(x,y) #共享x轴 plt.subplots(2,2,sharex='col') #共享y轴 plt.subplots(2,2,sharey='row') #共享x轴和y轴 plt.subplots(2,2,sharex='all',sharey='all') plt.subplots(2,2,sharex=True,sharey=True) fig,ax = plt.subplots(num=10,clear=True) fig,ax = plt.subplots(num=10,clear=True) plt.show()
散点图

import matplotlib.pyplot as plt import numpy as np x = np.array([1,2,3,4,5,6,7,8]) y = np.array([1,4,9,16,7,11,23,18]) plt.scatter(x,y) plt.show()

设置图标大小
x = np.array([1,2,3,4,5,6,7,8]) y = np.array([1,4,9,16,7,11,23,18]) sizes = np.array([20,50,100,200,500,1000,60,90]) plt.scatter(x,y,s=sizes) plt.show()

设置颜色
x = np.array([1,2,3,4,5,6,7,8]) y = np.array([1,4,9,16,7,11,23,18]) colors = np.array(['red','green','black','orange','purple','beige','cyan','magenta']) plt.scatter(x,y,c=colors) plt.show()

设置两组散点图
import matplotlib.pyplot as plt import numpy as np x = np.array([5,6,8,7,2,17,2,9,4,11,12,9,6]) y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86]) plt.scatter(x,y,color='hotpink') x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12]) y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85]) plt.scatter(x,y,color='#88c999') plt.show()

随机数设置散点图
#随机数生成器的种子 np.random.seed(19680801) N = 50 x = np.random.rand(N) y = np.random.rand(N) colors = np.random.rand(N) area = (30 * np.random.rand(N))**2 plt.scatter(x,y,s = area,c = colors,alpha=0.5) plt.title("Test") plt.show()

颜色条

设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组。
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6]) y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86]) colors = np.array([0,10,20,30,40,45,50,55,60,70,80,90,100]) plt.scatter(x,y,c=colors,cmap='viridis') plt.show()

如果要显示颜色条,需要使用 plt.colorbar() 方法
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6]) y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86]) colors = np.array([0,10,20,30,40,45,50,55,60,70,80,90,100]) plt.scatter(x,y,c=colors,cmap='viridis') plt.colorbar() plt.show()

更多的颜色分类
柱状图

import matplotlib.pyplot as plt import numpy as np x = np.array(['-1','-2','-3','-4']) y = np.array([12,22,6,18]) plt.bar(x,y) plt.show()

垂直方向的柱状图 用barh()
plt.barh(x,y)
plt.show()

设置颜色
plt.bar(x,y,color='#4CAF50') plt.show()

自定义不同的颜色
plt.bar(x, y, color = ['red','pink','green','hotpink']) plt.show()

水平的用width() 垂直的用height()
plt.bar(x,y,width=0.1)
plt.show()

plt.barh(x,y,height=0.1)
plt.show()

饼图


import matplotlib.pyplot as plt import numpy as np y = np.array([35,25,25,15]) plt.pie(y) plt.show()

设置不同的标签和颜色
plt.pie(y,labels = ['A','B','C','D'] #设置饼图标签 ,colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"] ) plt.show()

设置百分比
sizes = [15,30,45,10] labels = ['A','B','C','D'] colors = ['yellowgreen','gold','lightskyblue','lightcoral'] #突出显示第二个扇形 #定义了一个包含 4 个元素的元组 explode,它用来指定是否突出某个扇形 explode = (0,0.1,0,0) plt.pie(sizes,explode = explode,labels=labels,colors=colors, autopct="%1.1f%%",shadow=True,startangle=90) plt.show()


直方图

numpy.random.normal(loc=0,scale=1e-2,size=shape)
参数loc(float):正态分布的均值,对应着这个分布的中心。
参数scale(float):正态分布的标准差
参数size(int 或者整数元组):输出矩阵的shape,默认为None。
# 生成一组随机数据 data = np.random.randn(1000) # 绘制直方图 plt.hist(data, bins=30, color='skyblue', alpha=0.8) # 设置图表属性 plt.title('RUNOOB hist() Test') plt.xlabel('Value') plt.ylabel('Frequency') # 显示图表 plt.show()

data1 = np.random.normal(0,1,1000) data2 = np.random.normal(2,1,1000) data3 = np.random.normal(-2,1,1000) plt.hist(data1,bins = 30,alpha = 0.5,label='data1') plt.hist(data2,bins = 30,alpha = 0.5,label='data2') plt.hist(data3,bins = 30,alpha = 0.5,label='data3') plt.xlabel("Value") plt.ylabel("Frequency") plt.legend() plt.show()

import pandas as pd random_data = np.random.normal(170,10,250) dataframe = pd.DataFrame(random_data) dataframe.hist() plt.xlabel('x') plt.ylabel('y') plt.show()

data = pd.Series(np.random.normal(size = 100)) plt.hist(data,bins = 10) plt.xlabel("X") plt.ylabel("Y") plt.show()

imshow()
imshow() 函数是 Matplotlib 库中的一个函数,用于显示图像。
imshow() 函数常用于绘制二维的灰度图像或彩色图像。
imshow() 函数可用于绘制矩阵、热力图、地图等。

显示灰色图像
import matplotlib.pyplot as plt import numpy as np #生成一个二维随机数组 img = np.random.rand(10,10) #绘制灰度图像 plt.imshow(img,cmap='gray') plt.show()

显示彩色图像
img = np.random.rand(10,10,3)
plt.imshow(img)
plt.show()

显示热力图 colorbar显示颜色条
# 生成一个二维随机数组 data = np.random.rand(10, 10) # 绘制热力图 plt.imshow(data, cmap='hot') # 显示图像 plt.colorbar() plt.show()

显示地图
from PIL import Image
#加载地图图像, 下载地址:https://static.runoob.com/images/demo/map.jpeg img = Image.open('map.jpg') #转为数组 data = np.array(img) #绘制地图 plt.imshow(data) #隐藏坐标轴 plt.axis('off') plt.show()

显示矩阵
#生成一个随机矩阵 data = np.random.rand(10,10) #绘制矩阵 plt.imshow(data) plt.show()

3个4*4个数组
import matplotlib.pyplot as plt import numpy as np n = 4 #创建一个n*n的二维numpy数组 a = np.reshape(np.linspace(0,1,n**2),(n,n)) plt.figure(figsize=(12,4.5)) #第一章图展会上灰度的色彩映射方式,并且没有进行颜色的混合 plt.subplot(131) plt.imshow(a,cmap='gray',interpolation='nearest') plt.xticks(range(n)) plt.yticks(range(n)) #灰度映射,无混合 plt.title("A",y = 1.02,fontsize = 12) #第二张图展示使用viridis颜色映射的图像,同样没有进行颜色的混合 plt.subplot(132) plt.imshow(a,cmap='viridis',interpolation='nearest') plt.yticks([]) plt.xticks(range(n)) #viridis映射,无混合 plt.title("B", y = 1.02, fontsize = 12) #第三张图使用viridis颜色映射的图像,并且使用了双立方插值方法进行颜色混合 plt.subplot(133) plt.imshow(a,cmap='viridis',interpolation='bicubic') plt.yticks([]) plt.xticks(range(n)) #viridis映射,双立方混合 plt.title("C",y = 1.02,fontsize = 12) plt.show()

imsave
将两幅不同的图像保存到硬盘中
import matplotlib.pyplot as plt import numpy as np #创建一幅灰色的图像 img_gray = np.random.random((100,100)) #创建一幅彩色的图像 img_color = np.zeros((100,100,3)) img_color[:,:,0] = np.random.random((100,100)) img_color[:,:,1] = np.random.random((100,100)) img_color[:,:,2] = np.random.random((100,100)) #显示灰色图像 plt.imshow(img_gray,cmap='gray') #保存到硬盘总 plt.imsave("test_gray.png",img_gray,cmap='gray') #显示彩色图像 plt.imshow(img_color) plt.imsave("test_color.jpg",img_color)

imread

显示图像
import matplotlib.pyplot as plt # 读取图像文件,下载地址:https://static.runoob.com/images/demo/map.jpeg img = plt.imread("map.jpg") #显示图像 plt.imshow(img) plt.show()

将图像变暗
import matplotlib.pyplot as plt img_array = plt.imread('tiger.jpg') tiger = img_array/255 #显示图像 plt.figure(figsize = (10,6)) for i in range(1,5): plt.subplot(2,2,i) x = 1 - 0.2 * (i-1) plt.axis('off') plt.title("x = {:.1f}".format(x)) plt.imshow(tiger*x) plt.show()

裁剪图像
plt.figure(figsize = (6,6)) plt.imshow(tiger[:300,100:400,:]) plt.axis('off') plt.show()

红色图像
tiger_red = tiger.copy() #设置reg的绿色和蓝色坐标 tiger_red[:,:,[1,2]] = 0 plt.figure(figsize = (10,10)) plt.imshow(tiger_red) plt.axis('off') plt.show()

浙公网安备 33010602011771号