基于Python绘制子图及子图刻度的变换等的问题

1、涉及到图的对比会用到子图形式展示

先看看效果

2、绘制代码如下

accuracy_alexnet_clef = [78.05, 78.43, 78.65, 78.61, 78.69]
accuracy_resnet_clef  = [84.56, 84.84, 85.07, 85.01, 85.13]
accuracy_alexnet_office10 = [87.30, 87.57, 87.78, 87.72, 87.50]
accuracy_resnet_office10  = [96.31, 96.35, 96.62, 96.43, 96.15]
orders = ['2', '3', '5', '10', '20']
names = ['alexnet', 'resnet']
# 创建两幅子图
f, ax = plt.subplots(2,1,figsize=(6, 8))
# 第一根柱子偏移坐标
x = [i for i in range(len(orders))]
# 第二根柱子偏移坐标
x1 = [i + 0.35 for i in range(len(orders))]
# 两幅子图之间的间距
plt.subplots_adjust(wspace =0, hspace =0.4)
# 选择第一幅图
figure_1 = ax[0]
# 设置x轴偏移和标签
figure_1.set_xticks([i+0.15 for i in x])
figure_1.set_xticklabels(orders)
# 设置y轴的范围
figure_1.set_ylim(bottom=77,top=86)
# 绘制柱状图,x表示x轴内容,accuracy_alexnet_clef表示y轴的内容,alpha表示透明度,width表示柱子宽度
# label表示图列
figure_1.bar(x, accuracy_alexnet_clef, alpha=0.7, width = 0.35, facecolor = '#4c72b0', label='Alexnet')
figure_1.bar(x1, accuracy_resnet_clef, alpha=0.7, width = 0.35, facecolor = '#dd8452', label='Resnet')
figure_1.set_ylabel('Accuracy%') # 设置y轴的标签
figure_1.set_xlabel('Order') # 设置x轴的名称
figure_1.set_title('Alexnet') # 设置图一标题名称
figure_1.legend() # 显示图一的图例
# 选择第二幅图
figure_2 = ax[1]
figure_1.set_xticks([i+0.15 for i in x])
figure_1.set_xticklabels(orders)
figure_2.set_ylim(bottom=77,top=100)
figure_2.bar(x, accuracy_alexnet_office10,alpha=0.7,width = 0.35,facecolor = '#c44e52', label='Alexnet')
figure_2.bar(x1, accuracy_resnet_office10,alpha=0.7,width = 0.35,facecolor = '#5f9e6e', label='Alexnet')
# figure_2.bar(orders, accuracy_resnet_clef,alpha=0.7,width = 0.35,facecolor = '#dd8452')
figure_2.set_ylabel('Accuracy%')
figure_2.set_xlabel('Order')
figure_2.set_title('Resnet')
figure_2.legend()
f.suptitle('ImageCLEF_DA') # 设置总标题
plt.show()

补充:python使用matplotlib在一个图形中绘制多个子图以及一个子图中绘制多条动态折线问题

在讲解绘制多个子图之前先简单了解一下使用matplotlib绘制一个图,导入绘图所需库matplotlib并创建一个等间隔的列表x,将[0,2*pi]等分为50等份,绘制函数sin(x)。当没有给定x轴数值时,默认以下标作为x的值,如果x值确定,则绘图时写为plt.plot(x,y) 。

  

如若想要绘制一个图时写入标签,则写为plt.plot(x,y,label="figure1")。

from numpy import *
import matplotlib.pyplot as plt
x = linspace(0, 2 * pi, 50)
plt.plot(sin(x))
plt.xlabel('x-label')
plt.ylabel('y-label', fontsize='large')
plt.title('title')

以下先将整体代码插入,再分布讲解:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
def minmax_value(list1):
    minvalue=min(list1)
    maxvalue=max(list1)
    return minvalue,maxvalue
