Python自学笔记——Matplotlib风羽自定义
- 格式:doc
- 大小:51.00 KB
- 文档页数:18
在Python 的数据可视化库Matplotlib 中,figure 函数用于创建新的图形(Figure)。
Figure 是Matplotlib 绘图的最外层容器,它可以包含一个或多个子图(Axes)。
下面是figure 函数的一般用法:import matplotlib.pyplot as plt# 创建一个新的图形(Figure)fig = plt.figure()# 在图形中添加子图(Axes)ax = fig.add_subplot(1, 1, 1)# 在子图中绘制数据ax.plot([1, 2, 3, 4], [10, 20, 25, 30])# 显示图形plt.show()上述代码的步骤解释如下:plt.figure():创建一个新的图形对象,并返回该对象。
可以通过这个对象进行后续的图形设置和操作。
fig.add_subplot(1, 1, 1):在图形中添加一个子图(Axes)。
参数(1, 1, 1) 表示将图形分割成1 行1 列,当前子图是第 1 个(唯一一个)。
ax.plot([1, 2, 3, 4], [10, 20, 25, 30]):在子图中使用plot 函数绘制数据。
这里绘制了一个简单的折线图。
plt.show():显示图形。
此行代码在脚本的最后调用,将之前创建的图形展示在屏幕上。
需要注意的是,Matplotlib 中的figure 函数还有一些可选参数,可以用于设置图形的大小、分辨率等属性。
例如:fig = plt.figure(figsize=(8, 6), dpi=100)这里的figsize 设置图形的宽度和高度,dpi 设置图形的分辨率。
这些参数可以根据具体需求进行调整。
总体而言,figure 函数是Matplotlib 中创建图形的基础,通过它可以实现对图形的各种设置和定制。
Python3matplotlib的绘图函数subplot()简介Python3 matplotlib的绘图函数subplot()简介⼀、简介matplotlib下, ⼀个Figure对象可以包含多个⼦图(Axes), 可以使⽤subplot()快速绘制, 其调⽤形式如下 :subplot(numRows, numCols, plotNum)图表的整个绘图区域被分成numRows⾏和numCols列然后按照从左到右,从上到下的顺序对每个⼦区域进⾏编号,左上的⼦区域的编号为1plotNum参数指定创建的Axes对象所在的区域如果numRows = 2, numCols = 3, 那整个绘制图表样式为2X3的图⽚区域, ⽤坐标表⽰为:(1, 1), (1, 2), (1, 3)(2, 1), (2, 2), (2, 3)这时, 当plotNum = 3时, 表⽰的坐标为(1, 3), 即第⼀⾏第三列的⼦图如果numRows, numCols和plotNum这三个数都⼩于10的话, 可以把它们缩写为⼀个整数, 例如subplot(323)和subplot(3,2,3)是相同的.subplot在plotNum指定的区域中创建⼀个轴对象. 如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除.⼆、参数说明1,subplots()参数matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)创建⼀个画像(figure)和⼀组⼦图(subplots)。
这个实⽤程序包装器可以⽅便地在单个调⽤中创建⼦图的公共布局,包括封闭的图形对象。
输⼊参数说明: nrows,ncols:整型,可选参数,默认为1。
表⽰⼦图⽹格(grid)的⾏数与列数。
Python可视化Matplotlib-K线图引⼊类库import matplotlib as mplimport tushare as tsimport matplotlib.pyplot as pltimport matplotlib.finance as mpffrom matplotlib import rcfrom matplotlib.pylab import date2numfrom datetime import datetime, timedelta设置取k线的时间today = datetime.now().strftime('%Y-%m-%d')before = (datetime.now() - timedelta(days = 120)).strftime('%Y-%m-%d') #120⾃然⽇,⼤概80个交易⽇获取⾏情数据#获取⾏情数据,格式: pandas.core.frame.DataFramecode = '000063'tsla_df = ts.get_k_data(code, start = before, end = today)# print(tsla_df)'''蜡烛图的⽇期,不⽀持普通的YYYY-MM-DD格式要使⽤matplotlib.finance.date2num进⾏转换为特有的数字值'''qutotes = []for _, (d, o, c, h, l) in enumerate(zip(tsla_df.date, tsla_df.open, tsla_df.close, tsla_df.high, tsla_df.low)):d = mpf.date2num(datetime.strptime(d,'%Y-%m-%d'))# ⽇期,开盘,收盘,最⾼,最低组成tuple对象valval = (d, o, h, l, c)# 加val加⼊qutotesqutotes.append(val)fig, ax = plt.subplots(figsize=(15,5)) #设置图⽚⼤⼩fig.subplots_adjust(bottom=0.5) #调整画框的位置,⽤来消除⽩边ax.xaxis_date() # X轴的刻度为⽇期plt.xticks(rotation=45) # 设置⽇期刻度旋转的⾓度plt.title(code) # 设置图⽚标题plt.xlabel('Date') # 设置X轴标题plt.ylabel('Price') # 设置Y轴标题plt.grid(True) # 显⽰⽹格mpf.candlestick_ohlc(ax, qutotes, width=0.6, colorup='g', colordown='r', alpha=1.0)plt.show()。
Python——⽓象数据分析将对意⼤利北部沿海地区的⽓象数据进⾏分析与可视化。
我们在实验过程中先会运⽤ Python 中 matplotlib 库的对数据进⾏图表化处理,然后调⽤ scikit-learn 库当中的的 SVM 库对数据进⾏回归分析,最终在图表分析的⽀持下得出我们的结论。
笔记来源的第 2 章知识点matplotlib 库画出图像scikit-learn 库对数据进⾏回归分析numpy 库对数据进⾏切⽚原理⽓象数据是在⽹上很容易找到的⼀类数据。
很多⽹站都提供以往的⽓压、⽓温、湿度和降⾬量等⽓象数据。
只需指定位置和⽇期,就能获取⼀个⽓象数据⽂件。
这些测量数据是由⽓象站收集的。
⽓象数据这类数据源涵盖的信息范围较⼴。
数据分析的⽬的是把原始数据转化为信息,再把信息转化为知识,因此拿⽓象数据作为数据分析的对象来讲解数据分析全过程再合适不过。
待检验的假设:靠海对⽓候的影响写作本章时,虽正值夏初,却已酷热难耐,住在⼤城市的⼈感受更为强烈。
于是周末很多⼈到⼭村或海滨城市去游玩,放松⼀下⾝⼼,远离内陆城市的闷热天⽓。
我常常想,靠海对⽓候有什么影响?这个问题可以作为数据分析的⼀个不错的出发点。
我不想把本章写成科学类读物,只是想借助这样⼀种⽅式,让数据分析爱好者能够把所学⽤于实践,解决 “海洋对⼀个地区的⽓候有何影响” 这个问题。
研究系统:亚得⾥亚海和波河流域既然已定义好问题,就需要寻找适合研究数据的系统,提供适合回答这个问题的环境。
⾸先,需要找到⼀⽚海域供你研究。
我住在意⼤利,可选择的海有很多,因为意⼤利是⼀个被海洋包围的半岛国家。
为什么要把⾃⼰的选择局限在意⼤利呢?因为我们所研究的问题刚好和意⼤利⼈的⼀种典⾏为相关,也就是夏天我们喜欢躲在海边,以躲避内陆的酷热。
我不知道在其他国家这种⾏为是否也很普遍,因此我只把⾃⼰熟悉的意⼤利作为⼀个系统进⾏研究。
但是你可能会考虑研究意⼤利的哪个地区呢?上⾯说过,意⼤利是半岛国家,找到可研究的海域不是问题,但是如何衡量海洋对其远近不同的地⽅的影响?这就引出了⼀个⼤问题。
Python——绘图plt.figure()的使⽤1.figure语法及操作(1)figure语法说明figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)1. num:图像编号或名称,数字为编号,字符串为名称2. figsize:指定figure的宽和⾼,单位为英⼨;3. dpi参数指定绘图对象的分辨率,即每英⼨多少个像素,缺省值为80 1英⼨等于2.5cm,A4纸是 21*30cm的纸张4. facecolor:背景颜⾊5. edgecolor:边框颜⾊6. frameon:是否显⽰边框(2)例⼦:import matplotlib.pyplot as plt #创建⾃定义图像fig=plt.figure(figsize=(4,3),facecolor='blue')plt.show()2.subplot创建单个⼦图(1) subplot语法subplot(nrows,ncols,sharex,sharey,subplot_kw,**fig_kw)subplot可以规划figure划分为n个⼦图,但每条subplot命令只会创建⼀个⼦图,参考下⾯例⼦。
(2)例⼦import numpy as npimport matplotlib.pyplot as pltx = np.arange(0, 100)#作图1plt.subplot(221)plt.plot(x, x)#作图2plt.subplot(222)plt.plot(x, -x)#作图3plt.subplot(223)plt.plot(x, x ** 2)plt.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)#作图4plt.subplot(224)plt.plot(x, np.log(x))plt.show()plt.plot(np.random.randn(50).cumsum(), 'k--'3.subplots创建多个⼦图(1)subplots语法subplots参数与subplots相似(2)例⼦import numpy as npimport matplotlib.pyplot as pltx = np.arange(0, 100)#划分⼦图fig,axes=plt.subplots(2,2)ax1=axes[0,0]ax2=axes[0,1]ax3=axes[1,0]ax4=axes[1,1]#作图1ax1.plot(x, x)#作图2ax2.plot(x, -x)#作图3ax3.plot(x, x ** 2)ax3.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)#作图4ax4.plot(x, np.log(x))plt.show()4.⾯向对象API:add_subplots与add_axes新增⼦图或区域add_subplot与add_axes都是⾯对象figure编程的,pyplot api中没有此命令(1)add_subplot新增⼦图add_subplot的参数与subplots的相似import numpy as npimport matplotlib.pyplot as pltx = np.arange(0, 100)#新建figure对象fig=plt.figure()#新建⼦图1ax1=fig.add_subplot(2,2,1)ax1.plot(x, x)#新建⼦图3ax3=fig.add_subplot(2,2,3)ax3.plot(x, x ** 2)ax3.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)#新建⼦图4ax4=fig.add_subplot(2,2,4)ax4.plot(x, np.log(x))plt.show()可以⽤来做⼀些⼦图。
Python利⽤matplotlib绘制折线图的新⼿教程前⾔matplotlib是Python中的⼀个第三⽅库。
主要⽤于开发2D图表,以渐进式、交互式的⽅式实现数据可视化,可以更直观的呈现数据,使数据更具说服⼒。
⼀、安装matplotlibpip install matplotlib -i https:///simple⼆、matplotlib图像简介matplotlib的图像分为三层,容器层、辅助显⽰层和图像层。
1. 容器层主要由Canvas、Figure、Axes组成。
Canvas位于图像的最底层,充当画布的作⽤。
Figure位于Canvas之上,指画布上的⼀整张图像。
Axes位于Figure之上,指Figure中的单个图表,⼀个Figure中可以有⼀个或多个Axes,即⼀张图像中可以有⼀个或多个图表。
2. 辅助显⽰层是单个图表(Axes)中⽤来提供辅助信息的层。
辅助显⽰层主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、⽹格线(grid)、图例(legend)、标题(title)等内容。
辅助层可使图像显⽰更加直观,提⾼可读性。
3. 图像层指Axes内通过plot、scatter、bar、histogram、pie等函数绘制出的图形。
三、matplotlib绘制折线图# coding=utf-8import matplotlib.pyplot as pltplt.figure(figsize=(20, 10), dpi=100)game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3','3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]plt.plot(game, scores)plt.show()运⾏结果:figure(): 创建图像并设置图像的⼤⼩等属性,返回⼀张图像,可以传⼊很多参数,常⽤参数有两个。
Python数据可视化教程之Matplotlib实现各种图表实例前⾔数据分析就是将数据以各种图表的形式展现给领导,供领导做决策⽤,因此熟练掌握饼图、柱状图、线图等图表制作是⼀个数据分析师必备的技能。
Python有两个⽐较出⾊的图表制作框架,分别是Matplotlib和Pyechart。
本⽂主要讲述使⽤Matplotlib制作各种数据图表。
Matplotlib是最流⾏的⽤于绘制2D数据图表的Python库,能够在各种平台上使⽤,可以绘制散点图、柱状图、饼图等。
1、柱状图是⼀种以长⽅形或长⽅体的⾼度为变量的表达图形的统计报告图,由⼀系列⾼度不等的纵向条纹表⽰数据分布的情况,⽤来⽐较两个或以上的价值(不同时间或者不同条件),只有⼀个变量,通常利⽤于较⼩的数据集分析。
柱状图可以⽤来⽐较数据之间的多少,可以⽤来观察某⼀事件的变化趋势,柱状图亦可横向排列,或⽤多维⽅式表达。
实现代码:# 导⼊绘图模块import matplotlib.pyplot as plt# 构建数据sales = [7125,12753,13143,8635]# 中⽂乱码的处理,rcParams也可以⽤于设置图的分辨率,⼤⼩等信息plt.rcParams['font.sans-serif'] =['SimHei']plt.rcParams['axes.unicode_minus'] = False# 绘图,第⼀个参数是x轴的数据,第⼆个参数是y轴的数据,第三个参数是柱⼦的⼤⼩,默认值是1(值在0到1之间),color是柱⼦的颜⾊,alpha是柱⼦的透明度plt.bar(range(4), sales, 0.4,color='r', alpha = 0.8)# 添加轴标签plt.ylabel('销量')# 添加标题plt.title('⽔果2018年度销量')# 添加刻度标签plt.xticks(range(4),['苹果','⾹蕉','梨','猕猴桃'])# 设置Y轴的刻度范围plt.ylim([5000,15000])# 为每个条形图添加数值标签for x,y in enumerate(sales):plt.text(x,y+100,'%s' %y,ha='center')# 显⽰图形plt.show()效果图:只需绘制柱状图的函数bar()改成barh()就可以将柱状图长⽅形或长⽅体从垂直⽅向变为⽔平⽅向。
python画图(线条颜⾊、⼤⼩、类型:点、虚线等)(图⽂详细⼊门教程四)初衷本⼈由于平常写论⽂需要输出⼀些结果图,但是苦于在⽹上搜python画图时,详细的教程⾮常多,但是就是找不到能马上解决⾃⼰问题那⼀⾏代码,所以打算写⼀些适合需求简单的朋友应急⽤的教程,应急就必须⽅便搜索,所以我把主要的内容写在了标题,⽅便⼤家到主页查找对应的功能,教程⾥有对应的效果图,⽅便查看,希望可以帮助到有需要的朋友。
说明本教程的效果图是在jupyter notebook完成。
教程是接着之前的效果图完成的,对应会有关键代码,完整代码会附在最后线条颜⾊设置⽐如此处我需要把我图中两根线设置为绿⾊和蓝⾊,关键代码:plt.plot(x,list1,label='list1',color='g')#添加color设置线条颜⾊plt.plot(x,list2,label='list2',color='b')线条⼤⼩⽐如设置蓝线粗⼀些,绿线细⼀些,关键代码:plt.plot(x,list1,label='list1',color='g',linewidth=1)#添加linewidth设置线条⼤⼩plt.plot(x,list2,label='list2',color='b',linewidth=5)线条类型⽐如设置蓝线⽤虚线表⽰,绿线⽤点线表⽰,关键代码:plt.plot(x,list1,label='list1',color='g',linewidth=2,linestyle=':')#添加linestyle设置线条类型plt.plot(x,list2,label='list2',color='b',linewidth=5,linestyle='--')完整代码import matplotlib.pyplot as pltimport numpy as nplist1=[1,2,3,4,5,6,2,3,4,6,7,5,7]list2=[2,3,4,5,8,9,2,1,3,4,5,2,4]plt.rcParams['font.sans-serif']=['SimHei'] #⽤来正常显⽰中⽂标签plt.title('显⽰中⽂标题')plt.xlabel("横坐标")plt.ylabel("纵坐标")x=np.arange(0,len(list1))+1x[0]=1my_x_ticks = np.arange(1, 14, 1)plt.xticks(my_x_ticks)plt.plot(x,list1,label='list1',color='g',linewidth=2,linestyle=':')#添加linestyle设置线条类型plt.plot(x,list2,label='list2',color='b',linewidth=5,linestyle='--')plt.legend()plt.grid()#添加⽹格plt.show()补充内容matplotlib颜⾊表替换上⽂对应的代码即可matplotlib线段类型⼤全后记教程可以理解为matplotlib包的使⽤教程,刚接触python画图时,有些画图的术语不太了解,所以搜资料的时候容易⾛很多弯路,本教程只是⼀个⼊门教程,通过效果图,来帮助⼤家判断对应的⽅法是不是就是⾃⼰需要的那个。
Python中的数据可视化技术Python是一种高级通用编程语言,它具有简单易学,可扩展性强、可移植性强等优点。
除了数据处理和分析外,它在数据可视化方面也表现出色。
这篇文章将会介绍Python中的数据可视化技术,具体内容包括以下几个方面。
一、MatplotlibMatplotlib是Python中最流行的数据可视化工具,它是一个功能强大而又灵活的绘图库,可以创建各种二维图形,如折线、散点、柱状图等。
色彩、线型、字体大小等都可以自定义,而且它可以集成到Python程序中,并且与NumPy、SciPy等科学计算库很好地协同。
以下是使用Matplotlib绘制line plot的示例代码:```pythonimport matplotlib.pyplot as pltimport numpy as np# 创建数据x = np.linspace(-5,5,100)# 计算函数值y = np.sin(x)# 绘制图形plt.plot(x, y)# 显示图形plt.show()```二、SeabornSeaborn是基于Matplotlib的数据可视化库,它提供了各种高级统计图表,如分布图、分类图、热力图等,同时还支持在Matplotlib图表中使用更好的颜色、标签和标度等。
它的界面更加友好,使用起来更加方便。
以下是使用Seaborn绘制heatmap的示例代码:```pythonimport numpy as npimport seaborn as sns# 创建数据data = np.random.randn(10, 15)# 绘制图形sns.heatmap(data, cmap="RdBu")# 显示图形plt.show()```三、PlotlyPlotly是一款交互式的数据可视化库,可以生成各种静态和动态的图表,并支持在线保存和分享。
它支持Python和其他编程语言,可以制作3D图表、动态散点图、地图等。
python中θ符号怎么打出来_pythonplt可视化——打印特殊符号和制作图例代码在Python中,可以使用Unicode编码来打印特殊符号。
符号"θ"在Unicode中的编码为 "\u03b8"。
可以使用如下代码来打印出"θ":```pythonprint('\u03b8')```对于plt可视化,可以使用Matplotlib库来制作图例。
Matplotlib 是一个用于绘制2D图表和图形的Python库。
首先,我们需要安装Matplotlib库。
可以使用以下命令来安装它:```pip install matplotlib```安装完成后,我们可以使用以下代码来制作一个简单的图例:```pythonimport matplotlib.pyplot as plt#创建数据x=[1,2,3,4,5]y=[1,4,9,16,25]#绘制折线图plt.plot(x, y)#添加图例plt.legend(['Line'])#显示图形plt.show```这段代码首先创建了两个列表x和y,然后使用`plt.plot(x, y)`函数绘制了一个折线图。
接下来使用`plt.legend(['Line'])`函数添加了一个图例,图例的内容是"Line"。
最后使用`plt.show(`函数来显示图形。
除了这种简单的图例,Matplotlib还提供了更多的自定义选项,可以根据具体的需求进行设置。
以下是一个更复杂的示例代码,展示了一些常见的图例自定义选项:```pythonimport matplotlib.pyplot as plt#创建数据x=[1,2,3,4,5]y1=[1,4,9,16,25]y2=[1,2,4,8,16]#绘制折线图plt.plot(x, y1, label='Line 1')plt.plot(x, y2, label='Line 2')#添加图例plt.legend(loc='upper right', fontsize='large')#设置图例标题plt.legend(title='Legend', loc='upper right',fontsize='large')#设置图例位置plt.legend(loc=(0.1, 0.1))#设置图例边框plt.legend(frameon=True, edgecolor='black')#设置图例样式plt.legend(title_fontsize='large', fancybox=True,shadow=True)#显示图形plt.show```在plt.legend(函数中,我们可以使用多个选项进行自定义设置。
python语句fig, ax的用法-回复Python语句fig和ax的用法在Python中,matplotlib库是一个用于绘制数据可视化图形的强大工具。
matplotlib库提供了一种基于面向对象的API,使得用户可以通过创建Figure对象和Axes对象来进行图形绘制。
本文将重点介绍其中两个重要的对象,即fig和ax,并详细解释它们的用法。
1. Figure对象(fig):Figure对象是matplotlib图形的顶层容器。
通过创建fig对象,我们可以在其上添加各种不同类型的图形元素,例如Axes对象、图例或文本等。
下面是如何创建一个Figure对象的示例代码:pythonimport matplotlib.pyplot as pltfig = plt.figure()这段代码首先引入了matplotlib.pyplot模块,并使用plt.figure()函数创建了一个新的Figure对象。
接下来,我们可以在该Figure对象上添加Axes 对象。
2. Axes对象(ax):Axes对象表示图形的坐标系。
可以将其理解为一个带有刻度和标签的绘图区域。
在Axes对象上绘制各种不同类型的图形,例如线图、散点图、柱状图等。
下面是如何创建一个Axes对象的示例代码:pythonimport matplotlib.pyplot as pltfig = plt.figure()ax = fig.add_subplot(111)这段代码中,我们首先通过调用plt.figure()函数创建了一个新的Figure 对象,然后使用fig.add_subplot()函数创建了一个Axes对象。
该函数的参数是三个整数(numrows,numcols,plot_number),用于指定图形的布局。
在上述示例中,我们使用了参数111,表示Figure对象中只有一个子图。
3. 绘制图形:在创建好Figure对象和Axes对象之后,我们就可以使用ax对象来绘制各种类型的图形了。
python plot color的用法在Python绘图中,颜色是一个重要的方面。
使用适当的颜色可以使图表更加美观,并以视觉上的方式传达数据。
Python提供了多种方法来自定义绘图中的颜色。
一种常见的方法是使用预定义的颜色。
Python使用字符来表示颜色。
例如,使用字符 'b' 表示蓝色,'g' 表示绿色,'r' 表示红色等。
下面是一个例子:```pythonimport matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10]plt.plot(x, y, color='r')plt.show()```在上面的例子中,我们通过 `color='r'` 将曲线的颜色设置为红色。
除了使用字符表示颜色,我们还可以使用RGB值指定颜色。
RGB值由红、绿和蓝三个颜色通道的强度组成。
每个通道的值的范围是0到1。
下面是一个使用RGB值自定义颜色的例子:```pythonimport matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10]plt.plot(x, y, color=(0.5, 0.5, 0.5))plt.show()```在上面的例子中,我们通过 `color=(0.5, 0.5, 0.5)` 将曲线的颜色设置为灰色。
这里的 `(0.5, 0.5, 0.5)` 表示红、绿、蓝通道的强度分别为0.5。
此外,还可以使用十六进制颜色码来指定颜色。
十六进制颜色码以 # 符号开头,后跟六个字符,每两个字符表示一个颜色通道。
例如,'#FF0000' 表示红色,'#00FF00' 表示绿色。
下面是一个使用十六进制颜色码设置颜色的例子:```pythonimport matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10]plt.plot(x, y, color='#FF0000')plt.show()```在上面的例子中,我们通过 `color='#FF0000'` 将曲线的颜色设置为红色。
Python显示动态曲线的方法在数据可视化中,动态曲线是一种常用的展示方式,可以直观地展示数据随时间变化的趋势。
Python作为一种强大的编程语言,提供了多种方法来显示动态曲线。
本文将介绍几种常用的Python库和技术,用于实现动态曲线的显示。
1. MatplotlibMatplotlib是Python中最常用的数据可视化库之一,它提供了丰富的绘图工具和函数。
我们可以利用Matplotlib实现简单而直观的动态曲线显示。
首先,我们需要导入Matplotlib库:import matplotlib.pyplot as plt接下来,我们创建一个Figure对象和一个Axes对象:fig, ax = plt.subplots()然后,我们可以使用ax.plot()函数绘制初始曲线,并保存返回值:line, = ax.plot(x_data, y_data)在更新数据时,我们可以使用line.set_data()方法更新曲线上的数据点:line.set_data(new_x_data, new_y_data)最后,通过调用plt.pause()函数来暂停程序一段时间,并刷新图形:plt.pause(0.1)完整代码如下所示:import matplotlib.pyplot as plt# 创建Figure对象和Axes对象fig, ax = plt.subplots()# 绘制初始曲线并保存返回值line, = ax.plot(x_data, y_data)# 更新曲线上的数据点line.set_data(new_x_data, new_y_data)# 暂停程序一段时间并刷新图形plt.pause(0.1)2. PygamePygame是一个用于开发2D游戏的Python库,也可以用来显示动态曲线。
相比于Matplotlib,Pygame提供了更多自定义的绘图功能,可以实现更复杂的动态效果。
首先,我们需要导入Pygame库:import pygame接下来,我们创建一个窗口并设置其大小:screen = pygame.display.set_mode((width, height))然后,我们可以使用Pygame提供的绘图函数绘制初始曲线:pygame.draw.line(screen, color, (x1, y1), (x2, y2), width)在更新数据时,我们可以通过重新绘制曲线来实现动态效果。
Python自学笔记——Matplotlib风羽自定义Python自学笔记——Matplotlib风羽自定义对于气象专业的小学生来说,风场是预报重要的参考数据,我们所知的风羽有四种:短线代表风速2m/s,长线代表风速4m/s,空心三角代表风速20m/s,实心三角代表风速50m/s。
而matplotlib的风羽只有短线、长线、三角三种,而这里的三角不分空心实心,但是可通过改变风羽颜色为白色使三角变为空心形状,虽然这三种可以自定义各自代表的风速,但是仍与我们的使用习惯不符,即使把三角设成20m/s,原本一个实心三角就能表示的50m/s的风在matplotlib中需要两个三角外加两条长线一条短线。
为了迎合预报员的需求,我在研究了matplotlib的风场函数barbs()的源代码quiver.py文件后,对quiver.py做了适当的调整,使得matplotlib也有了空心三角和实心三角之分。
一、函数barbs的使用barb(X, Y, U, V,, **kw)X:风场数据X坐标Y:风场数据Y坐标U:风的水平方向分量V:风的垂直方向分量'''Demonstration of wind barb plots'''import matplotlib.pyplot as pltimport numpy as npx = np.linspace(-5, 5, 5)X, Y = np.meshgrid(x, x)U, V = 12*X, 12*Ydata = [(-1.5, .5, -6, -6),(1, -1, -46, 46),(-3, -1, 11, -11),(1, 1.5, 80, 80),(0.5, 0.25, 25, 15),(-1.5, -0.5, -5, 40)]data = np.array(data, dtype=[('x', np.float32), ('y', np.float32), ('u', np.float32), ('v', np.float32)])# Default parameters, uniform gridax = plt.subplot(2, 2, 1)ax.barbs(X, Y, U, V)# Arbitrary set of vectors, make them longer and change the pivot point #(point around which they're rotated) to be the middle ax = plt.subplot(2, 2, 2)ax.barbs(data['x'], data['y'], data['u'], data['v'], length=8,pivot='middle') # Showing colormapping with uniform grid. Fill the circle for an empty barb, # don't round the values, and change some of the size parameters ax = plt.subplot(2, 2, 3)ax.barbs(X, Y, U, V, np.sqrt(U*U + V*V), fill_empty=True,rounding=False,sizes=dict(emptybarb=0.25, spacing=0.2, height=0.3)) # Change colors as well as the increments for parts of the barbs ax = plt.subplot(2, 2, 4)ax.barbs(data['x'], data['y'], data['u'], data['v'],flagcolor='r',barbcolor=['b', 'g'], barb_increments=dict(half=10,full=20, flag=100),flip_barb=True) plt.show()二、源代码解读1.class Barbs()class Barbs(mcollections.PolyCollection):@docstring.interpddef __init__(self, ax, *args, **kw):'...'def _find_tails(self, mag, rounding=True, half=5, full=10, flag=50): '...'def _make_barbs(self, u, v, nflags, nbarbs, half_barb, empty_flag, length,pivot, sizes, fill_empty, flip):'...'def set_UVC(self, U, V, C=None):'...'def set_offsets(self, xy):'...'通过读源代码可知类Barbs有五个方法分别为__init__、_find_tails、_make_barbs、set_UVC、set_offsets。
2.__init__@docstring.interpddef __init__(self, ax, *args, **kw):"""The constructor takes one required argument, an Axesinstance, followed by the args and kwargs describedby the following pylab interface documentation:%(barbs_doc)s"""self._pivot = kw.pop('pivot', 'tip')self._length = kw.pop('length', 7)barbcolor = kw.pop('barbcolor', None)flagcolor = kw.pop('flagcolor', None)self.sizes = kw.pop('sizes', dict())self.fill_empty = kw.pop('fill_empty', False)self.barb_increments = kw.pop('barb_increments', dict())self.rounding = kw.pop('rounding', True)self.flip = kw.pop('flip_barb', False)transform = kw.pop('transform', ax.transData)# Flagcolor and and barbcolor provide convenience parameters for# setting the facecolor and edgecolor, respectively, of the barb# polygon. We also work here to make the flag the same color as the # rest of the barb by defaultif None in (barbcolor, flagcolor):kw['edgecolors'] = 'face'if flagcolor:kw['facecolors'] = flagcolorelif barbcolor:kw['facecolors'] = barbcolorelse:# Set to facecolor passed in or default to blackkw.setdefault('facecolors', 'k')else:kw['edgecolors'] = barbcolorkw['facecolors'] = flagcolor# Parse out the data arrays from the various configurations supportedx, y, u, v, c = _parse_args(*args)self.x = xself.y = yxy = np.hstack((x[:, np.newaxis], y[:, np.newaxis]))# Make a collectionbarb_size = self._length ** 2 / 4 # Empirically determinedmcollections.PolyCollection.__init__(self, [], (barb_size,),offsets=xy,transOffset=transform, **kw)self.set_transform(transforms.IdentityTransform())self.set_UVC(u, v, c)__init__()方法为初始化方法,此方法中flagcolor、barbcolor为设置风羽颜色的关键字,中间的说明文字提示颜色设置是针对所有的风羽的,所以通过颜色设置达不到风羽中既有空心白色三角又有实心黑色三角。
初始化方法中在对一些参数进行了初始化赋值后执行了set_UVC()方法,所以我们顺着这个set_UVC()方法往下继续读。
3.set_UVC()def set_UVC(self, U, V, C=None):self.u = ma.masked_invalid(U, copy=False).ravel()self.v = ma.masked_invalid(V, copy=False).ravel()if C is not None:c = ma.masked_invalid(C, copy=False).ravel()x, y, u, v, c = delete_masked_points(self.x.ravel(),self.y.ravel(),self.u, self.v, c)else:x, y, u, v = delete_masked_points(self.x.ravel(), self.y.ravel(), self.u, self.v)magnitude = np.hypot(u, v)flags, emptyflags,barbs, halves, empty = self._find_tails(magnitude, self.rounding,**self.barb_increments)# Get the vertices for each of the barbsplot_barbs = self._make_barbs(u, v, flags, emptyflags,barbs, halves, empty,self._length, self._pivot, self.sizes,self.fill_empty, self.flip)self.set_verts(plot_barbs)# Set the color arrayif C is not None:self.set_array(c)# Update the offsets in case the masked data changedxy = np.hstack((x[:, np.newaxis], y[:, np.newaxis]))self._offsets = xyself.stale = True在此方法中,首先进行了变量的命名赋值,然后依次执行了方法_find_tails和_make_barbs。