写在前面
本文是在实验过程中进行简单数据处理时,使用的部分画图程序,涉及折线图、散点图、直方图。所用数据均保存在txt文档中。在函数使用过程中也曾遇到问题,这里的程序是测试可用的, 或可作为借鉴。

环境

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit as cf
import matplotlib.ticker as ticker

折线图和图中箭头

数据读取

path = 'D:/python_result/Calibration/'
inch3 = open(path + '3-inch.txt')
font = {'weight': 'normal', 'size': 30} # 字体
inch3.readline().split()

用到的数据在txt文档里按行存储,一行是一组数据,并且每相邻两行数据是一样的。

['0.378375','0.3795','0.3840625','0.3799375','0.364625','0.358625','0.34175','0.339125','0.3423125','0.353','0.3696875']

画图

画图过程简单,只是选取数据plot就好

x = [0, -7, -24, -40, -50, -59.5, -70, -80, -108.2, -131.8, -146.8]
label = [20, 13, -4, -20, -30, -39.5, -50, -50, -21.8, 1.8, 16.8]
fig = plt.figure(figsize=(20, 12))
ax = fig.add_subplot(1, 1, 1)
for tmp in inch3.readlines():tmp = list(map(float, tmp.split()))if i % 2 == 0:plt.plot(x, tmp, linewidth=1.5, marker='o', markersize=10)i += 1
plt.plot([-70, -70], [-0.5, 1.1], color='blue', linewidth=2.5, linestyle='--')
plt.plot([-80, -80], [-0.5, 1.1], color='red', linewidth=2.5, linestyle='--')

这是调整参数之前的效果,可以看出来x,y轴的范围以及坐标轴上ticks的大小都要调整

设置图像参数

参数实际上是在图已经画出来之后调整的,依据需要的效果

ax.set_xlabel(r'$^\circ$C', font) # x轴label,font是之前声明的字体属性
ax.set_ylabel(r'Gain of 3-inch PMTs ($1\times10^7$)', font) # y轴label
plt.tick_params(labelsize=30) # 坐标轴ticks的字体大小
plt.grid(linestyle='--') # figure中的网格线
plt.xlim(5, -150) # x轴范围
plt.ylim(0.2, 0.85) # y轴范围
plt.xticks(x, label) # 修改x轴的ticks

这是调整参数之后的效果

根据需要在图中添加箭头

为了更好的说明图中展示的数据,需要在其中加上箭头以及文字说明,用到的是matplotlib.pyplot.annotate函数,可以点击查看其参数说明。不过使用过程中发现,xytext参数,也就是设置文本显示坐标的参数,其坐标单位和图中的坐标并不匹配,因此是不断修改尝试而得到想要的结果的。

ax.annotate('Cooling process', xy=(-70, 0.506),xytext=(0.25, 0.45), textcoords='axes fraction',arrowprops=dict(facecolor='blue', shrink=0.05),fontsize=25,horizontalalignment='center', verticalalignment='bottom')
ax.annotate('', xy=(-18, 0.506),xytext=(0, 0.47), textcoords='axes fraction',arrowprops=dict(facecolor='blue', shrink=0.05),fontsize=25,horizontalalignment='center', verticalalignment='bottom')
ax.annotate('Heating process', xy=(-150, 0.506),xytext=(0.75, 0.45), textcoords='axes fraction',arrowprops=dict(facecolor='red', shrink=0.05),fontsize=25,horizontalalignment='center', verticalalignment='bottom')
ax.annotate('', xy=(-96, 0.506),xytext=(0.55, 0.47), textcoords='axes fraction',arrowprops=dict(facecolor='red', shrink=0.05),fontsize=25,horizontalalignment='center', verticalalignment='bottom')

加上箭头以及文字说明的效果

至此完成。

散点图

数据读取

path = 'D:/python_result/'
hv1_1 = np.loadtxt(path + 'HV1_1.txt', encoding='utf-8', delimiter='\t')
hv2_1 = np.loadtxt(path + 'HV2_1.txt', encoding='utf-8', delimiter='\t')
hv3_1 = np.loadtxt(path + 'HV3_1.txt', encoding='utf-8', delimiter='\t')
date = np.loadtxt(path + 'Date_1.txt', encoding='utf-8', delimiter='\t', dtype=str).astype(str)
font = {'weight': 'normal', 'size': 30} # 字体