plt.figure(figsize=(16,14),dpi=98)
xmajorLocator = MultipleLocator(1) #将x主刻度标签设置为1的倍数
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
p1 = plt.subplot(121)
p2 = plt.subplot(122)
#图中展示点的数量
pointcount=5
x=[i for i in range(20)]
print(x)
y1=[i**2 for i in range(20)]
y2=[i*4 for i in range(20)]
y3=[i*3+2 for i in range(20)]
y4=[i*4 for i in range(20)]
for i in range(len(x)-1):
    if i<pointcount:
        minx,maxx=minmax_value(x[:pointcount])
        minx,maxx=minmax_value(x[:pointcount])
        minyA,maxyA=minmax_value(y1[:pointcount])
        minyB,maxyB=minmax_value(y2[:pointcount])

        maxy1=max(maxyA,maxyB)
        miny1=min(minyA,minyB)
        p1.axis([minx,maxx,miny1,maxy1])
        p1.grid(True)
        A,=p1.plot(x[:pointcount],y1[:pointcount],"g-")
        B,=p1.plot(x[:pointcount],y2[:pointcount],"b-")
        #设置主刻度标签的位置,标签文本的格式
        p1.xaxis.set_major_locator(xmajorLocator)
        legend=p1.legend(handles=[A,B],labels=["图1","图2"])    

        minx,maxx=minmax_value(x[:pointcount])
        minx,maxx=minmax_value(x[:pointcount])
        minyA,maxyA=minmax_value(y3[:pointcount])
        minyB,maxyB=minmax_value(y4[:pointcount])

        maxy1=max(maxyA,maxyB)
        miny1=min(minyA,minyB)
        p2.axis([minx,maxx,miny1,maxy1])
        p2.grid(True)
        A,=p2.plot(x[:pointcount],y3[:pointcount],"r-")
        B,=p2.plot(x[:pointcount],y4[:pointcount],"y-")
        #设置主刻度标签的位置,标签文本的格式
        p2.xaxis.set_major_locator(xmajorLocator)
        legend=p2.legend(handles=[A,B],labels=["图3","图4"])
    elif i>=pointcount:
        minx,maxx=minmax_value(x[i-pointcount:i])
        minx,maxx=minmax_value(x[i-pointcount:i])
        minyA,maxyA=minmax_value(y1[i-pointcount:i])
        minyB,maxyB=minmax_value(y2[i-pointcount:i])

        maxy1=max(maxyA,maxyB)
        miny1=min(minyA,minyB)
        p1.axis([minx,maxx,miny1,maxy1])
        p1.grid(True)
        A,=p1.plot(x[i-pointcount:i],y1[i-pointcount:i],"g-")
        B,=p1.plot(x[i-pointcount:i],y2[i-pointcount:i],"b-")
        #设置主刻度标签的位置,标签文本的格式
        p1.xaxis.set_major_locator(xmajorLocator)
        legend=p1.legend(handles=[A,B],labels=["图1","图2"])
        minx,maxx=minmax_value(x[i-pointcount:i])
        minx,maxx=minmax_value(x[i-pointcount:i])
        minyA,maxyA=minmax_value(y3[i-pointcount:i])
        minyB,maxyB=minmax_value(y4[i-pointcount:i])

        maxy1=max(maxyA,maxyB)
        miny1=min(minyA,minyB)
        p2.axis([minx,maxx,miny1,maxy1])
        p2.grid(True)
        A,=p2.plot(x[i-pointcount:i],y3[i-pointcount:i],"r-")
        B,=p2.plot(x[i-pointcount:i],y4[i-pointcount:i],"y-")
        #设置主刻度标签的位置,标签文本的格式
        p2.xaxis.set_major_locator(xmajorLocator)
        legend=p2.legend(handles=[A,B],labels=["图3","图4"])
    p1.set_xlabel("横轴属性名一",fontsize=14)
    p1.set_ylabel("纵轴属性名一",fontsize=14)
    p1.set_title("主题一",fontsize=18)

    p2.set_xlabel("横轴属性名二",fontsize=14)
    p2.set_ylabel("纵轴属性名二",fontsize=14)
    p2.set_title("主题二",fontsize=18)
    plt.pause(0.3)
    plt.tight_layout(pad=4, w_pad=4.0, h_pad=3.0)

运行结果为:

1、导入库

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter 

2、由于绘图过程中多次使用获取最大最小值,将获取最大最小值写入函数,后面直接调用函数即可。

def minmax_value(list1):
    minvalue=min(list1)
    maxvalue=max(list1)
    return minvalue,maxvalue

3、

(1)创建自定义图像,并设置figured的长和宽以及dpi参数指定绘图对象的分辨率;

(2)设置x轴刻度的间隔;

(3)对本次绘图中的字体进行设置;

(4)在matplotlib下,一个figure对象可以包含多个子图(Axes),使用subplot()快速绘制。

plt.figure(figsize=(16,14),dpi=98)xmajorLocator = MultipleLocator(1)
plt.rcParams['font.sans-serif']=['SimHei']  plt.rcParams['axes.unicode_minus'] = False

p1 = plt.subplot(121)p2 = plt.subplot(122)

4、当数据量过多时,对数据一次性展示不能够达到对数据内部信息的解读。本例采用一次展示其中一部分数据,并动态的更新图片,于此同时,动态更新横纵坐标轴的取值范围。下面代码首先设置了每次展示点的数量,并获取了主题一中的所有数据值。根据x取值范围和值域y获取当前绘图过程中的横纵坐标取值范围,最后根据x,y的值进行绘图。

下面将先在一个子图上显示两条静态折现。当使用动态的折线图时,只需动态更新数据和横纵坐标的取值范围。总体代码中已经写出,下面不再赘述。

#图中展示点的数量
pointcount=5
x=[i for i in range(20)]
y1=[i**2 for i in range(20)]
y2=[i*4 for i in range(20)]
minx,maxx=minmax_value(x[:pointcount])
minyA,maxyA=minmax_value(y1[:pointcount])
minyB,maxyB=minmax_value(y2[:pointcount])

maxy1=max(maxyA,maxyB)
miny1=min(minyA,minyB)
p1.axis([minx,maxx,miny1,maxy1])
p1.grid(True)#绘图过程中出现的网格设置
A,=p1.plot(x[:pointcount],y1[:pointcount],"g-")
B,=p1.plot(x[:pointcount],y2[:pointcount],"b-")#设置主刻度标签的位置,标签文本的格式p1.xaxis.set_major_locator(xmajorLocator)legend=p1.legend(handles=[A,B],labels=["图1","图2"])

结果如下所示:

5、设置边界,不设置边界经常会因为横纵轴的字体太大等其他原因导致横纵轴或者标题只能显示其中一部分。

