查看“Matplotlib”的源代码
←
Matplotlib
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
* ''' ipython中事先执行 %matplotlib ''' :交互式模式:plt.ion() :关闭交互式:plt.ioff() * 参见 [https://matplotlib.org/index.html] [http://www.cnblogs.com/wei-li/archive/2012/05/23/2506940.html] ==配置== ===pyplot的style配置=== *使用内置的style plt.style.use('ggplot') print(plt.style.available) (当前使用的style) *可以自定义style For example, you might want to create mpl_configdir/stylelib/presentation.mplstyle with the following: axes.titlesize : 24 axes.labelsize : 20 lines.linewidth : 3 lines.markersize : 10 xtick.labelsize : 16 ytick.labelsize : 16 Then, when you want to adapt a plot designed for a paper to one that looks good in a presentation, you can just add: >>> import matplotlib.pyplot as plt >>> plt.style.use('presentation') ===matplotlib的配置=== *使用matplotlib.rcParams mpl.rcParams['lines.linewidth'] = 2 mpl.rcParams['lines.color'] = 'r' * matplotlib.rcdefaults() 恢复默认配置 * matplotlibrc file matplotlib.matplotlib_fname() ==两种不同的画图模式== ===交互式plot=== * 简单的例子 import matplotlib.pyplot as plt plt.clf() plt.figure(1,figsize=(9, 3)) plt.plot(x, y,label='sin') plt.errorbar(x, y, xerr=0.1 * x, yerr=5.0 + 0.75 * y, ls='None', marker='s',uplims=True) #误差棒,ls='None' 表示不连线 plt.xlim(0,3) #调整坐标范围 或者用 plt.axis([40, 160, 0, 0.03])同时设定x和y轴的范围 plt.xscale('log') # 设置对数坐标格式,, plt.xlabel('x label') plt.title("Simple Plot") plt.legend(loc='upper left') #图例 显示前面plot中的label plt.show() * use keyword args lines = plt.plot(x, y) plt.setp(lines, color='r', linewidth=2.0) #[https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D] * plt.plot() 中的颜色,线型等 :* options for the color characters are: 'r' , 'g' , 'b' = blue, 'c' = cyan, 'm' = magenta, 'y' = yellow, 'k' = black, 'w' = white :* Options for line styles are: '-' = solid, '--' = dashed, ':' = dotted, '-.' = dot-dashed, '.' = points, 'o' = filled circles, '^' = filled triangles :* marker style [https://matplotlib.org/api/markers_api.html] ===多个panel=== *可以通过plt.gca()获得当前(subplot)坐标轴的属性,通过plt.gcf()获得当前图形的属性。 同样地,plt.cla()和plt.clf()将分别清除当前的轴和图形。 plt.subplot(211) # panels plt.subplots_adjust(hspace=0.3) #调整多个panel的间隔 plt.subplot(212) plt.scatter(x, y) plt.subtitle('Categorical Plotting') plt.tight_layout() #这个是重新排列的神器 fig=plt.gcf() fig.suptitle('Title',fontsize=16) #给图一个总标题 *高级用法plt.subplot2grid()参见[https://zhuanlan.zhihu.com/p/401110048] ==字体大小设置== *plt.tick_params(labelsize=23) #设置图的坐标轴的字体大小 * label的字体大小,直接添加 ‘size=18’这样的关键词 ====latex字符==== plt.rc(usetex = True) plt.xlabel('\\alpha') #转义 参见[https://docs.python.org/2.0/ref/strings.html] plt.xlabel(r'\alpha') #r'代表raw string ===coding style === *通过关键词来配置图的要素,功能更强大,但是直观性稍弱 x = np.arange(0, 10, 0.2) y = np.sin(x) fig, ax = plt.subplots() ax.plot(x, y) plt.show() *'''ax也可以在互动模式中通过 plt.gca()获取''' ax=plt.gca() ====axes的配置==== :ax.semilogx : 对数坐标 :ax.grid :添加grid :ax.set_xlim(xmin=1,xmax=10) #设置坐标范围 :ax.xaxis.tick_top() #坐标轴的tick显示在图的上方 :ax.xaxis.set_label_position('top') #x坐标轴的label显示在图的上方,这一点似乎无法在交互式命令中简单实现 ==专题== ===直方图=== '''plt.hist()''' *关键词有 bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None ** bins=np.arange(2,3,0.1) ** density=Ture #默认是False,如果是Trure相当于归一化 ** histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似 ** log: bool,默认False,即y坐标轴是否选择指数刻度 ** ls(linestyle),这是个通用参数 linestyle description '-' or 'solid' solid line '--' or 'dashed' dashed line '-.' or 'dashdot' dash-dotted line ':' or 'dotted' dotted line ** color,通用参数 *输出三个列表,前两个分别是直方图的数值和bin的取值,第三个patches啥意思不清楚 Freq, bins, patches = plt.hist(x, 50, normed=1) ===图像=== *imshow() delta = 0.025 x = y = np.arange(-3.0, 3.0, delta) X, Y = np.meshgrid(x, y) Z = np.exp(-X**2 - Y**2) fig, ax = plt.subplots() im = ax.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn, origin='lower', extent=[-3, 3, -3, 3], vmax=abs(Z).max(), vmin=-abs(Z).max()) #lower 就是把index[0,0]放在左下,extent是数轴上标志的范围 plt.imshow(Z) Zm = np.ma.masked_where(Z > 1.2, Z) #mask image plt.imshow(Zm) ===contour图=== xx=np.arange(7,12,0.10) yy=np.arange(0.,3,0.05) X,Y=np.meshgrid(xx,yy) zdens=densxy(Spax_Ms[Lsel],Spax_RtoRe[Lsel],.10,0.05,xmin=7.,ymin=0.,nx=50,ny=60) # my own pro plt.contour(X,Y,zdens,[50,200,500],color='blue') plt.annotate('blue: high $\mu$ spaxels',(7.2,2.6),color='blue',size=20) contour不直接支持label和legend,要用legend,参见 [https://stackoverflow.com/questions/10490302/how-do-you-create-a-legend-for-a-contour-plot-in-matplotlib] ===colorbar=== *自己定制的一个colorbar的实际例子,两个panel,共用一个colorbar fig, axes=plt.subplots(2,1) fig.subplots_adjust(right=0.9) #fig.subplots_adjust(hspace=0.) Mbin=np.range(5)+4 MR50=np.range(5)***2 SR50=np.ones(1) age=np.log10(np.array([0.01,0.05,0.5,2.,8.])) #这个是颜色的取值 plt.subplot(2,1,1)#panel 1 plt.scatter(Mbin,MR50, c=age,cmap="rainbow") plt.ylabel('Mean ln(R50) (log Age)') plt.subplot(2,1,2)#panel 2 ax=plt.scatter(Mbin,SR50,c=age,cmap="rainbow") plt.xlabel('log(M*)') plt.ylabel('$\sigma$ ln(R50) (log Age)') position = fig.add_axes([0.92, 0.12, 0.015, .78 ])#位置[左,下,右,上] cb = fig.colorbar(ax,cax=position) #color bar cb.set_ticks(age) #设置colorbar 的ticks的位置 str=['{:.2f}'.format(v) for i,v in enumerate(10**age)] #设置colorbar的ticks的数值 cb.set_ticklabels(str) ===patch=== matplotlib.patches.Ellipse *[[ellipse]] matplotlib.patches.Ellipse(xy, width, height, angle=0, **kwargs)[https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.Ellipse.html] === 保存图片文件 === *plt.savefig("filename.png") *plt.savefig('SFH_LMC_miles.pdf',format='pdf') *保存文件一片空白 :在 plt.show() 后调用了 plt.savefig() ,在 plt.show() 后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 plt.savefig() 就会保存这个新生成的空白图片。 ::plt.show() 放在最后,或者 # gcf: Get Current Figure fig = plt.gcf() plt.show() fig1.savefig('tessstttyyy.png', dpi=100) *matplotlib.use('PS') # generate postscript output by default #在importing matplotlib.pyplot之前用压倒一切设置 *按照原始图片分辨率保存图片 if you want to save a image with 3841 x 7195 pixels, you could do the following: plt.figure(figsize=(3.841, 7.195), dpi=100) ( your code ...) plt.savefig('myfig.png', dpi=1000)
返回至“
Matplotlib
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
社群首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息