友情提示:将下文中代码拷贝到JupyterNotebook中直接执行即可,部分代码需要连续执行。
在线安装命令:pip install matplotlib
清华镜像安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib
引入相关包:import matplotlib.pyplot as plt
简单理解,只需要设置X轴和Y轴的数据,就可以画一个最基础的单线条图了,例如我们要绘制坐标 (1, 3) 到 (8, 10) 的线,我们就需要传递两个数组 [1, 8] 和 [3, 10] 给 plot 函数。
import matplotlib.pyplot as plt
import numpy as np
#设置X轴和Y轴数据
xpoints = np.array([1, 8])
ypoints = np.array([3, 10])
#将X轴和Y轴数据放入图中
plt.plot(xpoints, ypoints)
plt.show()
plot([x], y, [fmt], * , data=None, ** kwargs)
参数说明:
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([1, 2, 6, 8])
ypoints = np.array([3, 8, 1, 10])
plt.plot(xpoints, ypoints,'>')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0,4*np.pi,0.1) # start,stop,step
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,x,z)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([1,3,4,5,8,9,6,1,3,4,5,2,4])
plt.plot(ypoints, marker = 'o')
plt.show()
fmt = “[marker] [line] [color]” 定义了基本格式,如标记、线条样式和颜色。
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
# o 代表实心圈 : 代表虚线 r 代表red红色
plt.plot(ypoints, 'o:r')
plt.show()
我们可以自定义标记的大小与颜色,使用的参数分别是:
markersize,简写为 ms:定义标记的大小。
markerfacecolor,简写为 mfc:定义标记内部的颜色。
markeredgecolor,简写为 mec:定义标记边框的颜色。
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, marker = 'o', ms = 20, mfc ='g')
plt.show()
线的类型可以使用 linestyle 参数来定义,简写为 ls。
类型 | 简写 | 说明 |
---|---|---|
'solid' (默认) | '-' | 实线 |
'dotted' | ':' | 点虚线 |
'dashed' | '--' | 破折线 |
'dashdot' | '-.' | 点划线 |
'None' | '' 或 ' ' | 不画线 |
颜色标记 | 描述 | |
---|---|---|
'r' | 红色 | |
'g' | 绿色 | |
'b' | 蓝色 | |
'c' | 青色 | |
'm' | 品红 | |
'y' | 黄色 | |
'k' | 黑色 | |
'w' | 白色 |
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, ls = 'dashdot',color = '#8FBC8F',linewidth = '5.5')
plt.show()
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
import matplotlib.pyplot as plt
import numpy as np
x1 = np.array([0, 1, 2, 3])
y1 = np.array([3, 7, 5, 9])
x2 = np.array([0, 1, 2, 3])
y2 = np.array([6, 2, 13, 10])
plt.plot(x1, y1,'o-.r', x2, y2,'LightGreen',linewidth =3)
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.plot(x, y)
plt.title("title")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.show()
第1种方式,我们下载一款开源字体《思源黑体》,下载地址 https://source.typekit.com/source-han-serif/cn/ ,下载到D盘根目录,然后引用即可,如下例:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
# fname 为你下载的字体库路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="D://SourceHanSans-Bold.otf")
x = np.arange(1,11)
y = 2 * x + 5
plt.title("思源黑体 - 测试标题", fontproperties=zhfont1) # 设置使用该字体
plt.xlabel("x 轴", fontproperties=zhfont1) # 设置使用该字体
plt.ylabel("y 轴", fontproperties=zhfont1) # 设置使用该字体
plt.plot(x,y)
plt.show()
第2种方式,设置全局字体
首先我们通过循环查询 Matplotlib 支持可设置的字体。
from matplotlib import pyplot as plt
import matplotlib
for i in sorted(set([f.name for f in matplotlib.font_manager.fontManager.ttflist])):
print(i)
Windows中我们常用的汉字字体名称为:
黑体 SimHei
微软雅黑 Microsoft YaHei
微软正黑体 Microsoft JhengHei
新宋体 NSimSun
新细明体 PMingLiU
细明体 MingLiU
标楷体 DFKai-SB
仿宋 FangSong
楷体 KaiTi
仿宋_GB2312 FangSong_GB2312
接下来我们通过plt.rcParams[‘font.family’]=[“字体名称”]来设置全局中文字体。
from matplotlib import pyplot as plt
plt.rcParams['font.family']=['SimHei'] #设置全局字体为黑体
如下例,设置font1和font2两种字体样式:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
# 设置两种字体样式
font1 = {'color':'blue','size':20}
font2 = {'color':'darkred','size':15}
x = np.arange(1,11)
y = 2 * x + 5
# fontdict 参数可以使用 css 来设置字体样式
plt.title("CSS样式 - 测试标题", fontdict = font1)
plt.xlabel("x 轴黑体", fontdict = font2)
plt.ylabel("y 轴黑体", fontdict = font2)
plt.plot(x,y)
plt.show()
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
x = np.arange(1,11)
y = 2 * x + 5
plt.title("左对齐 - 测试标题", loc="left")
plt.xlabel("x 轴下", loc="left")
plt.ylabel("y 轴左", loc="bottom")
plt.plot(x,y)
plt.show()
语法:matplotlib.pyplot.grid(b=None, which=‘major’, axis=‘both’,)
参数说明:
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() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
#加入网格线
plt.grid()
plt.show()
以下实例添加一个简单的网格线,并设置网格线的样式,格式如下:
grid(axis=‘x/y’ color = ‘color’, linestyle = ‘linestyle’, linewidth = number)
参数说明:
color:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。
linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。
linewidth:设置线的宽度,可以设置一个数字。
axis:设置 ‘y’ 则垂直于y轴显示,设置 ‘x’ 则垂直于x轴显示。
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() Style Test")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y,'k-',linewidth=2.5)
plt.grid(axis='y' ,color = 'grey', linestyle = '--', linewidth = 2)
plt.show()
我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。
即将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1…N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。
如下例:设置 numRows = 2,numCols = 2,就是将图表绘制成 2x2 的图片区域, 对应的坐标为:
(1, 1), (1, 2)
(2, 1), (2, 2)
plotNum = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。
plotNum = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。
plotNum = 3, 表示的坐标为(2, 1), 即第二行第一列的子图。
plotNum = 4, 表示的坐标为(2, 2), 即第二行第二列的子图。
import matplotlib.pyplot as plt
import numpy as np
#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("subplot Test")
plt.show()
fig,ax = plt.subplots() 是面向对象写法,fig为画布,ax为对象,其等价于:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
import matplotlib.pyplot as plt
import numpy as np
# 创建一些测试数据
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
t = np.linspace(-1,1,200)
# 创建一个画像和子图 -- 图1
fig, ax = plt.subplots(1,1)#fig 画布
ax.plot(x, y)
ax.set_title('Simple plot')
ax.set_ylabel('y - label')
# 创建两个子图 ,设置Y轴共享 -- 图2
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)
ax2.set_title('Sharing Y axis 2')
ax1.set_ylabel('share - y - label')
# 创建四个子图 -- 图3
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
plt.show()
创建4个子图,测试共享X轴,共享Y轴和同时共享X轴Y轴的效果,如下例:
import matplotlib.pyplot as plt
# 共享 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.show()
scatter() 方法语法格式如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, * , edgecolors=None, plotnonfinite=False, data=None, ** kwargs)
参数说明:
指定大小、颜色,如下例:
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])
sizes = np.array([20,50,100,200,500,1000,60,90])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
plt.scatter(x, y, c=colors,s=sizes)
plt.show()
设置两组散点图,如下例:
import matplotlib.pyplot as plt
import numpy as np
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])
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()
如下例,我们通过随机函数生成50样本,坐标、颜色和大小均根据样本随机设置,坐标0-1,颜色0-100,大小0-900,alpha=0.5设置透明度,plt.colorbar()加入颜色渐变条。
import numpy as np
import matplotlib.pyplot as plt
# 随机数生成器的种子
np.random.seed(19680801)
N = 50 #样本数
# 返回一组服从“0~1”均匀分布的随机样本值
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)*100 # 将颜色范围设定在0到100
sizes = (30 * np.random.rand(N))**2 # 将大小泛微设定在0到900
plt.scatter(x, y, s=sizes, c=colors, alpha=0.5) # 设置大小,颜色及透明度
plt.title("Random Scatter Test") # 设置标题
plt.colorbar() # 添加 颜色条或渐变色条
plt.show()
Matplotlib 模块提供了很多可用的颜色条。
颜色条就像一个颜色列表,其中每种颜色都有一个范围从 0 到 100 的值。
设置颜色条需要使用 cmap 参数,默认值为 ‘viridis’,之后颜色值设置为 0 到 100 的数组。
import matplotlib.pyplot as plt
import numpy as np
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.scatter(x, y, c=colors, cmap='afmhot_r')
plt.colorbar()
plt.show()
bar() 方法语法格式如下:
matplotlib.pyplot.bar/barh(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, ** kwargs)
参数说明:
竖状,加入颜色参数color和柱宽度参数width,如下例:
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["season-1", "season-2", "season-3", "season-4"])
y = np.array([12, 22, 6, 18])
plt.bar(x,y,color="#8696a7",width=0.6)
plt.title("Year Bar Test")
plt.show()
横状,加入多颜色和柱高度height参数(在这里是等同于竖状图中的柱宽度参数width),如下例:
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["season-1", "season-2", "season-3", "season-4"])
y = np.array([12, 22, 6, 18])
plt.barh(x,y,color = ["#dadad8","#f8ebd8","#965454","#6b5152"],height = [0.3,0.4,0.5,0.6])
plt.title("Year Barh Test")
plt.show()
pie()方法语法格式如下:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, * , normalize=None, data=None)[source]
参数说明:
设置饼图标签labels,标签距离圆心距离labeldistance,饼图颜色colors,如下例:
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15])
plt.pie(y,
labels=['A','B','C','D'], # 设置饼图标签
labeldistance=0.7, # 标签距离圆心的距离
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
)
plt.title("Pie Test") # 设置标题
plt.show()
设置饼图各个扇形之间的间隔explode(突出显示),扇形百分比显示autopct,如下例:
进阶提示:默认情况下,第一个扇形的绘制是从 X 轴开始并逆时针移动绘制的。
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15])
plt.pie(y,
labels=['A','B','C','D'], # 设置饼图标签
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
explode=(0, 0.2, 0, 0.4), # 第二部分突出显示,值越大,距离越远
autopct='%.2f%%', # 格式化输出百分比显示
)
# 默认情况下,第一个扇形的绘制是从 x 轴开始并逆时针移动
plt.title("Pie Test")
plt.show()
https://matplotlib.org/stable/tutorials/introductory/usage.html
公式:$ f(x) = sin^2(x - 2)e^{ -x^2} $
要求:
您的代码:
提示:
您的代码:
提示:
您的代码:
提示:
您的代码:
销售数据为
data = {‘Barton LLC’: 109438.50,
‘Frami, Hills and Schmidt’: 103569.59,
‘Fritsch, Russel and Anderson’: 112214.71,
‘Jerde-Hilpert’: 112591.43,
‘Keeling LLC’: 100934.30,
‘Koepp Ltd’: 103660.54,
‘Kulas Inc’: 137351.96,
‘Trantow-Barrows’: 123381.38,
‘White-Trantow’: 135841.99,
‘Will LLC’: 104437.60}
横向,x轴为销售额,y轴为分公司名
销售额 group_data = list(data.values())
分公司名 group_names = list(data.keys())
销售平均值 group_mean = np.mean(group_data)
标题为Company Revenue
显示平均线,红色,虚线
分公司名为’Jerde-Hilpert’,‘Koepp Ltd’,'White-Trantow’的在y轴右侧显示注释文本"New Comany"
提示:
您的代码:
GDP数据为
data = {‘四川省’: 53850,
‘重庆市’: 27894,
‘云南省’: 27146,
‘贵州省’: 19568,
‘西藏自治区’: 2000}
省份及gdp
province = list(data.keys())
gdp = list(data.values())
饼状图标签为省份名字,标题为"西南5省2021GDP统计"
输出百分比%.2f%%,重庆市突出显示,突出距离0.1
字体均为黑体
提示:
您的代码: