ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

matplotlib.pyplot绘制子图以及子图大小和位置的调整

2022-08-14 14:32:56  阅读:254  来源: 互联网

标签:plot plt color pyplot subplt2 子图 matplotlib label linestyle


今天为了把下面的8个子图的图形调的清晰加上大小合适,花费了大概5个多小时的时间,把这段代码记录下来,以防电脑上代码丢失,制图的大小,间距、位置,颜色怎么调整,看里面的注释。很简单的东西,把人能搞疯了。

等于说代码不算字,好吧,为了凑够二百字,我要拼命的努力打字了。其实有些时候明白了一个函数的参数的意思,很多东西都很好调,我这种半年没摸python的人,真的有些搞不动了。话说,差不多到200字了,我要结束絮叨了,今天不工作了,准备回去蒸红薯去。

"""
绘制pbft和VRF_TS_BFT在不同节点数不同概率下成功的对比图
"""

import numpy as np
import math
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from scipy.special import perm, comb
from matplotlib.pyplot import MultipleLocator

# print(comb(10, 2))
fig = plt.figure(figsize=(8, 28), dpi=70)#有时候子图的宽度和高度感觉差点的时候,这个时候就在这里调整画布的尺寸
# 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:是否显示边框
gs = gridspec.GridSpec(nrows=4, ncols=2)
# nrows:它是一个整数,代表网格中的行数。
# ncols:它是一个整数,代表网格中的列数。
# figure:它是用于绘制图形的可选参数。
# left, right, top, bottom:这些是可选参数,用于将子图的范围定义为图形宽度或高度的一部分。
# wspase:这是一个可选的float参数,用于保留子图之间的宽度空间。
# hspace:它是一个可选的float参数,用于保留子图之间的高度空间。
# width_ratios:它是一个可选参数,代表列的宽度比率。
# height_ratios:它是一个可选参数,表示行的宽度比率。, height_ratios=[1, 1]
# gs.update(wspace = 0.1, hspace = 0.8)
p = np.arange(0, 1, 0.1)


# print(p) # 0到0.9


def getf1(n):
k = int((n - 1) / 3)
f1 = []
for j1 in range(0, 10):
sum = 0.0
for i1 in range(2 * k + 1, n + 1):
sum += comb(n, i1) * (p[j1] ** i1) * ((1 - p[j1]) ** (n - i1))
f1.append(sum)
return f1


def getf2(n):
k = int((n - 1) / 3)
f2 = []
for j2 in range(0, 10):
sum = 0.0
for i2 in range(k + 1, n + 1):
sum += comb(n, i2) * (p[j2] ** i2) * ((1 - p[j2]) ** (n - i2))
f2.append(sum)
return f2


f71 = getf1(7)
f72 = getf2(7)

f161 = getf1(16)
f162 = getf2(16)

f221 = getf1(22)
f222 = getf2(22)

f281 = getf1(28)
f282 = getf2(28)

f461 = getf1(46)
f462 = getf2(46)

f611 = getf1(61)
f612 = getf2(61)

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


# 前三个参数,nr表第几行,nbc表示所绘制图形所在列,参数都是从0开始计数
def PlotP(nr, nbc, x1, y1, x2, y2, title):
subplt = plt.subplot(gs[nr, nbc]) # 这个地方做了修改,这是要几行几列的,现在改为三行两列
# subplot(nrows,ncols,sharex,sharey,subplot_kw,**fig_kw)
subplt.plot(x1, y1, label='PBFT',color="gray") #
subplt.plot(x2, y2, label='VRF_TS_BFT', linestyle="--", color="black") #
subplt.set_title(title)
subplt.legend()


# Probability distribution of successful proposal
PlotP(0, 0, p, f71, p, f72, '(a) n = 7')
PlotP(0, 1, p, f161, p, f162, '(b) n = 16')
PlotP(1, 0, p, f221, p, f222, '(c) n = 22')
PlotP(1, 1, p, f281, p, f282, '(d) n = 28')
PlotP(2, 0, p, f461, p, f462, '(e) n = 46')
PlotP(2, 1, p, f611, p, f612, '(f) n = 61')

subplt1 = plt.subplot(gs[3,0])
subplt1.plot(p, f71, label='n=7', color=(0.3,0.3,0.3))
subplt1.plot(p, f161, label='n=16', linestyle="-.", color=(0.15,0.15,0.15))#虚点线
subplt1.plot(p, f221, label='n=22', linestyle="-", color=(0.75,0.75,0.75))#实线
subplt1.plot(p, f281, label='n=28', linestyle=":", color=(0.6,0.6,0.6))#点线
subplt1.plot(p, f461, label='n=46', linestyle="--", color=(0.45,0.45,0.45))#虚线
subplt1.plot(p, f611, label='n=61', linestyle="-", marker='|', color=(0,0,0))
subplt1.set_title("(g) PBFT")
subplt1.legend()

subplt2 = plt.subplot(gs[3,1])
subplt2.plot(p, f72, label='n=7', color=(0.3,0.3,0.3))
subplt2.plot(p, f162, label='n=16', linestyle="-.", color=(0.15,0.15,0.15))
subplt2.plot(p, f222, label='n=22', linestyle="-", color=(0.75,0.75,0.75))
subplt2.plot(p, f282, label='n=28', linestyle=":", color=(0.6,0.6,0.6))
subplt2.plot(p, f462, label='n=46', linestyle="--", color=(0.45,0.45,0.45))
subplt2.plot(p, f612, label='n=61', linestyle="-", marker='|', color=(0,0,0))
subplt2.set_title("(h) VRF_TS_BFT")
# plt.tight_layout()
subplt2.legend()
fig.subplots_adjust(wspace=0.2, hspace=0.3)# 这个是调整宽度距离和高度距离
# fig.tight_layout()
plt.savefig('D:\\22.png')
plt.show() 作者:任永旺 https://www.bilibili.com/read/cv14062166/ 出处:bilibili

标签:plot,plt,color,pyplot,subplt2,子图,matplotlib,label,linestyle
来源: https://www.cnblogs.com/cinemaparadiso/p/16585354.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有