关于matplotlib:Matplotlib

Matplotlib1.什么是MatplotlibMatplotlib是一个弱小的Python绘图库,次要用于数据可视化。2.Matplotlib性能 图表类型丰盛:反对线图、散点图、条形图、直方图、饼图、柱状图、误差线图、箱线图等多种图表类型。高度自定义:用户能够自定义图表的款式,包含色彩、线型、标记、题目、坐标轴标签等。良好的兼容性:与NumPy、Pandas等Python科学计算库兼容,不便解决和可视化数据。交互式绘图:反对交互式绘图,便于用户调整和查看图表。多样化的输入格局:反对PNG、JPG、EPS、SVG、Pdf等多种格局。简单的布局设计:通过GridSpec和Subplot等模块,能够实现简单的图表布局。自定义格调和主题:用户能够创立本人的图表款式和主题。3.Matplotlib特点功能强大:提供了丰盛的绘图性能和自定义选项。灵活性高:反对多种数据类型和构造,易于与其余Python库集成。社区反对弱小:领有宏大的用户社区,提供大量的教程和文档。4.Matplotlib利用场景数据分析:将数据集可视化,帮忙剖析数据,发现数据之间的关系。机器学习:在机器学习我的项目中,将算法的后果可视化,帮忙了解模型的性能和特点。

February 23, 2024 · 1 min · jiezi

关于matplotlib:matplotlibcpp的安装使用

应用miniconda 创立虚拟环境 conda create -n cppmatplot python=3.8下载源码 https://github.com/lava/matplotlib-cpp.git编译 cd matplotlib-cpp mkdir build vim ../CMakelist.txt 增加如下代码 set(Python3_FIND_STRATEGY LOCATION) set(Python3_ROOT_DIR "*/miniconda3/envs/cppmatplot") make -j32 sudo make install应用 https://github.com/jamefrank/cppmatplotlib.git

May 25, 2023 · 1 min · jiezi

关于matplotlib:学习神经网络-绘图matplotlib

1.简略折线图导入matplotlib包中的pyplot函数,重命名为plt创立一个数字列表plt.plot(调用创立的数字列表)plt调用show将绘制的好的折线图显示进去 import matplotlib.pyplot as pltcosts = [1,2,3,4,5,6,3,7,2]plt.plot(costs)plt.ylabel('cost')plt.xlabel('epochs (per 100)')plt.title("Learning rate = ")plt.show()2.校对图形下面因为只对x轴做了定义所以y轴都是不确定性的导致不精确导入matplotlib包中的pyplot函数,重命名为plt创立一个数字列表(1)再创立一个数字列表(2)plt.plot(调用创立的数字列表(1),(2),lienwidth = 数字)plt调用show将绘制的好的折线图显示进去 x = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y, linewidth=5)plt.show() 3.散状图在神经网络中为了描述数据集中不同样本的散布状况,经常要绘制散状图。用scatter()绘制散点图并设置其款式。plt.scatter(x轴的点的地位,y轴的点的地位,s = 数字(散点的大小)) #创立为散点图plt.title(“题目”,fontsize = 数字) #增加题目,并批改题目字体大小plt.xlabel(“横坐标标签”,fontsize = 数字) #增加横坐标标签并批改字体大小plt.ylabel(“纵坐标标签”,fontsize = 数字) #增加纵坐标标签并批改字体大小plt.tick_params(axis = “both”,which = ‘major’,labelsize= 数字) #axis = ‘’设定批改哪个坐标进行批改,both为全副批改,xl为只批改横坐标,y为只批改纵坐标(不设定为默认both),labelsize用于设置刻度线标签的字体大小参数which的值为 ‘major’、’minor’、’both’,别离代表设置主刻度线、副刻度线以及同时设置,默认值为’major’ (主刻度线、副刻度线相似于厘米尺。CM与MM的区别)plt调用show将绘制的好的折线图显示进去上面是单个点的散状图: plt.scatter(2, 4, s=200)plt.title("Square Numbers", fontsize=24)plt.xlabel("Value", fontsize=14)plt.ylabel("Square of Value", fontsize=14)plt.tick_params(axis='both', which='major', labelsize=14)plt.show() 上面是多个点的散状图,并用不同色彩示意其分类不同,用参数c示意对应的色彩值(color),如果是两种数值,那么点就是两种色彩,多种数值,点就是多种色彩。参数c能够是一个序列,如:plt.scatter(a,b,c=['b','r','b','r','b'],s=80)此时c的序列是一个色彩序列,除了上述的简洁写法,还能够应用RGB或RBGA:plt.scatter(a,b,c=['#f00','#0f0','#f00','#0f0','#f00'],s=80) x1 = [1,2,5,3,4,6,7,2,10,12]x2 = [5,12,15,13,14,16,17,12,13,22]c = ['b','b','b','r','b','r','b','b','r','b'] #c = ['#0000ff','#0000ff','#0000ff','#ff0000','#0000ff','#ff0000','#0000ff','#0000ff','#ff0000','#0000ff']plt.scatter(x1,x2,c=c,s=30)plt.show()然而,在数据集中,咱们个别不会设置色彩,因为标签Y自身就是分好类的,这种状况就须要应用cmap参数,cmap=plt.cm.Spectral。留神,plt.cm.Spectral是一个色彩映射集,参数Y的序列中呈现了n个不同的值,而后为每一个值调配一个色彩。 ...

