IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Matplotlib -> 正文阅读

[Python知识库]Matplotlib

Matplotlib数据可视化

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

1 基础知识

1.1 图形绘制

import numpy as np
import matplotlib.pyplot as plt

# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
# 绘制线形图
# 调整尺?
plt.figure(figsize=(9,6))
plt.plot(x,y)
# 继续调?plot绘制多条线形图

# 2、设置?格线
plt.grid(linestyle = '--',# 样式
 color = 'green',# 颜?
 alpha = 0.75) # 透明度
# 3、设置坐标轴范围
plt.axis([-1,10,-1.5,1.5])
plt.xlim([-1,10])
plt.ylim([-1.5,1.5])

1.2 坐标轴刻度、标签、标题

import numpy as np
import matplotlib.pyplot as plt
# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
plt.plot(x,y)
# 2、设置x轴y轴刻度
plt.xticks(np.arange(0,7,np.pi/2))
plt.yticks([-1,0,1])
# 3、设置x轴y轴刻度标签
_ = plt.yticks(ticks = [-1,0,1],labels=['min',' 0 ','max'],fontsize = 20,ha= 'right')
font={'family':'serif','style':'italic','weight':'normal','color':'red','size':16}
_ = plt.xticks(ticks = np.arange(0,7,np.pi/2),
 # LaTex语法,输?格式为:r'$\sigma$' #其中的sigma对应于希腊字?的σ
 labels = ['0',r'$\frac{\pi}{2}$',r'$\pi$',r'$\frac{3\pi}{2}$',r'$2\pi$'],
 fontsize = 20,
 fontweight = 'normal',
 color = 'red')
# 4、坐标轴标签,标题
plt.ylabel('y = sin(x)',rotation = 0,
 horizontalalignment = 'right',fontstyle = 'normal',fontsize = 20)
# 获取电脑上的字体库
from matplotlib.font_manager import FontManager
fm = FontManager()
mat_fonts = set(f.name for f in fm.ttflist)
# print(mat_fonts)
plt.rcParams['font.sans-serif'] = 'Songti SC' # 设置宋体,显示中?
plt.title('正弦波')

1.3 图例

import numpy as np
import matplotlib.pyplot as plt
# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
# 绘制线形图
# 调整尺?
plt.figure(figsize=(9,6))
plt.plot(x,y)
# 2、图例
plt.plot(x,np.cos(x)) # 余弦波
plt.legend(['Sin','Cos'],fontsize = 18,loc = 'center',ncol = 2,bbox_to_anchor =[0,1.05,1,0.2])

1.4 坐标轴移动

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi,np.pi,50)
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(9,6))
plt.plot(x,np.sin(x),x,np.cos(x))
ax = plt.gca() # 获取当前视图
# 右边和上?脊柱消失
ax.spines['right'].set_color('white')
ax.spines['top'].set_color('#FFFFFF')
# 设置下?左边脊柱位置,data表示数据,axes表示相对位置0~1
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.yticks([-1,0,1],labels=['-1','0','1'],fontsize = 18)
_ = plt.xticks([-np.pi,-np.pi/2,np.pi/2,np.pi],
 labels=[r'$-\pi$',r'$-\frac{\pi}{2}$',r'$\frac{\pi}{2}$',r'$\pi$'],
 fontsize = 18)

1.5 图片保存

import numpy as np
import matplotlib.pyplot as plt
# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦波
plt.figure(linewidth = 4)
plt.plot(x,y,color = 'red')
plt.plot(x,np.cos(x),color = 'k') # 余弦波
ax = plt.gca() # 获取视图
ax.set_facecolor('lightgreen') # 设置视图背景颜?
# 2、图例
plt.legend(['Sin','Cos'],fontsize = 18,loc = 'center',ncol = 2,bbox_to_anchor =
[0,1.05,1,0.2])
# plt.tight_layout() # ?动调整布局空间,就不会出现图?保存不完整
plt.savefig('./基础5.png', # ?件名:png、jpg、pdf
 dpi = 100, # 保存图?像素密度
 facecolor = 'violet', # 视图与边界之间颜?设置
 edgecolor = 'lightgreen', # 视图边界颜?设置
 bbox_inches = 'tight')# 保存图?完整

2 风格和样式

