前言:
# -*- coding: utf-8 -*-
# @Time : 2021/1/31 15:33
# @Author : YYLin
# @Email : 854280599@qq.com
# @File : pixel_value.py
from matplotlib.patches import ConnectionPatch
import cv2, os
import matplotlib.pyplot as plt
import numpy as np
img_dir = 'result-classifier'
img_name = '768512.jpg'
coordinate = 107 # 145
DDC_GAN = []
DD_GAN = []
DDAC_GAN = []
Real_data = []
# 生成数据集
for child_dir in os.listdir(img_dir):
child_path = os.path.join(img_dir, child_dir, img_name)
print('child_path:', child_path)
img = cv2.imread(child_path, cv2.IMREAD_GRAYSCALE)
for i in range(img.shape[0]):
if 'DDC_GAN' == child_dir:
DDC_GAN.append(img[coordinate, i])
elif 'DDAC_GAN' == child_dir:
DDAC_GAN.append(img[coordinate, i])
elif 'DD_GAN' == child_dir:
DD_GAN.append(img[coordinate, i])
elif 'real_data' == child_dir:
Real_data.append(img[coordinate, i])
# 首先画出整体的架构图
print('Real_data:', len(Real_data))
x_axis_data = []
for i in range(len(Real_data)):
x_axis_data.append(i)
fig, ax = plt.subplots(1, 1)
ax.plot(x_axis_data, DD_GAN, color='b', alpha=0.8, label='DD_GAN')
ax.plot(x_axis_data, DDAC_GAN, color='g', alpha=0.8, label='DDAC_GAN')
ax.plot(x_axis_data, DDC_GAN, color='r', alpha=0.8, label='DDC_GAN')
ax.plot(x_axis_data, Real_data, color='y', alpha=0.8, label='Real_data')
font = {'family': 'Times New Roman',
'weight': 'normal',
'size': 14,
}
ax.legend(loc=2, bbox_to_anchor=(1.05, 1.0), borderaxespad=0.1)
ax.set_xlabel('', font)
ax.set_ylabel('Pixel intensity', font)
# 在子坐标系中绘制原始数据
axins = ax.inset_axes((0.35, 0.10, 0.25, 0.25))
axins.plot(x_axis_data, DD_GAN, color='b', alpha=0.8, label='DD_GAN')
axins.plot(x_axis_data, DDAC_GAN, color='g', alpha=0.8, label='DDAC_GAN')
# axins.plot(x_axis_data, No_Semantic_Loss, color='m', alpha=0.8, label='No_Semantic_Loss')
axins.plot(x_axis_data, DDC_GAN, color='r', alpha=0.8, label='DDC_GAN')
axins.plot(x_axis_data, Real_data, color='y', alpha=0.8, label='Real_data')
# 设置放大区间,调整子坐标系的显示范围
zone_left = 40
zone_right = 50
# 坐标轴的扩展比例(根据实际数据调整)
x_ratio = 0 # x轴显示范围的扩展比例
y_ratio = 0.05 # y轴显示范围的扩展比例
# X轴的显示范围
xlim0 = x_axis_data[zone_left]-(x_axis_data[zone_right]-x_axis_data[zone_left])*x_ratio
xlim1 = x_axis_data[zone_right]+(x_axis_data[zone_right]-x_axis_data[zone_left])*x_ratio
# Y轴的显示范围 DA_GAN[zone_left:zone_right],
y = np.hstack((DD_GAN[zone_left:zone_right], DDAC_GAN[zone_left:zone_right],
DDC_GAN[zone_left:zone_right],
Real_data[zone_left:zone_right]))
ylim0 = np.min(y)-(np.max(y)-np.min(y))*y_ratio
ylim1 = np.max(y)+(np.max(y)-np.min(y))*y_ratio
# 调整子坐标系的显示范围
axins.set_xlim(xlim0, xlim1)
axins.set_ylim(ylim0, ylim1)
# 原图中画方框
tx0 = xlim0
tx1 = xlim1
ty0 = ylim0
ty1 = ylim1
sx = [tx0, tx1, tx1, tx0, tx0]
sy = [ty0, ty0, ty1, ty1, ty0]
ax.plot(sx, sy, 'black')
# 画两条线
xy = (xlim0, ylim0)
xy2 = (xlim0, ylim1)
con = ConnectionPatch(xyA=xy2, xyB=xy, coordsA='data',
coordsB='data', axesA=axins, axesB=ax)
axins.add_artist(con)
plt.savefig('Pixel_intensity', dpi=400, bbox_inches='tight')
plt.show()
结果