hv1_1长这样

date长这样

画图

散点图选择数据scatter就好

fig = plt.figure(figsize=(20, 12))
ax = fig.add_subplot(1, 1, 1)
ax.scatter(date, hv1_1, s=30, c='r', marker='.', label='PMTID 80010', linewidth=3)
ax.scatter(date, hv2_1, s=30, c='b', marker='.', label='PMTID 80061', linewidth=3)
ax.scatter(date, hv3_1, s=30, c='k', marker='.', label='PMTID 80064', linewidth=3)

此时的图长这样,横坐标是日期信息,太密了,什么都看不出来,并且有三组信息但是缺少legend,还有坐标轴范围和ticks的字体大小需要调整

设置图像参数

将之前的图像添加了坐标轴的label、网格线、legend,并修改了坐标轴范围、坐标轴ticks的字体大小和横坐标的疏密度

ax.set_xlabel('Date', font)
ax.set_ylabel('HV / V', font)
plt.tick_params(labelsize=30)
ax.xaxis.set_major_locator(ticker.MultipleLocator(68)) # 用来修改横坐标的疏密度
plt.legend(prop=font, loc='upper right')
plt.ylim(900, 1350)
plt.grid(linestyle='--')

此时的样子

直方图和拟合

数据获取

这里的直方图使用的数据和前面的散点图是同样的

path = 'D:/python_result/'
hv1_1 = np.loadtxt(path + 'HV1_1.txt', encoding='utf-8', delimiter='\t')
hv2_1 = np.loadtxt(path + 'HV2_1.txt', encoding='utf-8', delimiter='\t')
hv3_1 = np.loadtxt(path + 'HV3_1.txt', encoding='utf-8', delimiter='\t')
date = np.loadtxt(path + 'Date_1.txt', encoding='utf-8', delimiter='\t', dtype=str).astype(str)

画图

使用hist画图

fig = plt.figure(figsize=(20, 12))
ax = fig.add_subplot(1, 1, 1)
mu = np.mean(hv1_1)
sigma = np.std(hv1_1)
par1 = ax.hist(hv1_1, **params, color='r', label='$\mathrm{PMTID\ 80010}$\n$Mean=%.1f$\n$RMS=%.1f$' % (mu, sigma), linewidth=5, range=(1000, 1300))

此时的直方图中,没有legend,没有坐标轴label,坐标轴ticks字体大小不够,并且还为做拟合。

设置图像参数

添加坐标轴label,修改坐标轴ticks字体大小

ax.set_xlabel('HV / V', font)
ax.set_ylabel('Counts', font)
plt.tick_params(labelsize=30)

拟合并绘制拟合图像

使用的拟合函数是高斯函数

def gaussian(x, *param):return param[0]*np.exp(-np.power(x - param[1], 2.) / (2 * np.power(param[2], 2.)))

拟合并获得拟合得到的参数,绘制拟合结果,添加legend。

x = np.linspace(mu - 50, mu + 50, 1000)
# curve_fit的返回值中para是拟合参数,pco是方差-协方差矩阵,可以通过对pco的对角元开方得到拟合参数的标准差作为拟合误差
para, pco = cf(gaussian, par1[1][0: len(par1[0])], par1[0], p0=[70, mu, sigma])
mu = para[1]
sigma = para[2]
plt.legend(labels=['$\mathrm{PMTID\ 80010}$\n$\mu=%.1f$\n$\sigma=%.1f$' % (mu, sigma)], prop=font)
plt.plot(x, gaussian(x, *para), color='orange', linewidth=3)

待续

