python绘图技巧(高清图)

一、绘制普通的多线图。

除了常规的样式坐标名字以及调节大小等,还有一些解决的特殊的,但是需要的问题。

1、 注意我们经常保存的画会留白很大,解决了这个问题

2、中文乱码

3、图像模糊,清晰度不够也解决了

import cv2
from pylab import *  # 支持中文
mpl.rcParams['font.sans-serif'] = ['SimHei']

img2 = cv2.imread("img/fenge-1-1.jpg")
img4 = cv2.imread("img/fenge-1-1-0.06.jpg")
img5 = cv2.imread("img/fenge-1-1-0.02.jpg")
img6 = cv2.imread("img/fenge-1-1-0.1.jpg")


img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)
h1, s, img2 = cv2.split(img2)  # 看单通道的
img_array2 = np.array(img2)  # 把图像转成数组格式img = np.asarray(image)
mean2 = np.average(img_array2, axis=0)  # 按列求均值

img4 = cv2.cvtColor(img4, cv2.COLOR_BGR2HSV)
h1, s, img4 = cv2.split(img4)  # 看单通道的
img_array4 = np.array(img4)  # 把图像转成数组格式img = np.asarray(image)
mean4 = np.average(img_array4, axis=0)  # 按列求均值

img5 = cv2.cvtColor(img5, cv2.COLOR_BGR2HSV)
h1, s, img5 = cv2.split(img5)  # 看单通道的
img_array5 = np.array(img5)  # 把图像转成数组格式img = np.asarray(image)
mean5 = np.average(img_array5, axis=0)  # 按列求均值

img6 = cv2.cvtColor(img6, cv2.COLOR_BGR2HSV)
h1, s, img6 = cv2.split(img6)  # 看单通道的
img_array6 = np.array(img6)  # 把图像转成数组格式img = np.asarray(image)
mean6 = np.average(img_array6, axis=0)  # 按列求均值

# plt.plot(mean2,c="g",label=u'a=std/(255*2)')
# plt.plot(mean4,linestyle=":",c="r",label=u'a=0.06')
# plt.plot(mean5,linestyle="-.",c="b",label=u'a=0.02')
# plt.plot(mean6,linestyle="--",c="k",label=u'a=0.1')

plt.plot(mean2,linewidth=1,c="g",label=u'a=std/(255*2)')
plt.plot(mean4,linewidth=1,linestyle=":",c="r",label=u'a=0.06')
plt.plot(mean5,linewidth=1,linestyle="--",c="b",label=u'a=0.02')
plt.plot(mean6,linewidth=1,linestyle="-.",c="darkorange",label=u'a=0.1')


plt.legend(loc='upper right',prop={'family':'SimHei','size':9})  # 让图例生效
# plt.legend(loc='upper right',size=5)  # 让图例生效lower
plt.tick_params(direction='in')  # 刻度向里
plt.xlim([0, 255])  # 横坐标范围
plt.ylim([100, 150])  # 横坐标范围
plt.ylim([100, 150])  # 横坐标范围
# plt.grid(True)  ##增加格点
plt.axis('tight')  # 坐标轴适应数据量 axis 设置坐标轴
plt.xlabel("图像1宽度/(像素)", size=10)
plt.ylabel("列平均灰度值", size=10)

# plt.title("a不同取值的L*(x,y)的一维曲线图")  # 标题

#方法一
 # plt.rcParams['savefig.dpi'] = 800 #图片像素
# #
# # plt.rcParams['figure.dpi'] = 800 #分辨率
# #
# # # plt.axis('off')可以去坐标轴
# # plt.savefig('img/name-2.jpg')
# 方法二
#可以直接设置保存好的图的清晰度,大小
# plt.set_size_inches(6, 6)  #设置保存图片的尺寸
plt.savefig('img/name-1.jpg', dpi=800,bbox_inches='tight')

#bbox_inches使生成的图片周围的空白缩小
#在 plt.show() 之前调用 plt.savefig(),否则出现空白

plt.show()

cv2.waitKey(0)
cv2.destroyAllWindows()

二、注意:另外一种设置刻度方向的方法:

import matplotlib.pyplot as plt

plt.rcParams['xtick.direction'] = 'in'  # 将x周的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'  # 将y轴的刻度方向设置向内

plt.rcParams['xtick.direction'] = 'out'  # 将x周的刻度线方向设置向外
plt.rcParams['ytick.direction'] = 'out'  # 将y轴的刻度方向设置向内外

plt.rcParams['xtick.direction'] = 'inout'  # 将x周的刻度线方向设置向中间
plt.rcParams['ytick.direction'] = 'inout'  # 将y轴的刻度方向设置向中间

 三、颜色样式

Python matplotlib 作图(一、线条颜色、类型设置)_qq_17576739的博客-CSDN博客_python画图线条粗细

 四、绘制3D图(秀一下)

import cv2
from pylab import *  # 支持中文
mpl.rcParams['font.sans-serif'] = ['SimHei']
from IPython.core.pylabtools import figsize # import figsize

img = cv2.imread("img/1-2.jpg", 0)
# print(img.shape)#可以查看是200*200 3通道还是单通道
cv2.imshow('img',img)
height, width= img.shape[:2]
print(height, width)

img = cv2.resize(img, (height,width))

xx, yy = np.mgrid[0:img.shape[0], 0:img.shape[1]]

# create the figure
fig = plt.figure()
ax = fig.gca(projection='3d')
# ax.invert_yaxis()
ax.invert_xaxis()

ax.plot_surface(xx, yy, img,rstride=1, cstride=1, cmap=plt.cm.gray,linewidth=0) #plt.cm.jet
ax.set_zlabel("图像灰度值")
ax.set_xlabel('图像2宽度/(像素)')
ax.set_ylabel('图像2高度/(像素)')
ax.set_ylim(bottom=0)#y轴从0开始
ax.set_zlim(bottom=0)#z轴从0开始
# plt.xlabel("图像1宽度/(像素)", size=10)
# plt.ylabel("图像1高度/(像素)", size=10)
# plt.tick_params(direction='in')  # 刻度向里
plt.rcParams['xtick.direction']='in'
# plt.rcParams['ytick.direction']='in'
# figsize(8, 4) # 设置 figsize
# plt.rcParams['savefig.dpi'] = 600 #图片像素

# plt.rcParams['figure.dpi'] = 600 #分辨率
# plt.savefig('img/3D-1-2.jpg')
#2、保存图片的大小
fig.set_size_inches(6, 6)  #设置保存图片的尺寸
plt.savefig('img/3D-1-2.jpg', dpi=600,bbox_inches='tight')
#bbox_inches使生成的图片周围的空白缩小
#在 plt.show() 之前调用 plt.savefig(),否则出现空白
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()# 销毁所有窗口

三维坐标的和二维还是有区别的。

 五、双y轴的应用

关键的代码:

# plt.xticks(x, x, rotation=45)#横坐标刻度旋转45度
plt.xticks([])#不显示横坐标刻度
plt.xlim([0.5, 4.5]) #横坐标范围
plt.ylim([0, 1]) #坐标范围


plt.xlabel(u"原始图像              MSRCR              CALHE            本文算法")  # X轴标签
plt.title("不同算法的评价指标值的变化")  # 标题

# plt.plot(greyScale_map, color='r')
plt.tick_params(direction='in')  # 刻度向里

# 绘制另一Y轴
plt.twinx()
plt.plot(x, y1, marker='*',  mec='g', mfc='w', ms=10,label=u'信息熵曲线图')
plt.plot(x1, y4, marker='.', ms=10, label=u'PSNR曲线图')

  • 24
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彩色面团儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值