plt.tight_layout(pad=4, w_pad=4.0, h_pad=3.0)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python绘制多个子图的实例

    绘制八个子图 import matplotlib.pyplot as plt fig = plt.figure() shape=['.','o','v','>','<','8','s','*'] for j in range(8): x=[i for i in range(6)] y=[i**2 for i in range(6)] ax = fig.add_subplot(241+j) ax.scatter(x,y,c='r',marker=shape[j]) ax.set_title('第

  • Python figure参数及subplot子图绘制代码

    1. Python的figure参数主要有: def figure(num=None, # autoincrement if None, else integer from 1-N figsize=None, # defaults to rc figure.figsize dpi=None, # defaults to rc figure.dpi facecolor=None, # defaults to rc figure.facecolor edgecolor=None, # default

  • python使用matplotlib:subplot绘制多个子图的示例

    数据可视化的时候,常常需要将多个子图放在同一个画板上进行比较,python 的matplotlib包下的subplot可以帮助完成子功能. part1 绘制如下子图 import matplotlib.pyplot as plt plt.figure(figsize=(6,6), dpi=80) plt.figure(1) ax1 = plt.subplot(221) plt.plot([1,2,3,4],[4,5,7,8], color="r",linestyle = "-

  • python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib.pyplot as plt import MySQLdb as mdb import numpy as np from mpl_toolkits.axes_grid1.inset_locator import inset_axes from mpl_toolkits.axes_grid1.inset

  • 基于Python绘制一个摸鱼倒计时界面

    目录 前言 实现过程 前言 前段时间在微博看到一段摸鱼人的倒计时模板,感觉还挺有趣的. 于是我用了一小时的时间写了个页面出来 摸鱼办地址 (当然是摸鱼的时间啦). 模板是这样的: 摸鱼办公室 [摸鱼办公室]今天是 2021-11-30 星期二 你好,摸鱼人,工作再累,一定不要忘记摸鱼哦 ! 有事没事起身去茶水间去廊道去天台走走,别老在工位上坐着.多喝点水,钱是老板的,但命是自己的 ! 距离 周末 放假还有 2 天 距离 元旦 放假还有 3 天 距离 过年 放假还有 34 天 距离 清明节 放假还

  • 基于Python绘制世界疫情地图详解

    世界疫情数据下载请点击>>:疫情数据下载 注:此数据是2022年3月12号的结果,其中透明的地方代表确诊人数小于10万人,白色的地方代表无该国家的数据. 最终效果: 下载需要的python包: pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-countries-china-cities-pypkg import seaborn as sns imp

  • 基于Python绘制520表白代码

    目录 一.绘制成品 二.绘制代码 1.导入库 2.选择背景音乐 3.绘制心的外轮廓 4.填充心并写告白信 5.画心动线 一.绘制成品 二.绘制代码 实现本文效果的整体思路是:加载库—选择背景音乐—绘制心的外轮廓—填充心并写告白信—绘制心动线. 1.导入库 # -*- coding: UTF-8 -*- ''' 代码用途 :情人节表白 作者 :阿黎逸阳 博客 : https://blog.csdn.net/qq_32532663/article/details/106176609 ''' impo

  • 基于Python绘制三种不同的中国结

    目录 前言 示例一 效果图 代码展示 示例二 效果图 代码展示 示例三 效果图 代码展示 前言 今天就来分享几个用python绘制的图案吧 马上就要迎来新年了 就绘制了几个中国结,嘿嘿 话不多说,直接展示一下代码和效果图吧 示例一 效果图 代码展示 import turtle turtle.screensize(600,800) turtle.pensize(10) turtle.pencolor("red") turtle.seth(-45) turtle.fd(102) turtl

  • 基于Python绘制子图及子图刻度的变换等的问题

    1.涉及到图的对比会用到子图形式展示 先看看效果 2.绘制代码如下 accuracy_alexnet_clef = [78.05, 78.43, 78.65, 78.61, 78.69] accuracy_resnet_clef = [84.56, 84.84, 85.07, 85.01, 85.13] accuracy_alexnet_office10 = [87.30, 87.57, 87.78, 87.72, 87.50] accuracy_resnet_office10 = [96.31

  • 基于Python绘制个人足迹地图

    前言 前两年,足迹地图小程序风靡朋友圈,一时间大家都流行晒自己的旅行地图.但是,笔者最近体验了好几款足迹地图的小程序,发现这些小程序虽然号称是足迹地图,但最多只是展示到省级别,无法精确到市级别,因此,笔者周末花了点时间,用Python来绘制自己的个人足迹地图,可以精确到市级别. 下面的部分,笔者将介绍如何简单地来绘制个人足迹地图. 首先我们需要安装以下Python的第三方模块: echarts-china-cities-pypkg==0.0.9 echarts-china-provinces-p

  • 基于Python绘制美观动态圆环图、饼图

    前言 本文采用PyEchartsv1.x版本进行绘制地图. 注:PyEcharts分为 v0.5.x 和 v1.x 两个大版本,v0.5.x 和 v1.x 间不兼容,v0.5.x是基于Python2.7+.3.4+版本开发的,而v1.x是一个全新的版本,它是基于Python3.6+版本开发的,另外经PyEcharts开发团队决定,0.5.x 版本将不再进行维护. 绘制的饼图效果是这样的: 没有安装PyEcharts的,先安装PyEcharts: 安装好PyEcharts之后,就可以将需要使用的模

  • 基于python绘制科赫雪花

    什么是科赫曲线 科赫曲线是de Rham曲线的特例.给定线段AB,科赫曲线可以由以下步骤生成: 将线段分成三等份(AC,CD,DB) 以CD为底,向外(内外随意)画一个等边三角形DMC 将线段CD移去 分别对AC,CM,MD,DB重复1~3. 什么是科赫雪花 三段科赫曲线组成的图形 实现的效果 < #KocheDraw1 import turtle def koch(size,n): if n==1: turtle.fd(size) else: for i in [0,60,-120,60]:

  • Python 实现绘制子图及子图刻度的变换等问题

    1.涉及到图的对比会用到子图形式展示,先看看效果 2.绘制代码如下 accuracy_alexnet_clef = [78.05, 78.43, 78.65, 78.61, 78.69] accuracy_resnet_clef = [84.56, 84.84, 85.07, 85.01, 85.13] accuracy_alexnet_office10 = [87.30, 87.57, 87.78, 87.72, 87.50] accuracy_resnet_office10 = [96.31

随机推荐