April 21, 2022 · 1 min · jiezi

关于matplotlib:Matplotlib设置颜色形状

plt.plot(x, y, marker='+', color='coral') referencehttps://blog.csdn.net/hesongz...

March 23, 2021 · 1 min · jiezi

关于matplotlib:安利-5-个拍案叫绝的-Matplotlib-骚操作

公众号:Python数据迷信作者:东哥腾飞大家都晓得,Matplotlib是Python的可视化库,性能很强,能够绘制各种图。一些惯例用法前不久分享过Matplotlib官网出品的cheatsheet:Matplotlib官网小抄手册公开,配套可视化代码已打包! 然而!明天咱们不走寻常路,专挑几个贼骚的操作分享下. 1. Span SelectorSpan Selector是Matplotlib中的鼠标小部件,widgets是用于蕴含一些交互性能的python对象。Span Selector能够通过鼠标框选,不便地查看选定区域的最大值和最小值。 上面是代码,首先创立一个根本折线图作为例子。而后,咱们调用SpanSelector办法并应用它来抉择一个区域,而后在该区域中显示最大值和最小值。 import matplotlib.pyplot as pltfrom matplotlib.widgets import SpanSelectordef onselect(xmin, xmax): print(xmin, xmax) return xmin, xmaxfig, ax = plt.subplots()ax.plot([1,2,3,4,5,6,7], [10, 50, 100, 23,15,28,45])span = SpanSelector(ax, onselect, 'horizontal', useblit=True, rectprops=dict(alpha=0.5, facecolor='red')) plt.show()上面是具体操作。 2. Broken BarhBroken的程度条形图是不间断具备间隙的图,它可用于数据值相差很大的状况下,例如,蕴含极其温度范畴的数据集。在这种状况下,Broken的程度条形图十分适合,因为它们能够同时绘制最大和最小范畴。 python模块matplotlib.broken_barh()用于绘制Broken的程度条形图。 import matplotlib.pyplot as plt #Defining the x and y ranges xranges = [(5,5), (20,5),(20,7)] yrange = (2,1) #Plotting the broken bar chart plt.broken_barh(xranges, yrange, facecolors='green') xranges = [(6,2), (17,5),(50,2)] yrange = (15,1) plt.broken_barh(xranges, yrange, facecolors='orange') xranges = [(5,2), (28,5),(40,2)] yrange = (30,1) plt.broken_barh(xranges, yrange, facecolors='red') plt.xlabel('Sales') plt.ylabel('Days of the Month') plt.show() ...

September 29, 2020 · 2 min · jiezi

关于matplotlib:matplotlib-quiver-画风速风向

