辞梦

导航

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')

颜色字符:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。

线型参数:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。

标记字符:'.' 点标记,',' 像素标记(极小点),'o' 实心圈标记,'v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记...等等。

绘图标记(marker)

 

 

marker的标记的图案

Matplotlib 绘图标记 | 菜鸟教程 (runoob.com)

fmt参数

# fmt = '[marker][line][color]'
​
ypoints = np.array([6,2,13,10])
# o 表示实心圆标记,: 表示虚线,r 表示颜色为红色
plt.plot(ypoints,'o:r')
plt.show()

线的类型、颜色类型:

Matplotlib 绘图标记 | 菜鸟教程 (runoob.com)

标记大小与颜色

我们可以自定义标记的大小与颜色,使用的参数分别是:

  • 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()

 

线的颜色 color(c)

 

线的宽度 linewidth(lw)

值可以是一系列数

多条线

y1=np.array([3,7,5,9])
y2=np.array([6,2,13,10])

plt.plot(y1)
plt.plot(y2)

plt.show()

轴标签和标题 xlabel() ylabel() title()

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()

网格线 grid

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()

 更多的颜色分类

Matplotlib 散点图 | 菜鸟教程 (runoob.com)

 柱状图

 

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()

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2023-05-15 19:53  辞梦  阅读(102)  评论(0)    收藏  举报