线的样式:https://www.matplotlib.org.cn/gallery/lines_bars_and_markers/linestyles.html

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,20)
y1 = np.sin(x)
y2 = np.cos(x)
# 设置颜?,线型,点型
plt.plot(x,y1,color = 'indigo',ls = '-.',marker = 'p')
plt.plot(x,y2,color = '#FF00EE',ls = '--',marker = 'o')
plt.plot(x,y1 + y2,color = (0.2,0.7,0.2),marker = '*',ls = ':')
plt.plot(x,y1 + 2*y2,linewidth = 3,alpha = 0.7,color = 'orange') # 线宽、透明度
plt.plot(x,2*y1 - y2,'bo--') # 参数连?

更多属性设置

import numpy as np
import pandas as pd
def f(x):
 return np.exp(-x) * np.cos(2*np.pi*x)
x = np.linspace(0,5,50)
plt.figure(figsize=(9,6))
plt.plot(x,f(x),color = 'purple',
 marker = 'o',
 ls = '--',
 lw = 2,
 alpha = 0.6,
 markerfacecolor = 'red',# 点颜?
 markersize = 10,# 点??
 markeredgecolor = 'green',#点边缘颜?
 markeredgewidth = 3)#点边缘宽度

plt.xticks(size = 18) # 设置刻度??
plt.yticks(size = 18)

3 多图布局

3.1 子视图

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi,np.pi,50)
y = np.sin(x)
# ?视图1
plt.figure(figsize=(9,6))
ax = plt.subplot(221) # 两?两列第?个?视图
ax.plot(x,y,color = 'red')
ax.set_facecolor('green') # 调??视图设置?法,设置?视图整体属性
# ?视图2
ax = plt.subplot(2,2,2) # 两?两列第?个?视图
line, = ax.plot(x,-y) # 返回绘制对象
line.set_marker('*') # 调?对象设置?法,设置属性第?节 嵌套
line.set_markerfacecolor('red')
line.set_markeredgecolor('green')
line.set_markersize(10)
# ?视图3
ax = plt.subplot(2,1,2) # 两??列第??视图
plt.sca(ax) # 设置当前视图
x = np.linspace(-np.pi,np.pi,200)
plt.plot(x,np.sin(x*x),color = 'red')

3.2 嵌套

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi,np.pi,25)
y = np.sin(x)
fig = plt.figure(figsize=(9,6)) # 创建视图
plt.plot(x,y)
# 嵌套?式?,axes轴域(横纵坐标范围),?视图
ax = plt.axes([0.2,0.55,0.3,0.3]) # 参数含义[left, bottom, width, height]
ax.plot(x,y,color = 'g')
# 嵌套?式?
ax = fig.add_axes([0.55,0.2,0.3,0.3]) # 使?视图对象添加?视图
ax.plot(x,y,color = 'r')

3.3 多图布局

均匀分布
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi)
# sharex:所有?图共享x轴 sharey:表示所有?图共享y轴 坐标轴以所有?图中范围最?的进?显示
fig, ((ax11,ax12,ax13), (ax21,ax22,ax23),(ax31,ax32,ax33)) = plt.subplots(3, 3)
# 也可通过plt.subplot() ?个个添加?视图
fig.set_figwidth(9)
fig.set_figheight(6)
ax11.plot(x,np.sin(x))
ax12.plot(x,np.cos(x))
ax13.plot(x,np.tanh(x))
ax21.plot(x,np.tan(x))
ax22.plot(x,np.cosh(x))
ax23.plot(x,np.sinh(x))
ax31.plot(x,np.sin(x) + np.cos(x))
ax32.plot(x,np.sin(x*x) + np.cos(x*x))
ax33.plot(x,np.sin(x)*np.cos(x))
# 紧凑显示,边框会?较?,可以注释掉该?查看效果
plt.tight_layout()
plt.show()
不均匀分布
import numpy as np
import matplotlib.pyplot as plt
# 需要导?gridspec模块
x = np.linspace(0,2*np.pi,200)
fig = plt.figure(figsize=(12,9))
# 使?切??式设置?视图
ax1 = plt.subplot(3,1,1) # 视图对象添加?视图
ax1.plot(x,np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的?法设置
ax1.set_title('ax1_title') # 设置?图的标题
ax2 = plt.subplot(3,3,(4,5))
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')
ax3 = plt.subplot(3,3,(6,9))
ax3.plot(x,np.sin(x) + np.cos(x))
ax4 = plt.subplot(3,3,7)
ax4.plot([1,3],[2,4])
ax5 = plt.subplot(3,3,8)
ax5.scatter([1,2,3], [0,2, 4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,100)
plt.figure(figsize=(12,9))
# ?视图1
ax1 = plt.subplot2grid(shape = (3, 3),# 布局形状
 loc = (0, 0), # 布局绘制位置
 colspan=3) # 跨?列
ax1.plot(x,np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的?法设置
ax1.set_title('ax1_title') # 设置?图的标题
# ?视图2
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2) # 跨两列
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')
# ?视图3
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2) # 跨两?
ax3.plot(x,np.sin(x) + np.cos(x))
# ?视图4
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax4.plot([1,3],[2,4])
# ?视图5
ax5 = plt.subplot2grid((3, 3), (2, 1))
ax5.scatter([1,2,3], [0,2, 4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)
import numpy as np
import matplotlib.pyplot as plt
# 需要导?gridspec模块
import matplotlib.gridspec as gridspec
x = np.linspace(0,2*np.pi,200)
fig = plt.figure(figsize=(12,9))
# 将整个视图分成3x3布局
gs = gridspec.GridSpec(3, 3)
# 使?切??式设置?视图
ax1 = fig.add_subplot(gs[0,:]) # 视图对象添加?视图
ax1.plot(x,np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的?法设置
ax1.set_title('ax1_title') # 设置?图的标题
ax2 = plt.subplot(gs[1, :2]) # 模块调?
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')
# 从第??到最后,占1、2两?,后?的2表示只占?第?列,也就是最后的?列
ax3 = plt.subplot(gs[1:, 2])
ax3.plot(x,np.sin(x) + np.cos(x))
# 倒数第??,只占第0列这?列
ax4 = plt.subplot(gs[-1, 0])
ax4.plot([1,3],[2,4])
# 倒数第??,只占倒数第?列,由于总共三列,所以倒数第?列就是序号1的列
ax5 = plt.subplot(gs[-1, -2])
ax5.scatter([1,2,3], [0,2, 4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)
plt.show()

3.4 双轴显示

import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(-np.pi,np.pi,100)
data1 = np.exp(x)
data2 = np.sin(x)
plt.figure(figsize=(9,6))
plt.rcParams['font.size'] = 16 # 设置整体字体??
ax1 = plt.gca() # 获取当前轴域
ax1.set_xlabel('time (s)') # 设置x轴标签
ax1.set_ylabel('exp', color='red') # 设置y轴标签
ax1.plot(t,data1, color='red') # 数据绘制
ax1.tick_params(axis='y', labelcolor='red') # 设置y轴刻度属性
ax2 = ax1.twinx() # 创建新axes实例,共享x轴,并设置
ax2.set_ylabel('sin', color='blue')
ax2.plot(t, data2, color='blue')
ax2.tick_params(axis='y', labelcolor='blue')
plt.tight_layout() # 紧凑布局

4 文本、注释、箭头

Pyplot函数
text()在Axes对象的任意位置添加?字
xlabel()为X轴添加标签
ylabel()为Y轴添加标签
title()为Axes对象添加标题
legend()为Axes对象添加图例
annnoatate()为Axes对象添加注释(箭头可选)
figtext()在Figure对象的任意位置添加?字
suptitle()为Figure对象添加中?化的标题

4.1文本

import numpy as np
import matplotlib.pyplot as plt
# 字体属性
font = {'fontsize': 20,
 'family': 'Kaiti SC',
 'color': 'red',
 'weight': 'bold'}
x = np.linspace(0.0, 5.0, 100)
y = np.cos(2*np.pi*x) * np.exp(-x)
plt.figure(figsize=(9,6))
plt.plot(x, y, 'k')
# plt.title('exponential decay',fontdict=font)
# plt.suptitle('指数衰减',y = 1.05,fontdict = font,fontsize = 30)
plt.text(x = 2, y = 0.65, # 横纵坐标位置
 s = r'$\cos(2 \pi t) \exp(-t)$') # ?本内容
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.show()

4.2 箭头

import matplotlib.pyplot as plt
import numpy
loc = np.random.randint(0,10,size = (10,2))
plt.figure(figsize=(10, 10))
plt.plot(loc[:,0], loc[:,1], 'g*', ms=20)
plt.grid(True)
# 路径
way = np.arange(10)
np.random.shuffle(way)
for i in range(0, len(way)-1):
 start = loc[way[i]]
 end = loc[way[i+1]]
 plt.arrow(start[0], start[1], end[0]-start[0], end[1]-start[1], # 坐标与距离
 head_width=0.2, lw=2,#箭头?度,箭尾线宽
 length_includes_head = True) # ?度计算包含箭头箭尾
 plt.text(start[0],start[1],s = i,fontsize = 18,color = 'red') # ?本
 if i == len(way) - 2: # 最后?个点
     plt.text(end[0],end[1],s = i + 1,fontsize = 18,color = 'red')

4.3 注释

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = np.arange(0.0, 5.0, 0.01)
y = np.cos(2*np.pi*x)
line, = ax.plot(x,y,lw=2)
ax.annotate('local max', # ?本内容
 xy=(2, 1), # 箭头指向位置
 xytext=(3, 1.5), # ?本位置
 arrowprops=dict(facecolor='black', shrink=0.05)) # 箭头
ax.annotate('local min',
 xy = (2.5,-1),
 xytext = (4,-1.8),
 arrowprops = dict(facecolor = 'black',
 width = 2, # 箭头宽度
 headwidth = 10,# 箭头头部宽度
 headlength = 10, # 箭头头部?度
 shrink = 0.1)) # 箭头两端收缩的百分?(占总?)
ax.annotate('median',
 xy = (2.25,0),
 xytext = (0.5,-1.8),
 arrowprops = dict(arrowstyle = '-|>'), # 箭头样式
            fontsize = 20)
ax.set_ylim(-2, 2)

4.4 注释箭头连接形状

import matplotlib.pyplot as plt
def annotate_con_style(ax, connectionstyle):
 x1, y1 = 3,2
 x2, y2 = 8,6
 ax.plot([x1, x2], [y1, y2], ".")
 ax.annotate(s = '', xy=(x1, y1), # 相当于B点,arrow head
 xytext=(x2, y2), # 相当于A点,arrow tail
 arrowprops=dict(arrowstyle='->', color='red',
 shrinkA = 5,shrinkB = 5,
 connectionstyle=connectionstyle))
 ax.text(.05, 0.95, connectionstyle.replace(",", "\n"),
 transform=ax.transAxes, # 相对坐标
 ha="left", va="top")# 指定对??式
# 常?箭头连接样式
fig, axs = plt.subplots(3, 5, figsize=(9,6))
annotate_con_style(axs[0, 0], "angle3,angleA=90,angleB=0")
annotate_con_style(axs[1, 0], "angle3,angleA=0,angleB=90")
annotate_con_style(axs[2, 0], "angle3,angleA = 0,angleB=150")
annotate_con_style(axs[0, 1], "arc3,rad=0.")
annotate_con_style(axs[1, 1], "arc3,rad=0.3")
annotate_con_style(axs[2, 1], "arc3,rad=-0.3")
annotate_con_style(axs[0, 2], "angle,angleA=-90,angleB=180,rad=0")
annotate_con_style(axs[1, 2], "angle,angleA=-90,angleB=180,rad=5")
annotate_con_style(axs[2, 2], "angle,angleA=-90,angleB=10,rad=5")
annotate_con_style(axs[0, 3], "arc,angleA=-90,angleB=0,armA=30,armB=30,rad=0")
annotate_con_style(axs[1, 3], "arc,angleA=-90,angleB=0,armA=30,armB=30,rad=5")
annotate_con_style(axs[2, 3], "arc,angleA=-90,angleB=0,armA=0,armB=40,rad=0")
annotate_con_style(axs[0, 4], "bar,fraction=0.3")
annotate_con_style(axs[1, 4], "bar,fraction=-0.3")
annotate_con_style(axs[2, 4], "bar,angle=180,fraction=-0.2")
for ax in axs.flat:
 # 设置轴域刻度
 ax.set(xlim=(0, 10), ylim=(0, 10),xticks = [],yticks = [],aspect=1)
fig.tight_layout(pad=0.2)

5 常用视图

5.1 折线图

import numpy as np
import matplotlib.pyplot as plt
x = np.random.randint(0,10,size = 15)
# ?图多线
plt.figure(figsize=(9,6))
plt.plot(x,marker = '*',color = 'r')
plt.plot(x.cumsum(),marker = 'o')
# 多图布局
fig,axs = plt.subplots(2,1)
fig.set_figwidth(9)
fig.set_figheight(6)
axs[0].plot(x,marker = '*',color = 'red')
axs[1].plot(x.cumsum(),marker = 'o')

5.2 柱状图

import numpy as np
import matplotlib.pyplot as plt
labels = ['G1', 'G2', 'G3', 'G4', 'G5','G6'] # 级别
men_means = np.random.randint(20,35,size = 6)
women_means = np.random.randint(20,35,size = 6)
men_std = np.random.randint(1,7,size = 6)
women_std = np.random.randint(1,7,size = 6)
width = 0.35
plt.bar(labels, # 横坐标
 men_means, # 柱?
 width, # 线宽
 yerr=4, # 误差条
 label='Men')#标签
plt.bar(labels, women_means, width, yerr=2, bottom=men_means,
 label='Women')
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.legend()
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
labels = ['G1', 'G2', 'G3', 'G4', 'G5','G6'] # 级别
men_means = np.random.randint(20,35,size = 6)
women_means = np.random.randint(20,35,size = 6)
x = np.arange(len(men_means))
plt.figure(figsize=(9,6))
rects1 = plt.bar(x - width/2, men_means, width) # 返回绘图区域对象
rects2 = plt.bar(x + width/2, women_means, width)
# 设置标签标题,图例
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(x,labels)
plt.legend(['Men','Women'])
# 添加注释
def set_label(rects):
 for rect in rects:
     height = rect.get_height() # 获取?度
     plt.text(x = rect.get_x() + rect.get_width()/2, # ?平坐标
     y = height + 0.5, # 竖直坐标
     s = height, # ?本
     ha = 'center') # ?平居中
set_label(rects1)
set_label(rects2)
plt.tight_layout() # 设置紧凑布局
plt.savefig('./分组带标签柱状图.png')

5.3 极坐标图

import numpy as np
import matplotlib.pyplot as plt
r = np.arange(0, 4*np.pi, 0.01) # 弧度值
y = np.linspace(0,2,len(r)) # ?标值
ax = plt.subplot(111,projection = 'polar',facecolor = 'lightgreen') # 定义极坐标
ax.plot(r, y,color = 'red')
ax.set_rmax(3) # 设置半径最?值
ax.set_rticks([0.5, 1, 1.5, 2]) # 设置半径刻度
ax.set_rlabel_position(-22.5) # 设置半径刻度位置
ax.grid(True) # ?格线
ax.set_title("A line plot on a polar axis", va='center',ha = 'center',pad = 30)
import numpy as np
import matplotlib.pyplot as plt
N = 8 # 分成8份
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = np.random.randint(3,15,size = N)
width = np.pi / 4
colors = np.random.rand(8,3) # 随机?成颜?
ax = plt.subplot(111, projection='polar') # polar表示极坐标
ax.bar(theta, radii, width=width, bottom=0.0,color = colors)

5.4 直方图

import numpy as np
import matplotlib.pyplot as plt
mu = 100 # 平均值
sigma = 15 # 标准差
x = np.random.normal(loc = mu,scale = 15,size = 10000)
fig, ax = plt.subplots()
n, bins, patches = ax.hist(x, 200, density=True) # 直?图
# 概率密度函数
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
 np.exp(-0.5 * (1 / sigma * (bins - mu))**2))
plt.plot(bins, y, '--')
plt.xlabel('Smarts')
plt.ylabel('Probability density')
plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')
# 紧凑布局
fig.tight_layout()
plt.savefig('./直?图.png')

5.5 箱型图

import numpy as np
import matplotlib.pyplot as plt
data=np.random.normal(size=(500,4))
lables = ['A','B','C','D']
# ?Matplotlib画箱线图
plt.boxplot(data,1,'gD',labels=lables) # 红?的圆点是异常值

5.6 散点图

import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(100,2)
s = np.random.randint(100,300,size = 100)
color = np.random.randn(100)
plt.scatter(data[:,0], # 横坐标
 data[:,1], # 纵坐标
 s = s, # 尺?
 c = color, # 颜?
 alpha = 0.5) # 透明度

5.7 饼图

import numpy as np
import matplotlib.pyplot as plt
# 解决中?字体乱码的问题
matplotlib.rcParams['font.sans-serif']='Kaiti SC'
labels =["五星","四星","三星","?星","?星"] # 标签
percent = [95,261,105,30,9] # 某市星级酒店数量
# 设置图???和分辨率
fig=plt.figure(figsize=(5,5), dpi=150)
# 偏移中?量,突出某?部分
explode = (0, 0.1, 0, 0, 0)
# 绘制饼图:autopct显示百分?,这?保留?位?数;shadow控制是否显示阴影
plt.pie(x = percent, # 数据
 explode=explode, # 偏移中?量
 labels=labels, # 显示标签
 autopct='%0.1f%%', # 显示百分?
 shadow=True) # 阴影,3D效果
plt.savefig("./饼图.jpg")
fig=plt.figure(figsize=(5,5),dpi=100)
#数据集,p1, p2分别对应外部、内部百分?例
p1=[43,25,32]
p2=[7,22,14,5,14,6,32]
labels = ['?狗','?猫','??']
def func(pct):
 return r'%0.1f'%(pct) + '%'
plt.pie(p1,
 autopct=lambda pct: func(pct),
 radius=1, # 半径
 pctdistance=0.85, # 百分?位置
 wedgeprops=dict(linewidth=3,width=0.4,edgecolor='w'),# 饼图格式:间隔线宽、饼图宽度、边界颜?
 labels=labels)
# 绘制内部饼图
plt.pie(p2,autopct='%0.1f%%',
 radius=0.7,
 pctdistance=0.7,
 wedgeprops=dict(linewidth=3,width=0.7,edgecolor='w'))
# 设置图例标题、位置,frameon控制是否显示图例边框,bbox_to_anchor控制图例显示在饼图的外?
plt.legend(labels,loc = 'upper right',bbox_to_anchor = (0.75,0,0.4,1),title =
'宠物占?')
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(6,6))
# 甜甜圈原料
recipe = ["225g flour",
 "90g sugar",
 "1 egg",
 "60g butter",
 "100ml milk",
 "1/2package of yeast"]
# 原料?例
data = [225, 90, 50, 60, 100, 5]
wedges, texts = plt.pie(data,startangle=40)
bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72)
kw = dict(arrowprops=dict(arrowstyle="-"),bbox=bbox_props,va="center")
for i, p in enumerate(wedges):
 ang = (p.theta2 - p.theta1)/2. + p.theta1 # ?度计算
 # ?度转弧度----->弧度转坐标
 y = np.sin(np.deg2rad(ang))
 x = np.cos(np.deg2rad(ang))
 ha = {-1: "right", 1: "left"}[int(np.sign(x))] # ?平对??式
 connectionstyle = "angle,angleA=0,angleB={}".format(ang) # 箭头连接样式
 kw["arrowprops"].update({"connectionstyle": connectionstyle}) # 更新箭头连接?式
 plt.annotate(recipe[i], xy=(x, y), xytext=(1.35*np.sign(x), 1.4*y),
 ha=ha,**kw,fontsize = 18,weight = 'bold')
plt.title("Matplotlib bakery: A donut",fontsize = 18,pad = 25)
plt.tight_layout()

5.8 热力图

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
vegetables = ["cucumber", "tomato", "lettuce", "asparagus","potato", "wheat",
"barley"]
farmers = list('ABCDEFG')
harvest = np.random.rand(7,7)*5 # 农?丰收数据
plt.rcParams['font.size'] = 18
plt.rcParams['font.weight'] = 'heavy'
plt.figure(figsize=(9,9))
im = plt.imshow(harvest)
plt.xticks(np.arange(len(farmers)),farmers,rotation = 45,ha = 'right')
plt.yticks(np.arange(len(vegetables)),vegetables)
# 绘制?本
for i in range(len(vegetables)):
 for j in range(len(farmers)):
     text = plt.text(j, i, round(harvest[i, j],1),
     ha="center", va="center", color='r')
plt.title("Harvest of local farmers (in tons/year)",pad = 20)
fig.tight_layout()
plt.savefig('./热?图.png')

5.9面积图

import matplotlib.pyplot as plt
plt.figure(figsize=(9,6))
days = [1,2,3,4,5] 
sleeping =[7,8,6,11,7]
eating = [2,3,4,3,2]
working =[7,8,7,2,2]
playing = [8,5,7,8,13] 
plt.stackplot(days,sleeping,eating,working,playing) 
plt.xlabel('x')
plt.ylabel('y')
plt.title('Stack Plot',fontsize = 18)
plt.legend(['Sleeping','Eating','Working','Playing'],fontsize = 18)

5.10 蜘蛛图

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Kaiti SC'
labels=np.array(["个?能?","IQ","服务意识","团队精神","解决问题能?","持续学习"])
stats=[83, 61, 95, 67, 76, 88]
# 画图数据准备,?度、状态值
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))
# ?Matplotlib画蜘蛛图
fig = plt.figure(figsize=(9,9))
ax = fig.add_subplot(111, polar=True) 
ax.plot(angles, stats, 'o-', linewidth=2) # 连线
ax.fill(angles, stats, alpha=0.25) # 填充
# 设置?度
ax.set_thetagrids(angles*180/np.pi, labels, fontsize = 18)
ax.set_rgrids([20,40,60,80],fontsize = 18)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:19:14  更:2022-03-30 18:23:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:03:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计