一个箭头的组成 quiver几个参数的了解quiver([X, Y], U, V, [C], **kw),其中kw可供选择的参数有: units:默认值是width, width/heigth:箭头的宽度是x或者y轴的总长,没错,是总长; dots/inches:箭头的宽度是设置的dpi或者设置的英寸大小,这个影响了width参数,比如说画布大小设为plt.figure(figsize=(144, 72), dpi=10),这个画布占1440*720px,如果quiver设置units="dots",width=5,代表以10像素为根底单位,5倍的宽度也就是画一个箭头它的宽度占50px,那么数据就须要抽样画了,不然会糊在一起; x/y/xy:以x,y,或者xy的平方根为根底的宽度,如果x轴或者y轴坐标设置步长为1,和画布像素大小统一,这样一个像素对应一个x的整数坐标值,那么就能够管制箭头杆的宽度了,箭头杆的根底长度就是根号2px; width:float型,用来管制箭头杆的宽度,我只分明units=dots时宽度的了解,然而对于units=x/y/xy时宽度到底指的是我临时是依照下面的了解; angle:uv/xy,uv箭头的纵横比(axis aspect ratio)为1,所以若U==V,则绘图上箭头的方向与程度轴逆时针呈45度(正向右);xy箭头从(x,y)指向(x + u,y + v),例如,应用它来绘制突变场(gradient field) headwidth:float型,默认3,用来管制箭头三角形底边的半宽,值指的是杆宽的倍数; headlength: float型,默认5,用来管制箭头斜边的长度,值指的是杆宽的倍数,比方4.5指的是杆宽的4.5倍; scale:float型,默认为None,用来控制杆身的长度,值越小,杆身越长,如果为None,则应用matplotlib主动缩放算法,箭头长度单scale_units参数指定 scale_units:如果该值设置为width/heigth,则scale应该设为0.000x的范畴差不多才是想要的后果,如果设置为inches,则和你的dpi以及scale相干,对于plt.figure(figsize=(144, 72),dpi=10) scale=1,scale_units="inches"和scale=0.1,scale_units="x/xy/不写"的画进去的后果是一样的; pivot:tail/mid/middle/tip,默认tail,指的是箭头核心,其实就是从哪里画 样例图 全副代码参考# _*_coding:utf-8_*_import matplotlib.pyplot as pltfrom PIL import Imageimport numpy as npimport osimport sysimport jsonimport h5pyFILLVALUE = -32767def assigncolor(tardataset, mask, colorbar): if tardataset[mask].size > 0: if len(colorbar) >= 4: tardataset[mask] = colorbar else: tardataset[mask] = [colorbar[0], colorbar[1], colorbar[2], 255] return tardataset[mask] def single_drawer(dataset, colorbar, tardataset): #非凡值的解决 nullmask = np.isnan(dataset[:]) | np.isinf(dataset) tardataset[nullmask] = [255, 255, 255, 0] for index in range(0, len(colorbar)): # 获取须要进行判断的值 valuemask = tardataset[:, :] == [-1, -1, -1, -1] # 三维转二维,不便与dataset的mask合并 valuemask = valuemask[:, :, 0] mask = dataset == colorbar[index][0] tardataset[valuemask & mask] = assigncolor(tardataset, valuemask & mask, colorbar[index][1]) return tardatasetdef gradient_drawer(dataset, colorbar, tardataset): # 非凡值的解决 nullmask = np.isnan(dataset[:]) | np.isinf(dataset) tardataset[nullmask] = [255, 255, 255, 0] # 小于最小值 valuemask = tardataset[:, :] == [-1, -1, -1, -1] valuemask = valuemask[:, :, 0] mask = dataset <= colorbar[0][0] tardataset[valuemask & mask] = assigncolor(tardataset, valuemask & mask, colorbar[0][1]) for index in range(0, len(colorbar) - 1): # 获取须要进行判断的值 valuemask = tardataset[:, :] == [-1, -1, -1, -1] if index == 18: print(valuemask.shape) valuemask = valuemask[:, :, 0] mask = (dataset > colorbar[index][0]) & (dataset <= colorbar[index + 1][0]) tempmask = valuemask & mask if tempmask[tempmask == True].size > 0: ratio = (1.0 * (dataset[valuemask & mask] - colorbar[index][0]) / (colorbar[index + 1][0] - colorbar[index][0])).reshape(-1, 1) colorrange = (np.array(colorbar[index + 1][1] - np.array(colorbar[index][1]))).reshape(1, -1) temp = np.dot(ratio, colorrange) + np.array(colorbar[index][1]) if len(colorbar[index][1]) < 4: alphaband = np.ones((temp.shape[0], 1)) alphaband[::] = 255 temp = np.column_stack((temp, alphaband)) tardataset[valuemask & mask] = temp # 大于最大值 valuemask = tardataset[:, :] == [-1, -1, -1, -1] valuemask = valuemask[:, :, 0] mask = dataset > colorbar[-1][0] tardataset[valuemask & mask] = assigncolor(tardataset, valuemask & mask, colorbar[-1][1]) return tardatasetdef drawWindDir(in_file, u_ds, v_ds, dir_file, cb_file): # 读取调色板 gradient_cb = [] single_cb = [] with open(cb_file, "r") as cb_json: cb_data = json.load(cb_json) gradient_cb = cb_data["gradient"] single_cb = cb_data["single"] # 读取风速 h5py_obj = h5py.File(in_file, 'r') u_data = np.array(h5py_obj[u_ds]) v_data = np.array(h5py_obj[v_ds]) sws_data = np.array(h5py_obj["SWS"]) # 获取宽高 uh, uw = np.shape(u_data) vh, vw = np.shape(v_data) # 高低翻转数据 u = np.flip(u_data, 0) v = np.flip(v_data, 0) # 读取风速有效值范畴 sws_valid = h5py_obj["SWS"].attrs['valid range'] # 用风速有效值管制有效值区域提取 valid_mask = (sws_data >= sws_valid[0]) & (sws_data <= sws_valid[1]) # 用u,v向量计算风速 wp = np.empty((uh, uw), dtype=np.float) wp[:, :] = FILLVALUE wp[valid_mask] = np.sqrt(np.power(u[valid_mask] / 100.0, 2) + np.power(v[valid_mask] / 100.0, 2)) # 初始化输入数据集 tardataset = np.ones((uh, uw, 4), dtype=np.int) tardataset[::] = -1 # 去掉single调色板的值 tardataset = single_drawer(sws_data, single_cb, tardataset) # 依据gradient调色板从新赋值 result_data = gradient_drawer(sws_data, gradient_cb, tardataset) # 输入风速的底图 new_image = Image.fromarray(result_data.astype(np.uint8)).convert('RGBA') new_image.save(in_file.replace(".HDF", ".png"), 'png') # 风向的xy坐标,uv向量,1440,720,去除有效值 u_valid = valid_mask X, Y = np.meshgrid(np.arange(0, uw, 1), np.flipud(np.arange(0, uh, 1))) U = u.astype(np.int64) V = v.astype(np.int64) newU = np.zeros((uh, uw)) newV = np.zeros((uh, uw)) newU[u_valid] = U[u_valid] / np.sqrt(np.power(U[u_valid], 2) + np.power(V[u_valid], 2)) newV[u_valid] = V[u_valid] / np.sqrt(np.power(U[u_valid], 2) + np.power(V[u_valid], 2)) # 有效值为nan newU[newU == 0] = np.nan newV[newV == 0] = np.nan # 创立画布 fig1 = plt.figure(figsize=(uw, uh), dpi=1) ax1 = fig1.add_subplot(111) # 去掉坐标轴,去掉两边空白,管制输入的xy轴范畴 plt.axis('off') plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0, wspace=0) plt.ylim(0, uh) plt.xlim(0, uw) # 栅格抽样 i = 10 Q = ax1.quiver(X[::i, ::i], Y[::i, ::i], newU[::i, ::i], newV[::i, ::i], scale=0.1, width=1, units="xy", angles='uv', headwidth=3.5, headlength=4, pivot="mid") ax1.scatter(X[::i, ::i], Y[::i, ::i], color='r', s=30) plt.show() fig1.savefig(dir_file, transparent=True) plt.close()def mergeDirSpd(spd_img, dir_img, out_img): backimage = Image.open(spd_img) frontimage = Image.open(dir_img) # 临时没有思考分辨率不统一状况 outimage = Image.alpha_composite(backimage, frontimage) outimage.save(out_img)if __name__ == "__main__": in_path = sys.argv[1] ds = sys.argv[2] cb_file = sys.argv[3] if os.path.isdir(in_path): for w_root, w_dirs, dir_files in os.walk(in_path): for one_file in dir_files: if '.HDF' in one_file and "SWS" in one_file: in_file = os.path.join(w_root, one_file) spd_img = in_file.replace(".HDF", ".png") dir_img = in_file.replace(".HDF", "_dir.png") out_img = in_file.replace(".HDF", "_dp.png") u_ds = "wind_vel_u" v_ds = "wind_vel_v" drawWindDir(in_file, u_ds, v_ds, dir_img, cb_file) mergeDirSpd(spd_img, dir_img, out_img) elif os.path.isfile(in_path): in_file = in_path spd_img = in_file.replace(".HDF", ".png") dir_img = in_file.replace(".HDF", "_dir.png") out_img = in_file.replace(".HDF", "_dp.png") u_ds = "dwind_vel_u" v_ds = "wind_vel_v" drawWindDir(in_file, u_ds, v_ds, dir_img, cb_file) mergeDirSpd(spd_img, dir_img, out_img)