python中的折线图、散点图、直方图绘制和图像参数设置相关推荐

  1. python中画折线图不同颜色的两段_matplotlib绘制精美的折线图——另附颜色、形状查找表...

    0 配置及环境 系统: win7 x64 python: 3.64 x64 包: matplotlib.numpy 本文主要是讲述如何利用python的matplotlib包来绘制精美的折线图,包括绘 ...

  2. python中画折线图要用什么库_python画最最简单的折线图

    原博文 2018-05-03 14:58 − # encoding=utf-8import matplotlib.pyplot as pltfrom pylab import * #支持中文mpl.r ...

  3. python做动态折线图_Python数据可视化 pyecharts实现各种统计图表过程详解

    1.pyecharts介绍 Echarts是一款由百度公司开发的开源数据可视化JS库,pyecharts是一款使用python调用echarts生成数据可视化的类库,可实现柱状图,折线图,饼状图,地图 ...

  4. R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  5. python 画蜘蛛_R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)...

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  6. Matplotlib【学习大礼包】数据可视化基础 掌获绘图基础语法与常用参数、设置pyplot的动态rc参数、 绘制散点图、折线图、直方图、饼图

    文章目录 如何查看完整版!!(代码+图片) 第3章 Matplotlib 数据可视化基础 3.1 掌获绘图基础语法与常用参数 3.1.1 掌获pyplot基础语法 1.创建画布与创建子图 2.添加画布 ...

  7. 一篇文章让你学会绘画十一种常见数据分析图(折线图,直方图,散点图,雷达图等等)

    本篇博文主要内容ython Pyplot中的十一个常用绘图,包括参数说明,代码,运行结果. 有问题可以+Q180096010一起交流学习~ 目录 1. 折线图 plt.plot绘制折线图代码展示: 2 ...

  8. 第五章. 可视化数据分析图表—Seaborn图表(折线图,直方图,条形图,散点图)

    第五章. 可视化数据分析图 5.7 Seaborn图表 Seaborn是一个基于Matplotlib的高级可视化效果库,偏向于统计图表,主要针对的是数据挖掘和机器学习中的变量特征选取,相比Matplo ...

  9. 数据分析入门之Matplotlib数据可视化基础(散点图、折线图、直方图、饼图、箱线图)

    文章目录 1.掌握pyplot基础语法 1.1.基本绘图流程 1.2.创建画布与创建子图 1.2.1.设置画布大小 1.2.2.添加图列 1.2.3.解决中文乱码 1.3.添加画布内容 1.4.保存与 ...

最新文章

  1. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
  2. 用 Flask 来写个轻博客 (23) — 应用 OAuth 来实现 Facebook 第三方登录
  3. weblogic java虚拟机_weblogic server 性能及调优-调优 java 虚拟机.doc
  4. 大势至电脑文件防泄密软件_有了数据防泄密软件,还会担心企业文件泄漏吗?...
  5. 特征选择---文本分类:叉方统计量
  6. UVa11137 Ingenuous Cubrency
  7. 研究生导师一般希望招什么样的研究生?
  8. Python学习教程(Python学习路线):Python3你还未get到的隐藏技能
  9. 前端对UI设计的特殊字体的处理
  10. 操作系统-高响应比优先调度算法
  11. 存档修改 html,制作可以修改.rpgsave存档的网页
  12. 前门狗不理双人餐一份 - 北京团购网|京东团购
  13. chapter2:正则表达式、文本标准化和编辑距离
  14. 5年后端WEB开发者的开机必备软件(md版本)
  15. 005 偶数分频,奇数分频,倍频
  16. 平板触控笔有哪些用途?超高性价比的触控笔推荐
  17. Redis—击穿、穿透、雪崩
  18. 内容非常全面,细节爆炸
  19. 基于Centos环境使用宝塔面板,搭建nextcloud
  20. 人人开源renren-fast-vue

热门文章

  1. 中国男人到底配不配得上中国…
  2. 设计模式学习之访问者模式
  3. android版本内存多少,内存大小决定Android系统版本?
  4. mmkv原理,Android多进程从头讲到尾,成功定级腾讯T3-2
  5. NickLee的学习demo(父子列表清单)
  6. 考试 倒计时 php,PHP实现考试倒计时功能代码
  7. ICS课程学习(1)——概述
  8. html5互动场景制作系统,春哥技术博客高仿易企秀H5场景应用制作平台源码V1.0正式版发布...
  9. 怎样才能压缩PDF文件大小
  10. 泰坦尼克号数据挖掘项目实战——Task1 数据分析