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自学笔记——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。