August 14, 2020 · 4 min · jiezi

关于matplotlib:Matplotlib-绘图秘籍翻译完成

原文:Matplotlib Plotting Cookbook协定:CC BY-NC-SA 4.0 欢送任何人参加和欠缺:一个人能够走的很快,然而一群人却能够走的更远。 在线浏览ApacheCN 面试求职交换群 724187166ApacheCN 学习资源目录Matplotlib 绘图秘籍零、前言一、第一步二、自定义色彩和款式三、解决标注四、解决图形五、文件输入六、解决地图七、解决 3D 图形八、用户界面奉献指南本我的项目须要校对,欢送大家提交 Pull Request。 请您怯懦地去翻译和改良翻译。尽管咱们谋求卓越,但咱们并不要求您做到美中不足,因而请不要放心因为翻译上犯错——在大部分状况下,咱们的服务器曾经记录所有的翻译,因而您不用放心会因为您的失误受到无法挽回的毁坏。(改编自维基百科)联系方式负责人飞龙: 562826179其余在咱们的 apachecn/apachecn-ds-zh github 上提 issue.发邮件到 Email: apachecn@163.com.在咱们的 组织学习交换群 中分割群主/管理员即可.资助咱们通过平台自带的打赏性能,或点击这里。

August 1, 2020 · 1 min · jiezi

关于matplotlib:Matplotlib-30-秘籍翻译完成

原文:Matplotlib 3.0 Cookbook协定:CC BY-NC-SA 4.0 欢送任何人参加和欠缺:一个人能够走的很快,然而一群人却能够走的更远。 在线浏览ApacheCN 面试求职交换群 724187166ApacheCN 学习资源目录Matplotlib 3.0 秘籍零、前言一、Matplotlib 的分析二、根本绘图入门三、绘制多个图表和子图四、开发可视化来进步公布品质五、应用高级性能的绘图六、嵌入文本和表达式七、以不同格局保留图形八、开发交互式绘图九、在图形用户界面中嵌入绘图十、应用 mplot3d 工具包绘制 3D 图形十一、应用axisartist工具包十二、应用axes_grid1工具包十三、应用 Cartopy Toolkit 绘制天文地图十四、应用 Seaborn 工具包的探索性数据分析奉献指南本我的项目须要校对,欢送大家提交 Pull Request。 请您怯懦地去翻译和改良翻译。尽管咱们谋求卓越,但咱们并不要求您做到美中不足,因而请不要放心因为翻译上犯错——在大部分状况下,咱们的服务器曾经记录所有的翻译,因而您不用放心会因为您的失误受到无法挽回的毁坏。(改编自维基百科)联系方式负责人飞龙: 562826179其余在咱们的 apachecn/apachecn-ds-zh github 上提 issue.发邮件到 Email: apachecn@163.com.在咱们的 组织学习交换群 中分割群主/管理员即可.资助咱们通过平台自带的打赏性能,或点击这里。

