“Python”的版本间差异
跳到导航
跳到搜索
无编辑摘要 |
(→画图) |
||
第101行: | 第101行: | ||
=画图= |
=画图= |
||
*参见[[Matplotlib]] |
|||
*ipython中事先执行 %matplotlib |
|||
*产生多个图形窗口 |
|||
plt.figure(1) |
|||
plt.figure(2) |
|||
*http://www.scipy-lectures.org/intro/matplotlib/matplotlib.html |
|||
*[[matplotlib]][http://www.cnblogs.com/wei-li/archive/2012/05/23/2506940.html] |
|||
*pylab combines pyplot with numpy into a single namespace. This is convenient for interactive work, but for programming it is recommended that the namespaces be kept separate, e.g.: |
|||
import numpy as np |
|||
import matplotlib.pyplot as plt |
|||
x = np.arange(0, 5, 0.1); |
|||
y = np.sin(x) |
|||
plt.clf() #clear the current figure |
|||
plt.subplot(211) |
|||
plt.plot(x, y) |
|||
plt.show() |
|||
plt.xlim(0,3) #调整坐标范围 |
|||
* options for the color characters are: |
|||
'r' = red |
|||
'g' = green |
|||
'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] |
|||
*pmesh,pcolormesh: 画二维的平面分布的图 |
|||
*colorbar |
|||
==图像== |
|||
* matplotlib里面可以用axes.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是数轴上标志的范围 |
|||
* pylot.imshow(Z) |
|||
== 保存图片文件== |
|||
*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) |
|||
=输入输出= |
=输入输出= |
2019年4月17日 (三) 03:16的版本
容器
- container(数据结构)
- 有3种: 序列,映射,集合
序列(sequence)
- 序列有6总(列表,元组,字符串,Unicode字符串,buffer对象,xrange对象)
- 序列的索引从0开始,对序列分片时包括开头,不包括结尾,比如A[3:4]只包括A列表的第四个成员
- 序列的加号操作,[1,2,3]+[4,5,6] = [1,2,3,4,5,6]
- 乘号参考加号 [1,2]*2 = [1,2,1,2]
通用序列操作
- 索引,分片(slice),加,乘,迭代,最大,最小,长度
- 索引从0开始,最后一个元素是-1(从右向左索引)
- 分片: 访问倒数3个 A[-3:],访问正数3个A[:3]
- 步长为2访问 A[0:10:2],步长可以为负,从右向左。
- 相加 [1,2]+[3,4]-->[1,2,3,4]
- 相乘 [1,2]*3 --> [1,2,1,2,1,2]
- A=[None]*10 生成长度为10的空的列表
- 成员资格:in,布尔运算符
- len (长度),min,max
- enumerate: 对一个列表或数组既要遍历索引又要遍历元素时
for index,text in enumerate(list): print index ,text
列表
- 列表的元素可以修改,字符串不能
- x=[1,1,1],x[1]=2
- del x[1]
- x[1:1]=[2,3,4] 分片赋值,注意这相当于插入
- 列表方法
- append, count, extend, index, insert
- pop (删除指定位置元素,并返回该元素,同时修改列表),实现栈的功能,入栈(push),出栈(pop),Python里面没有push,用append功能实现
- remove,reverse,sort (sort的用法要注意,参考书的39页),sorted
元组
- 不可变序列
- (1,2,3) (1,)
- 比如3*(40+2) 和3*(40+2,)的差别
- tuple函数:把列表转换为元组
- list: 把元祖装换为列表
- 元组貌似没有什么用处,列表基本满足所有需要
字符串
- 不可变
- A='python‘
% 格式化
- %s%d%f (字符串,整数,浮点数)[1]
集合
- 无序不重复集 set [2]
数组
- numpy中有个数组ndarray的数据结构 [3]
- array() 可以将列表等转化为数组
- asarray()和array差不多,但是不一定需要复制
- 如何把两个数组合并为一个数组
- np.concatenate((a, b), axis=0)
控制语句
条件
- <expression1> if <condition> else <expression2>
- 如果为真 执行 expression1,否则执行 expression2
函数
- 在参数名之前使用一个星号,就是让函数接受任意多的位置参数。[4]
lambda 函数
>>> g = lambda x:x+1
看一下执行的结果: >>>g(1) >>>2 可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体:f(x)=x+1 参见http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html
内部变量,魔方方法
- __file__
- 查找源文件位置 print(ppxf.__file__)
- __name__,__main__
- if __name__ == '__main__': test()
- __init__ (初始化方法 )
- def __init__(self)
- __all__ (显示可见功能)
- copy.__all__
- __doc__ (文档)
- print(copy.copy.__doc__)
画图
输入输出
格式
- print("%10.3f"% (356.08977))
- 在输出ndarray的时候,设置输出的数的精度
- np.set_printoptions(precision=2)
文件输入
ascii 文件
- ppxf 中根据该程序写了一个接口程序 readcol
文件输出
f = open("chain.dat", "w") k=1000 l=10 s='line'
- 格式输出
f.write("{0:4d} {1:d}\n".format(k,l)) #str.format 用法 0是第一个参数,1是第二个参数,:后面是格式, write只能是字符串 f.write('line 1: {:0>3d},{:.2f}'.format(a,b)+'\n') #0表示左边补0, >表示右对齐,3表示宽为3个字符 f.write("line 1:%3d %4.2f" %(a,b)) #C语言格式,感觉更友好
- 默认格式输出
data=[s,k,l] f.write(','.join([str(i) for i in data])+'\n') print(s.k,l,file=f)
- 关闭文件
f.close()
表格输出
table={'XCENTER': [0.2, 0.44]} ascii.write(table, formats={'XCENTER': '%12.5f'})
Packages
- glob 查找文件位置
- os 系统的一些变量
- dir=os.getenv('bc03_dir')
- os.getcwd() #获取当前目录的绝对路径
- 命令行解析工具 Argparse [5]
- 消光:sfdmap and extinction
- healpy
链接
- 带下划线变量的意义 [6]