欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Python绘图数据可视化

时间:2023-05-21
Python绘图 数据可视化

绘图基础知识

PyLabPyplot 科研绘图格式设置
本文旨在介绍Python绘图的基本知识,通过介绍绘图基础知识并具体列举三种常用的绘图工具来帮助读者了解绘图工具的适用。在文末笔者给出了科研绘图的一般格式以供参考。 绘图基础知识

画板figure,画纸Sublpot画纸上最上方是标题title坐标轴Axis图例Legend网格Grid点 Markers

绘图类型

函数名称描述Bar绘制条形图Barh绘制水平条形图Boxplot绘制箱型图Hist绘制直方图his2d绘制2D直方图Pie绘制饼状图Plot在坐标轴上画线或者标记Polar绘制极坐标图Scatter绘制x与y的散点图Stackplot绘制堆叠图Stem用来绘制二维离散数据绘制(又称为“火柴图”)Step绘制阶梯图Quiver绘制一个二维按箭头

接下来,我们对Python中最常适用的三种绘图工具进行介绍。

Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy 数组来绘制 2D 图像,其使用简单、代码清晰易懂。

PyLab

PyLab 是一个面向 Matplotlib 的绘图库接口,其语法和 MATLAB 十分相近。它和 Pyplot 模快都够实现 Matplotlib 的绘图功能。

import numpyimport pylab x = numpy.linspace(-3, 3, 30)y = x**2pylab.plot(x, y)pylab.show()

from pylab import * # 使用此方法导入的库 其函数前不需再加库名plot(x, sin(x))plot(x, cos(x), 'r-')plot(x, -sin(x), 'g--')show()

Pyplot

在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)。

Matplotlib 提供了matplotlib.figure图形类模块,它包含了创建图形对象的方法。通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。如下所示:

基础案例

# 导入matplotlib的pyplot模块import matplotlib.pyplot as plt# 第一步:定义x和y坐标轴上的点x = [1,2,3,4]y = [1,4,9,16]# 第二步:使用plot绘制线条 第1个参数是x的坐标值 第2个参数是y的坐标值plt.plot(x,y)# 第三步:显示图形plt.show()

绘图属性设置

'''color:线条颜色marker:点的形状linestyle:线条形状axis:坐标轴范围'''plt.plot(x,y,color='r',marker='o',linestyle='dashed')# plt.plot(x,y,'ro')plt.axis([0,6,0,20])plt.show()

添加文字

# 在绘图时在plt.plot(x,y)语句后可添加文字说明plt.xlabel('x-label') # x轴plt.ylabel('y-label') # y轴plt.title('title') # 标题

绘制正弦图像

from matplotlib import pyplot as pltimport numpy as npimport math# 调用math.pi方法弧度转为角度x = np.arange(0, math.pi*2, 0.05)y = np.sin(x)plt.plot(x,y)plt.xlabel("angle")plt.ylabel("sine")plt.title('sine wave')# 使用show展示图像plt.show()

描点

import matplotlib.pyplot as pltimport numpy as npxpoints = np.array([1, 8])ypoints = np.array([3, 10])plt.plot(xpoints, ypoints, 'o')plt.show()

绘制直线

import matplotlib.pyplot as pltimport numpy as npxpoints = np.array([0, 6])ypoints = np.array([0, 100])#xpoints = np.array([1, 2, 6, 8])#ypoints = np.array([3, 8, 1, 10])plt.plot(xpoints, ypoints)plt.show()

绘制正余弦

import matplotlib.pyplot as pltimport numpy as npx = np.arange(0,4*np.pi,0.1) # start,stop,stepy = np.sin(x)z = np.cos(x)plt.plot(x,y,x,z)#plt.plot(x,y,x,z, marker = 'o')plt.show()

格式设置

import numpy as npimport matplotlib.pyplot as pltx = np.array([1, 2, 3, 4])y = np.array([1, 4, 9, 16])plt.plot(x, y)plt.title("RUNOOB TEST TITLE")plt.xlabel("x - label")plt.ylabel("y - label")plt.show()

subplot() 方法绘制多张图

import matplotlib.pyplot as pltimport numpy as np# plot 1:xpoints = np.array([0, 6])ypoints = np.array([0, 100])plt.subplot(1, 2, 1)plt.plot(xpoints,ypoints)plt.title("plot 1")# plot 2:x = np.array([1, 2, 3, 4])y = np.array([1, 4, 9, 16])plt.subplot(1, 2, 2)plt.plot(x,y)plt.title("plot 2")plt.suptitle("RUNOOB subplot Test")plt.show()

import matplotlib.pyplot as pltimport numpy as np# plot 1:x = np.array([0, 6])y = np.array([0, 100])plt.subplot(2, 2, 1)plt.plot(x,y)plt.title("plot 1")# plot 2:x = np.array([1, 2, 3, 4])y = np.array([1, 4, 9, 16])plt.subplot(2, 2, 2)plt.plot(x,y)plt.title("plot 2")# plot 3:x = np.array([1, 2, 3, 4])y = np.array([3, 5, 7, 9])plt.subplot(2, 2, 3)plt.plot(x,y)plt.title("plot 3")# plot 4:x = np.array([1, 2, 3, 4])y = np.array([4, 5, 6, 7])plt.subplot(2, 2, 4)plt.plot(x,y)plt.title("plot 4")plt.suptitle("RUNOOB subplot Test")plt.show()