July 30, 2020 · 1 min · jiezi

Python37-读取-mp3-音频文件生成波形图

原文链接:何晓东 博客 测试环境为Windows 10 系统,Python3.7,转换需要提前安装pydub、ffmpeg,安装和加入环境变量配置方法自行解决,至于缺少的包直接 php install xx 搞定。主要是 mp3 转成 wav 格式的文件,因为 mp3 格式为了减小体积牺牲了音质,转成无损的 wav 格式之后,可以读取到更详细的信息。然后读取 wav 的信息,利用 matlotlib 绘图即可。 mp3towavaform.py 代码: #coding=utf8from pydub import AudioSegmentimport waveimport ioimport numpy as npimport matplotlib.pyplot as plt #专业绘图库from PIL import Imageimport pylabfrom scipy.io import wavfile# 先从本地获取 mp3 的 bytestring 作为数据样本filename = "b.mp3"fp=open(filename, 'rb')data=fp.read()fp.close()# 读取aud=io.BytesIO(data)sound=AudioSegment.from_file(aud, format='mp3')raw_data = sound._data# 写入到文件l=len(raw_data)f=wave.open(filename + ".wav",'wb')f.setnchannels(1)f.setsampwidth(2)f.setframerate(16000)f.setnframes(l)f.writeframes(raw_data)f.close()# 读取生成波形图samplerate, data = wavfile.read(filename + ".wav")times = np.arange(len(data))/float(samplerate)# print(len(data), samplerate, times)# 可以以寸为单位自定义宽高 frameon=False 为关闭边框fig = plt.figure(figsize=(20, 5), facecolor="white")# plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')ax = fig.add_axes([0, 0, 1, 1])ax.axis('off')plt.fill_between(times, data, linewidth = '1', color='green')plt.xticks([])plt.yticks([])plt.savefig(filename + '.png', dpi=100, transparent=False, bbox_inches='tight', edgecolor='w')#plt.show()最终就可以生成一个无边框的波形图,matplotlib 的可选参数非常多,至于生成的波形图想要什么边框,颜色,图例,坐标轴信息等,可以查阅 matplotlib 社区文档。 ...

November 4, 2019 · 1 min · jiezi

Python数据可视化matplotlibpyplot

1.安装matplotlibpip install matplotlib2.绘制简单图形import matplotlib.pyplot as plt#图形输入值input_values = [1,2,3,4,5]#图形输出值squares = [1,4,9,16,25]#plot根据列表绘制出有意义的图形,linewidth是图形线宽,可省略plt.plot(input_values,squares,linewidth=5)#设置图标标题plt.title("Square Numbers",fontsize = 24)#设置坐标轴标签plt.xlabel("Value",fontsize = 14)plt.ylabel("Square of Value",fontsize = 14)#设置刻度标记的大小plt.tick_params(axis='both',labelsize = 14)#打开matplotlib查看器,并显示绘制图形plt.show() 3.绘制点import matplotlib.pyplot as plt#绘制散点图(传如一对x和y坐标,在指定位置绘制一个点)plt.scatter(2,4)#设置输出样式plt.scatter(3,5,s=200)plt.show() 4.绘制一系列的点import matplotlib.pyplot as pltx_values = [1,2,3,4,5]y_values = [1,4,9,16,25]plt.scatter(x_values,y_values,s=100)plt.show() 5.自动计算数据import matplotlib.pyplot as pltx_values = list(range(1,1001))y_values = [x**2 for x in x_values]plt.scatter(x_values,y_values,s=100)#设置每个坐标轴的取值范围(x轴取值,y轴取值)plt.axis([0,1100,0,1100000])plt.show() 6.删除数据点的轮廓import matplotlib.pyplot as pltx_values = list(range(1,1001))y_values = [x**2 for x in x_values]#matplotlib允许你给散点图中的各个点指定颜色。默认为蓝色点和黑色轮廓,在散点图包含的 数据点不多时效果很好。但绘制很多点时,黑色轮廓可能会粘连在一起。#edgecolor='none'删除数据点的轮廓plt.scatter(x_values,y_values,edgecolor='none', s=40)#设置每个坐标轴的取值范围plt.axis([0,1100,0,1100000])plt.show() 7.自定义颜色c=''直接传颜色或元组都可以import matplotlib.pyplot as pltx_values = list(range(1,1001))y_values = [x**2 for x in x_values]#matplotlib允许你给散点图中的各个点指定颜色。默认为蓝色点和黑色轮廓,在散点图包含的 数据点不多时效果很好。但绘制很多点时,黑色轮廓可能会粘连在一起。#edgecolor='none'删除数据点的轮廓plt.scatter(x_values, y_values,c='red', edgecolor='none', s=40)# plt.scatter(x_values, y_values, c=(0, 0, 0.8), edgecolor='none', s=40)#设置每个坐标轴的取值范围plt.axis([0,1100,0,1100000])plt.show() ...

