• python绘图技巧(高清图)


    一、绘制普通的多线图。

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

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

    2、中文乱码

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

    1. import cv2
    2. from pylab import * # 支持中文
    3. mpl.rcParams['font.sans-serif'] = ['SimHei']
    4. img2 = cv2.imread("img/fenge-1-1.jpg")
    5. img4 = cv2.imread("img/fenge-1-1-0.06.jpg")
    6. img5 = cv2.imread("img/fenge-1-1-0.02.jpg")
    7. img6 = cv2.imread("img/fenge-1-1-0.1.jpg")
    8. img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)
    9. h1, s, img2 = cv2.split(img2) # 看单通道的
    10. img_array2 = np.array(img2) # 把图像转成数组格式img = np.asarray(image)
    11. mean2 = np.average(img_array2, axis=0) # 按列求均值
    12. img4 = cv2.cvtColor(img4, cv2.COLOR_BGR2HSV)
    13. h1, s, img4 = cv2.split(img4) # 看单通道的
    14. img_array4 = np.array(img4) # 把图像转成数组格式img = np.asarray(image)
    15. mean4 = np.average(img_array4, axis=0) # 按列求均值
    16. img5 = cv2.cvtColor(img5, cv2.COLOR_BGR2HSV)
    17. h1, s, img5 = cv2.split(img5) # 看单通道的
    18. img_array5 = np.array(img5) # 把图像转成数组格式img = np.asarray(image)
    19. mean5 = np.average(img_array5, axis=0) # 按列求均值
    20. img6 = cv2.cvtColor(img6, cv2.COLOR_BGR2HSV)
    21. h1, s, img6 = cv2.split(img6) # 看单通道的
    22. img_array6 = np.array(img6) # 把图像转成数组格式img = np.asarray(image)
    23. mean6 = np.average(img_array6, axis=0) # 按列求均值
    24. # plt.plot(mean2,c="g",label=u'a=std/(255*2)')
    25. # plt.plot(mean4,linestyle=":",c="r",label=u'a=0.06')
    26. # plt.plot(mean5,linestyle="-.",c="b",label=u'a=0.02')
    27. # plt.plot(mean6,linestyle="--",c="k",label=u'a=0.1')
    28. plt.plot(mean2,linewidth=1,c="g",label=u'a=std/(255*2)')
    29. plt.plot(mean4,linewidth=1,linestyle=":",c="r",label=u'a=0.06')
    30. plt.plot(mean5,linewidth=1,linestyle="--",c="b",label=u'a=0.02')
    31. plt.plot(mean6,linewidth=1,linestyle="-.",c="darkorange",label=u'a=0.1')
    32. plt.legend(loc='upper right',prop={'family':'SimHei','size':9}) # 让图例生效
    33. # plt.legend(loc='upper right',size=5) # 让图例生效lower
    34. plt.tick_params(direction='in') # 刻度向里
    35. plt.xlim([0, 255]) # 横坐标范围
    36. plt.ylim([100, 150]) # 横坐标范围
    37. plt.ylim([100, 150]) # 横坐标范围
    38. # plt.grid(True) ##增加格点
    39. plt.axis('tight') # 坐标轴适应数据量 axis 设置坐标轴
    40. plt.xlabel("图像1宽度/(像素)", size=10)
    41. plt.ylabel("列平均灰度值", size=10)
    42. # plt.title("a不同取值的L*(x,y)的一维曲线图") # 标题
    43. #方法一
    44. # plt.rcParams['savefig.dpi'] = 800 #图片像素
    45. # #
    46. # # plt.rcParams['figure.dpi'] = 800 #分辨率
    47. # #
    48. # # # plt.axis('off')可以去坐标轴
    49. # # plt.savefig('img/name-2.jpg')
    50. # 方法二
    51. #可以直接设置保存好的图的清晰度,大小
    52. # plt.set_size_inches(6, 6) #设置保存图片的尺寸
    53. plt.savefig('img/name-1.jpg', dpi=800,bbox_inches='tight')
    54. #bbox_inches使生成的图片周围的空白缩小
    55. #在 plt.show() 之前调用 plt.savefig(),否则出现空白
    56. plt.show()
    57. cv2.waitKey(0)
    58. 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图(秀一下)

    1. import cv2
    2. from pylab import * # 支持中文
    3. mpl.rcParams['font.sans-serif'] = ['SimHei']
    4. from IPython.core.pylabtools import figsize # import figsize
    5. img = cv2.imread("img/1-2.jpg", 0)
    6. # print(img.shape)#可以查看是200*200 3通道还是单通道
    7. cv2.imshow('img',img)
    8. height, width= img.shape[:2]
    9. print(height, width)
    10. img = cv2.resize(img, (height,width))
    11. xx, yy = np.mgrid[0:img.shape[0], 0:img.shape[1]]
    12. # create the figure
    13. fig = plt.figure()
    14. ax = fig.gca(projection='3d')
    15. # ax.invert_yaxis()
    16. ax.invert_xaxis()
    17. ax.plot_surface(xx, yy, img,rstride=1, cstride=1, cmap=plt.cm.gray,linewidth=0) #plt.cm.jet
    18. ax.set_zlabel("图像灰度值")
    19. ax.set_xlabel('图像2宽度/(像素)')
    20. ax.set_ylabel('图像2高度/(像素)')
    21. ax.set_ylim(bottom=0)#y轴从0开始
    22. ax.set_zlim(bottom=0)#z轴从0开始
    23. # plt.xlabel("图像1宽度/(像素)", size=10)
    24. # plt.ylabel("图像1高度/(像素)", size=10)
    25. # plt.tick_params(direction='in') # 刻度向里
    26. plt.rcParams['xtick.direction']='in'
    27. # plt.rcParams['ytick.direction']='in'
    28. # figsize(8, 4) # 设置 figsize
    29. # plt.rcParams['savefig.dpi'] = 600 #图片像素
    30. # plt.rcParams['figure.dpi'] = 600 #分辨率
    31. # plt.savefig('img/3D-1-2.jpg')
    32. #2、保存图片的大小
    33. fig.set_size_inches(6, 6) #设置保存图片的尺寸
    34. plt.savefig('img/3D-1-2.jpg', dpi=600,bbox_inches='tight')
    35. #bbox_inches使生成的图片周围的空白缩小
    36. #在 plt.show() 之前调用 plt.savefig(),否则出现空白
    37. plt.show()
    38. cv2.waitKey()
    39. cv2.destroyAllWindows()# 销毁所有窗口

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

     五、双y轴的应用

    关键的代码:

    1. # plt.xticks(x, x, rotation=45)#横坐标刻度旋转45度
    2. plt.xticks([])#不显示横坐标刻度
    3. plt.xlim([0.5, 4.5]) #横坐标范围
    4. plt.ylim([0, 1]) #坐标范围
    5. plt.xlabel(u"原始图像 MSRCR CALHE 本文算法") # X轴标签
    6. plt.title("不同算法的评价指标值的变化") # 标题
    7. # plt.plot(greyScale_map, color='r')
    8. plt.tick_params(direction='in') # 刻度向里
    9. # 绘制另一Y轴
    10. plt.twinx()
    11. plt.plot(x, y1, marker='*', mec='g', mfc='w', ms=10,label=u'信息熵曲线图')
    12. plt.plot(x1, y4, marker='.', ms=10, label=u'PSNR曲线图')

     

     

  • 相关阅读:
    荧光素标记氨基酸,异硫氰酸荧光素FITC标记D-天冬氨酸;FITC-D-Aspartic acid
    Matlab如何导入Excel数据并进行FFT变换
    【Hadoop】关于Yarn的一些学习笔记(Hadoop权威指南读书笔记等)
    zookeeper选举机制详解
    【博客446】ovs控制工具的区别和使用
    如何在 SAP Spartacus 中编写 ASM-Compatible 的代码
    数据分析 -- numpy
    什么是关系数据库,你知道吗?
    Nginx自签名证书的配置
    LNMP架构介绍及配置--部署Discuz社区论坛与wordpress博客
  • 原文地址:https://blog.csdn.net/m0_63172128/article/details/126268154