import matplotlib.pyplot as pltimport numpy as np# 创建一些测试数据x = np.linspace(0, 2*np.pi, 400)y = np.sin(x**2)# 创建一个画像和子图fig, ax = plt.subplots()ax.plot(x, y)ax.set_title('Simple plot')# 创建两个子图 f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)ax1.plot(x, y)ax1.set_title('Sharing Y axis')ax2.scatter(x, y)# 创建四个子图 fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))axs[0, 0].plot(x, y)axs[1, 1].scatter(x, y)plt.show()

scatter() 方法来绘制散点图

import matplotlib.pyplot as pltimport numpy as npx = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])y = np.array([1, 4, 9, 16, 7, 11, 23, 18, 25, 19, 31, 28, 14])plt.scatter(x, y)# 设置图标大小#sizes = np.array([20,50,100,200,500,1000,60,90])#plt.scatter(x, y, s=sizes)# 设置颜色#plt.scatter(x, y, color = '#88c999')# 根据颜色条添加颜色并添加颜色条#colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])#plt.scatter(x, y, c=colors, cmap='afmhot_r') # 根据颜色条添加颜色#plt.colorbar() # 添加颜色条plt.show()

bar() 绘制柱形图

import matplotlib.pyplot as pltimport numpy as npx = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])y = np.array([12, 22, 6, 18])plt.bar(x,y)# 设置柱形图宽度,bar() 方法使用 width 设置,barh() 方法使用 height 设置 height#plt.bar(x, y, width = 0.1)plt.show()

绘制饼图

import matplotlib.pyplot as pltimport numpy as npy = np.array([35, 25, 25, 15])plt.pie(y)# plt.pie(y,# labels=['A','B','C','D'], # 设置饼图标签# colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色# explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远# autopct='%.2f%%', # 格式化输出百分比# )# plt.title("RUNOOB Pie Test") # 设置标题plt.show()

科研绘图

下面笔者给出一种较为全面的绘图程序,读者可自行修改参数适用。

import numpy as npimport matplotlib.pyplot as plt# 可结合Pyhon处理Excel数据部分,使用Excel数据直接绘图x = np.array([1, 2, 3, 4, 5, 6])y1=[1,3,5,7,9,11]y2=[2,8,13,19,22,29]# 设置坐标轴刻度向内plt.rcParams['xtick.direction'] = 'in'plt.rcParams['ytick.direction'] = 'in'plt.rcParams['font.sans-serif']=['Times New Roman'] # 设置全局字体,可选择需要的字体替换掉‘Times New Roman’font1={'family': 'Times New Roman', 'weight': 'light', 'size': 12} # 设置字体模板,font2={'family': 'Times New Roman', 'weight': 'light', 'size': 16} # 设置字体模板,plt.title("Title",fontdict=font2) # 标题plt.plot(x,y1,'r-',lw=1.5,label="theory",marker = 'o') # 红色直线plt.plot(x,y2,'b-',lw=1.5,label="simulation",marker = 'o') # 蓝色直线# plt.plot(x, y1, x, y2, marker = 'o') # 自动线条格式# 设置坐标轴的取值范围plt.xlim((0.5, 6.5))plt.ylim((0, 36))plt.title("Title")plt.minorticks_on() # 副刻度线plt.xlabel('x - label',fontdict=font1)plt.ylabel('y - label',fontdict=font1)plt.legend(loc="upper right",scatterpoints=1,prop=font1,shadow=False,frameon=True) # 添加图例 loc控制图例位置,“best”为最佳位置,“bottom”,"top",“topringt"等plt.ticklabel_format(axis='both',style='sci') # 设置文章风格plt.savefig("example.png",format="png",dpi=600) # 自动保存图片plt.show()

运行结果:

格式设置

颜色(color 简写为 c):蓝色: 'b' (blue)绿色: 'g' (green)红色: 'r' (red)![请添加图片描述](https://img-blog.csdnimg.cn/6457112caf4c42dfba77a64ed2d0b3cc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATW9zdGVyMjQ2OQ==,size_20,color_FFFFFF,t_70,g_se,x_16)蓝绿色(墨绿色): 'c' (cyan)红紫色(洋红): 'm' (magenta)黄色: 'y' (yellow)黑色: 'k' (black)白色: 'w' (white)线型(linestyle 简写为 ls):实线: '-'虚线: '--'虚点线: '-.'点线: ':'点: '.' 点型(标记marker):像素: ','圆形: 'o'上三角: '^'下三角: 'v'左三角: '<'右三角: '>'方形: 's'加号: '+' 叉形: 'x'棱形: 'D'细棱形: 'd'垂直线: '|'水平线: '_'

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。