June 27, 2019 · 2 min · jiezi

Ubuntu下matplotlib报错KeyError-PROJLIB

老铁们瞅一眼,看看是不是这个错 >>> from mpl_toolkits.basemap import BasemapTraceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/Quella/anaconda3/lib/python3.7/site-packages/mpl_toolkits/basemap/__init__.py", line 155, in <module> pyproj_datadir = os.environ['PROJ_LIB'] File "/home/Quella/anaconda3/lib/python3.7/os.py", line 678, in __getitem__ raise KeyError(key) from NoneKeyError: 'PROJ_LIB'我在matplotlib的github瞅了瞅,没细看,找到了这个: 一部分人说是你conda的用法不对,另一部分人说是环境变量的问题,我没管那么多,能用就行,每次运行: from mpl_toolkits.basemap import Basemap之前先运行 import osimport condaconda_file_dir = conda.__file__conda_dir = conda_file_dir.split('lib')[0]proj_lib = os.path.join(os.path.join(conda_dir, 'share'), 'proj')os.environ["PROJ_LIB"] = proj_libfrom mpl_toolkits.basemap import Basemap不过照这段代码看,他就是添加了个环境变量,倒是可以试着直接改环境变量,我没管......以后有缘的话再改吧......论文狗先滚了...... github原地址:https://github.com/conda-forg...https://github.com/matplotlib...

June 14, 2019 · 1 min · jiezi

数据可视化还在使用Matplotlib是时候让Plotly表演真正的技术了

作者 | Will Koehrsen 如何仅使用一行代码制作漂亮、互动性强的图表? 程序员的沉没成本论 沉没成本谬论是人类众多的认知偏见之一。 它指的是我们倾向于持续将时间和资源投入到失去的原因中,因为我们已经花了很多时间去追求无用的事情。沉没成本谬论适用于当我们花了很多成本也不会起作用的项目或工作。比如,当存在效率更高,互动性更强的选择时,我们依然继续使用Matplotlib。 在过去的几个月里,我意识到我使用Matplotlib的唯一原因是我花费了数百小时去学习它复杂的语法。这种复杂性让作者在StackOverflow上遭受了数小时的挫折去弄清楚如何格式化日期或添加第二个y轴。幸运的是,在探索了一些选项后,一个在易用性,文档和功能方面显著的赢家是Plotly库。 在本文中,我们将直接上手使用Plotly,学习如何在更短的时间内制作出更好的图表。 本文的所有代码都可以在GitHub上找到(https://github.com/WillKoehrsen/Data-Analysis)。 图表都是交互式的,可以在NBViewer(https://w.url.cn/s/ALOvpfv)上查看。 Plotly简介 Plotly Python包(https://plot.ly/python/)是一个基于plotly.js(https://plot.ly/javascript/)构建的开源库,而后者又建立在d3.js(https://d3js.org/)上。我们将用一个名为cufflinks的封装器来使用Pandas数据。因此,我们的整个堆栈是cufflinks> plotly> plotly.js> d3.js,这意味着我们可以通过d3的交互式图形功能去获得Python编码的效率。 (Plotly本身就是一家拥有多种产品和开源工具的图形公司。其Python版本的库可以免费使用,我们可以在离线模式下创建无限的图表,在线模式下最多可以创建25个图表,用于共享。) 本文中的所有工作都是使用Jupyter notebook完成的,其中的plotyl+cuffilinks可以在离线模式下运行。 在使用pip命令安装了plotly和cufflinks之后,在Jupyter中运行以下命令: 单变量分布:直方图和箱线图 单变量—单因素—图是开始分析数据的标准方法,直方图是绘制分布图的首选图(虽然它有一些问题-https://w.url.cn/s/AkZpZF1)。在这里,使用作者Medium文章的统计信息(你可以看到如何获取你的统计数据,或者你也可以使用我的-https://w.url.cn/s/AQRA3Kp),制作了关于文章点赞数量的交互式直方图(df是标准的Pandas数据帧): 对于那些习惯使用Matplotlib的人来说,我们所要做的就是添加一个字母(使用iplot而不是plot),我们就可以得到一个更好看的交互式图表! 我们可以点击数据来获取更多细节,放大图的各个部分,我们稍后会看到,可以选择要高亮的内容。 如果我们想要绘制叠加的直方图,使用如下代码,同样非常简单: 通过使用一点点Pandas相关的操作,我们可以做一个条形图: 正如我们所看到的,我们可以将Pandas与plotly+cufflinks结合起来。可对按出版物每个故事的粉丝,绘制箱线图: 交互性的好处是我们可以根据需要探索和分组数据。 在箱线图中有很多信息,如果没有观察数字的能力,我们会错过大部分的信息! 散点图 散点图是大多数分析方法的核心。它允许我们看到变量随时间演变的过程或两个(或更多)变量之间的关系。 时间序列 相当一部分的真实数据会有一个时间维度。 幸运的是,plotly+cufflinks的设计考虑了时间序列的可视化。 接下来使用下面的代码制作一个关于作者TDS文章的数据框,看看趋势是如何变化。 在这里,我们仅用一行代码做了很多不同的事情: 自动获取时间序列x轴 添加辅助y轴,因为我们的变量有不同的范围 将文章标题添加为悬停信息 我们还可以非常轻松地添加文本注释: 对于使用第三个变量来上色的双变量散点图,我们可以使用如下命令: 我们可以使用log轴(指定为绘图布局)(参见Plotly文档-中的布局细节-https://plot.ly/python/reference/)以及数值变量来调整气泡,让图表更复杂一点: 更进一步的工作(详见notebook-https://w.url.cn/s/AS8rPTo ),我们甚至可以在一个图表上放置四个变量(不建议-https://w.url.cn/s/ALRC02Y)! 和之前一样,我们可以将pandas与plotly + cufflinks结合起来,用于获得有用的图表。 有关添加功能的更多示例,请参阅notebook或文档。 我们可以使用单行代码在文本中添加文本注释,参考线和最佳拟合线,并且仍然可以进行所有的交互。 进阶图表 现在我们将制作一些你可能不会经常使用的图表,它可能会令人印象深刻。我们将使用plotly figure_factory(https://w.url.cn/s/ACGcXLa ...

June 5, 2019 · 1 min · jiezi

可视化工具1用matplotlib画些简单的图

环境是python3.7,工具使用的是jupyter-notebook交互式笔记本引入相关库 from pandas import DataFrame,Seriesimport matplotlib.pyplot as pltimport numpy as np%matplotlib inline # 这一行是jupyter-notebook特有的语法,其他IDE不用写画图之前的设置: plt.rcParams['font.sans-serif'] = ['SimHei'] # 修改字体为黑体,否则画出的图有中文的话就识别不出plt.rcParams['axes.unicode_minus'] = False # 设置图的X轴Y轴刻度支持负号画一张折线图: plt.figure(1,figsize=(10,4)) # 设置画布的尺寸plt.plot(np.random.random_integers(-20,20,20)) # 从-20到20之间随机取20个数plt.title('这是一条折线图') # 设置图的标题plt.xticks([0,5,10,15,20]) # 设置x轴的刻度plt.xlabel('X轴') # 设置X轴的标签plt.show() # 显示图最终画出的折现图如下: 在上面的图中再添加一条折线图: plt.figure(1,figsize=(10,4))plt.plot(np.random.random_integers(-20,20,20)) # 第一条折线图plt.plot(np.random.random_integers(-20,20,20)) # 第二条折线图plt.legend(('no1','no2')) # 这个函数标注折线图plt.title('这是一条折线图')plt.xticks([0,5,10,15,20])plt.xlabel('X轴')plt.show()plt.legend()函数只是一个开关的作用,写了就代表开启图例的标注,上述代码也等价于: plt.figure(1,figsize=(10,4))plt.plot(np.random.random_integers(-20,20,20),label='no1') # 第一条折线图plt.plot(np.random.random_integers(-20,20,20),label='no2') # 第二条折线图plt.legend() # 打开开关plt.title('这是一条折线图')plt.xticks([0,5,10,15,20])plt.xlabel('X轴')plt.show()最终效果: 修改折线图的颜色,在画图函数传入color选项即可: plt.figure(1,figsize=(10,4))plt.plot(np.random.random_integers(-20,20,20),color = 'red') # 红色plt.plot(np.random.random_integers(-20,20,20),color = 'green') # 绿色plt.legend(('no1','no2'))plt.title('这是一条折线图')plt.xticks([0,5,10,15,20])plt.xlabel('X轴')plt.show()效果:

May 5, 2019 · 1 min · jiezi

用-Matplotlib-库生成动画图表

翻译:疯狂的技术宅https://towardsdatascience.co... 更多文章请关注微信公众号:硬核智能 动画是一种展示现象的有趣方式。相对于静态图表,人类总是容易被动画和交互式图表所吸引。在描述多年来的股票价格、过去十年的气候变化、季节性和趋势等时间序列数据时,动画更有意义,因为我们可以看到特定的参数是怎样随时间变化的。 上面的图是雨滴的模拟并且已经使用 Matplotlib 库实现,该库是一个广为人知的祖父级别的 python 可视化包。 Matplotlib 通过对 50 个散点的比例和透明度进行设置来模拟雨滴。今天,Python 拥有大量强大的可视化工具,如 Plotly、Bokeh、Altair等等。这些库能够实现最先进的动画和交互特性。尽管如此,本文的目的是强调这个库的另一个方面,这个方面没有人进行过太多的探索,这就是动画。 概述Matplotlib 是一个广受欢迎的 Python 2D 绘图库。很多人都是从 Matplotlib 开始数据可视化之旅的。可以使用matplotlib轻松生成图表、直方图、功率谱,条形图,错误图表,散点图等。它还与 Pandas 和 Seaborn 等库无缝集成,创造出更加复杂的可视化效果。 matplotlib 的优点是: 它的设计类似于 MATLAB,因此很容易在在两者之间切换。在后端进行渲染。可以重现任何图表(需要一点努力)。已经存在了十多年,拥有庞大的用户群。然而,也有一些方面 Matplotlib 落后于同类的库。 Matplotlib 有一个过于冗长的规则 API。有时候风格很差。对 Web 和交互式图表的支持不佳。对于大型复杂数据而言通常很慢。这份复习资料是来自 Datacamp 的 Matplotlib 小抄,你可以通过它来提高自己的基础知识。 动画Matplotlib 的 animation 基类负责处理动画部分。它提供了一个构建动画功能的框架。使用下面两个接口来实现: FuncAnimation 通过重复调用函数 func 来产生动画。ArtistAnimation: 动画使用一组固定的 Artist 对象。但是,在这两个接口中,FuncAnimation 是最方便使用的。你可以通过阅读文档 得到的更多信息,因为我们只关注 FuncAnimation 工具。 要求安装 numpy 和 matplotlib 。要将动画保存为 mp4 或 gif,需要安装 ffmpeg 或 imagemagick。准备好之后,我们就可以在 Jupyter note 中开始创建第一个动画了。可以从 Github 得到本文的代码。 ...

April 26, 2019 · 3 min · jiezi

安利一个实用小工具 oscillo:帮助你观察命令运行时在时间轴上的cpu和内存占用率

如果使用过glances,如果有一颗geek的心的话,一定会觉得不但酷炫而且十分实用。不过如果想观察一个程序从运行开始到结束的cpu占用率怎么办?好办,利用python的psutil异步观察就行。介绍一下放在github上的一个项目: oscillo使用方式使用方式很简单,直接 pip install oscillo即可安装使用.命令行参数的格式是 “<name>: <command [args]>":name: 命令行的别名/id (任意字符串),当–commands/-c参数指定多个命令时,该值将作为命令的唯一标识,不可重复command [args]: 需要测试资源消耗的命令,比如 gzip file.ext示例如下,监控gzip压缩一个文件时耗费的cpu、memory和时间:oscillo -c ‘gzip: gzip file.ext’ -o output-file-c 代表将执行一个linux cmd 命令。参数后面可以跟以空格隔开的多个参数-o 结果输出文件:命令执行完成后,会在当前目录下生成一个<output-file>.log 文件。文本结构是json 格式. 数据结构如下{ “test”: { “elapsed”: 0.022143125534057617, //总执行时间 “cpu”: [], “memory”: [] }}同时会产生一个<output-file>.png文件,<output-file>由-o参数指定,默认值为metrix在控制台上,oscillo会打印summary信息,其中包含命令的耗时、最大内存使用、最大cpu使用、退出码等在控制台上,oscillo会打印summary信息,其中包含命令的耗时、最大内存使用、最大cpu使用、退出码等如果想对比多个命令对资源的消耗,可以使用 -c/–commands 选项指定多条命令, e.g.:对比gzip和tar命令对资源的消耗:oscillo -c ’t1: gzip file.ext’ ’t2: tar czf target.tar.gz file1’ -o output效果如下:实现原理这个工具的原型,来自于一次为了对比几种客户端性能而写的一个脚本,它的原理就是:在程序中启动一个子进程,获取进程id通过psutil观察该进程,每隔一段时间记录一次cpu和内存的负载通过matplotlib画图说一下其中碰到的一个坑:欲监控的子进程A在内部调用了另一个耗资源的子进程B,但是psutil只能观察到子进程A的资源消耗情况,粗暴的解决办法就是:观察全局的资源消耗情况:class Stopwatch(object): def init(self, pid): self.__is_run = False self.__start_time = 0 self.__elapsed_times = 0 self.memory_percent = [] self.cpu_percent = [] self.pid = pid def start(self): if self.__is_run: return False self.__is_run = True self.__start_time = time.time() if self.pid > 0: p = psutil.Process(self.pid) else: p = psutil p.memory_percent = lambda: p.virtual_memory().percent while self.__is_run: try: self.cpu_percent.append(p.cpu_percent(1)) self.memory_percent.append(p.memory_percent()) except psutil.NoSuchProcess: break @property def elapsed(self): if self.__is_run: return self.__elapsed_times + time.time() - self.__start_time return self.__elapsed_times def stop(self): self.__elapsed_times = self.elapsed self.__is_run = FalseBTW当前的功能比较简单,可能有很多东西没用想到,欢迎使用和完善git仓库: oscillo原文地址 ...

March 31, 2019 · 1 min · jiezi