可以使用以下内容加载自定义绘图样式matplotlib:
>>> import matplotlib.pyplot as plt
>>> plt.style.use('ggplot')
Run Code Online (Sandbox Code Playgroud)
而且我知道我可以创建自己的,http://matplotlib.org/users/style_sheets.html解释了如何.
让我们说我创造了一个惊人的matplotlib风格 - 我怎么能与其他人分享?有没有办法用pip/conda或其他合适的方法做到这一点?
这些文档包括"创建自定义样式并通过调用style.use以及样式表的路径或URL来使用它们"的建议. - 所以我想我可以在一些公共git存储库上维护一个链接,如果他们放了那个URL,人们会得到最新的样式?
我有两个清单.
第一个列表已经排序(通过其他一些标准),因此列表中较早的列表越好.
sortedList = ['200', '050', '202', '203', '206', '205', '049', '047', '042', '041', '043', '044', '046', '045', '210', '211', '306', '302', '308', '309', '311', '310', '221', '220', '213', '212']
Run Code Online (Sandbox Code Playgroud)
第二个列表是允许值列表:
allowedList = ['001','002','003','004','005','006','007','008','009','010','203','204','205','206','207','212','213','215','216']
Run Code Online (Sandbox Code Playgroud)
我想选择allowedList中存在的最高排序值,而我只是想出这样做的愚蠢方法.这样的事情:
import numpy as np
temp = []
for x in allowedList:
temp.append(sortedList.index(x))
np.min(temp)
Run Code Online (Sandbox Code Playgroud)
必须有一个比这更好的方法.有任何想法吗?
当我启动Jupyter笔记本时,我已经修改了ipython_config.py我的ipython配置文件以自动加载numpy为np:
c.InteractiveShellApp.exec_lines = [
'import numpy as np',
]
Run Code Online (Sandbox Code Playgroud)
这非常有效.当我启动一个Notebook时,在第一个单元格中,我可以立即调用所有numpy库np..但是,如果我通过要点或其他方法共享此笔记本,则不会显式显示这些导入.这是次优的,因为它使得重复性不可能.
我的问题:有没有办法可以使用我导入的代码自动填充新Notebook的第一个单元格?(或者以其他类似的方式记录为Notebook发生的导入).
我可以删除exec_lines选项并预先填充我必须自己运行的代码或其他一些主要想法的解决方案:我最初在Notebook中导入的代码的清晰可重复性.
编辑
一个删除的答案可能对登陆这里的人有所帮助:我发现jupyter_boilerplate作为可安装的Notebook扩展"向Jupyter(IPython)笔记本添加可自定义的菜单项以插入代码的样板片段" - 将允许一个人轻松创建一个起始可以填写的代码段.
对MLavoie的旁注,因为"删除/锁定的帖子/评论禁用评论"
是的,你是对的:
虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分并提供参考链接.如果链接的页面发生更改,则仅链接的答案可能会无效.- 来自评论 - MLavoie 2016年 7月8日17:27
但是,你会注意到,这是一个要安装的小部件,所以这里没有相关的代码粘贴.删除上面的答案是没有用的.
让我从我的位置开始:
我用以下代码创建了上面的图像:
import matplotlib.pyplot as plt
import numpy as np
color_palette_name = 'gist_heat'
cmap = plt.cm.get_cmap(color_palette_name)
bgcolor = cmap(np.random.rand())
f = plt.figure(figsize=(12, 12), facecolor=bgcolor,)
ax = f.add_subplot(111)
ax.axis('off')
t = np.linspace(0, 2 * np.pi, 1000)
x = np.cos(t) + np.cos(6. * t) / 2.0 + np.sin(14. * t) / 3.0
y = np.sin(t) + np.sin(6. * t) / 2.0 + np.cos(14. * t) / 3.0
ax.plot(x, y, color=cmap(np.random.rand()))
ax.fill(x, y, color=cmap(np.random.rand()))
plt.tight_layout()
plt.savefig("../demo/tricky.png", facecolor=bgcolor, edgecolor=cmap(np.random.rand()), dpi=350)
Run Code Online (Sandbox Code Playgroud)
有没有办法填充当线与其他颜色交叉时创建的循环(或类似三角形的区域)?它不一定是matplotlib,它可能是scikit-image或其他一些库.
我在想一些伪代码:
for region …Run Code Online (Sandbox Code Playgroud) 我的最终目标是为我的研究小组运行一个twiki网站.
我在运行Apache等的RedHat服务器上有空间,但我没有root权限.由于我无法使用当前权限安装perl模块,因此我决定手动安装本地版本的perl.工作没问题.要使twiki工作,需要以下模块:
我安装了FreezeThaw,CGI,Error,它在GD上失败,出现以下错误:
UNRECOVERABLE ERROR无法在搜索路径中找到gdlib-config.
请安装libgd 2.0.28或更高版本.如果你想尝试
无论如何编译,请使用选项--ignore_missing_gd重新运行此脚本.
在寻找如何绕过这个最新的障碍时,我发现了一个先前的问题:如何安装带有Strawberry Perl的GD库,询问安装这个问题,并建议手动编译 gdlib.但是,您会注意到该链接已损坏.基本站点:http://www.libgd.org/基本上是说要去项目的bitbucket页面.
所以我从该页面获得了tarball并且正在尝试安装它.按照说明进行操作时会出现以下问题.README.TXT说:"如果已从CVS获取源,请运行bootstrap.sh [options]."
运行bootstrap.sh会产生:
configure.ac:64:警告:在库中找不到宏`AM_ICONV'
configure.ac:10:必需的目录./config不存在cp:不能
创建常规文件`config/config.guess':没有这样的文件或目录
configure.ac:11:安装`config/config.guess'configure.ac:11:
复制cp时出错:无法创建常规文件
`config/config.sub':没有这样的文件或目录configure.ac:11:
安装`config/config.sub'configure.ac:11:错误
复制cp:无法创建常规文件`config/install-sh':没有这样的
文件或目录configure.ac:28:安装`config/install-sh'
configure.ac:28:复制cp时出错:无法创建常规
文件`config/missing':没有这样的文件或目录configure.ac:28:
安装`config/missing'configure.ac:28:复制时出错
configure.ac:577:找不到所需的文件`config/Makefile.in'
configure.ac:577:找不到所需的文件`config/gdlib-config.in'
configure.ac:577:找不到所需的文件`test/Makefile.in'
Makefile.am:14:使用了Libtool库但是'LIBTOOL'未定义
Makefile.am:14:定义`LIBTOOL'的常用方法是添加
AC_PROG_LIBTOOL' Makefile.am:14: toconfigure.ac'并运行
aclocal' andautoconf'再次.Makefile.am:14:如果`AC_PROG_LIBTOOL'在`configure.ac'中,确保Makefile.am:14:它的定义是在
aclocal的搜索路径.cp:无法创建常规文件
`config/depcomp':没有这样的文件或目录Makefile.am:安装
`config/depcomp'Makefile.am:复制失败时出错
它说我还应该安装以下第三方库:
zlib,可从http://www.gzip.org/zlib/获得 数据压缩库 …
我正在解释我实际上希望做的事情,以防有更高级别的建议完全避免这个问题.
我有我保存在三个数组科学数据:wave,flux,error.它们代表波长,通量和误差值.阵列长约4000个元素(并且数组的索引号对应于检测器的像素数).
我做了各种各样的测试,但是对于这个例子,我们只是说我做了2次测试,我需要有效地屏蔽掉相关的数组.
masks = []
masks.append(wave > 5500.35)
masks.append(flux / wave > 8.5)
Run Code Online (Sandbox Code Playgroud)
Subquestion:我可以很容易地做2面罩案例,如:
fullmask = [x[0] and x[1] for x in zip(masks[0], masks[1])]
Run Code Online (Sandbox Code Playgroud)
但是对于任意数量的面具来说,这样做的方法是什么?
真正的问题:有没有对所有口罩适用于每一个阵列(的方式wave,flux,error),并保持原有的索引号?通过"保留原始索引号"我的意思是我原则上可以取掩蔽波阵列的平均像素数(原始索引号)?也就是说:如果wave[98:99]唯一没有掩盖的部分,平均像素将是98.5.
元问题:这是做这些事情的最好方法吗?
编辑
所以这里有一些样本数据可供使用.
wave = array([5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010,
5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021,
5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, …Run Code Online (Sandbox Code Playgroud) 我试图在python中使用argparse和logging模块.我有一个运行的程序,它有很多可能的选项,我已经成功实现了argparse模块来处理这个任务.
我想保留程序运行时每个选项所具有的值的记录,并将其发送到日志文件.我尝试了以下几件事,并将我遇到的相关错误作为评论包含在其中.
parser = argparse.ArgumentParser()
parser.add_argument('input', action="store", default='fort.13', type=str)
args = parser.parse_args()
# First try:
logging.info("Input args: " + args)
# TypeError: cannot concatenate 'str' and 'Namespace' objects
# Second try:
for x in args:
logging.info(x)
# TypeError: 'Namespace' object is not iterable
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
我正在尝试编写一个python脚本,将一个字符串发送到程序并将其放在后台.在命令行中,我可以复制并粘贴以下代码,并让它成功执行我想要的python程序:
printf "f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n" | vpfit95
Run Code Online (Sandbox Code Playgroud)
其中:vpfit95是PATH中可执行程序的别名.
我尝试过的一些排列(一次尝试一次):
import subprocess
vpfitExecutable = 'vpfit95'
String1=r'f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n'
String2=r"f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n"
String3="f\nil\ncs\n1.e-8 100.0 1.e-8\nn\n0.002\nb\n0.05\nz\n2.e-7\nx4\n5.e-7\n\n\nfort.13\nn\nn\n\n"
cmd1 = "printf \"" + String1 + "\""
cmd2 = "printf \"" + String1 + "\" | " + vpfitExecutable
cmd3 = "printf \"" + String2 + "\""
cmd4 = "printf \"" + String3 + "\""
print cmd2
p1 = subprocess.Popen([vpfitExecutable, cmd1])
p2 = subprocess.Popen([cmd2])
p3 = subprocess.Popen([vpfitExecutable, cmd3])
p4 = subprocess.Popen([vpfitExecutable, cmd4])
p4 = …Run Code Online (Sandbox Code Playgroud) 我可以设置熊猫数据框的样式:
import pandas as pd
import numpy as np
import seaborn as sns
cm = sns.diverging_palette(-5, 5, as_cmap=True)
df = pd.DataFrame(np.random.randn(3, 4))
df.style.background_gradient(cmap=cm)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何只将样式应用于最后一行。subsetbackground_gradient 调用中有一个选项,它建议我使用索引切片,但我不知道如何使最后一行具有任何样式。
这是我最接近成功的地方:
df.style.background_gradient(cmap=cm, subset=[2], axis='index')
Run Code Online (Sandbox Code Playgroud)
我有大约一千个以半合理方式命名的文件,如下所示:
aaa.ba.ca.01
aaa.ba.ca.02
aaa.ba.ca.03
aaa.ba.da.01
aaa.ba.da.02
aaa.ba.da.03
Run Code Online (Sandbox Code Playgroud)
等等.假设每个文件包含2列数字,我需要读入字典:波长,通量.部分阅读对我来说很容易,困难的是我需要加载这些词典,以便它们存储如下信息:
波长['aaa.ba.ca.01'](这是一个文件的波长)
波长['aaa.ba.ca'](所有子文件的波长,即... ca.01,... ca.02,... ca.03 - 按顺序)
波长['aaa.ba'](也包括所有"子文件"的所有波长 - 再次依次).
等等.文件名表现良好(各部分由句点分隔,分组层次结构总是相同的方向等)但文件可以在4个部分之间,或8个部分长.
我的问题:是否有一些明智的方法让python glob得到文件的名称,通过解析字符串或其他一些魔法将数据输入这些词典?我撞到了一堵砖墙.
我使用python和sqlite3来建立物理解决方案的数据库.我有很多我想要存储的LaTeX代码,但是我遇到了一个问题.很多LaTeX代码都有python解释的字符,而不仅仅是接受文字文本.例如,我尝试了以下内容来存储\ frac {} {}:
foo = "\frac{}{}"
foo2 = """\frac{}{}"""
foo3 = '''\frac{}{}'''
print foo
rac{}{}
foo
Out[10]: '\x0crac{}{}'
Run Code Online (Sandbox Code Playgroud)
我真的希望它只是作为原始的ascii字符逐字存储.有没有办法做到这一点?
我想从一个特定大小的列表(或数组)中咬一口,返回该咬的平均值,然后继续下一口,再重复一遍.有没有办法在不编写for循环的情况下执行此操作?
In [1]: import numpy as np
In [2]: x = range(10)
In [3]: np.average(x[:4])
Out[3]: 1.5
In [4]: np.average(x[4:8])
Out[4]: 5.5
In [5]: np.average(x[8:])
Out[5]: 8.5
Run Code Online (Sandbox Code Playgroud)
我正在寻找像np.average(x [:bitesize = 4])这样的东西:[1.5,5.5,8.5].
我已经看过切片阵列和逐步遍历数组,但我没有发现任何像我想要发生的事情.
我一直把我的代码放在github上,但是我遇到了一个实现障碍.我在许多计算机上运行相同的代码(包括我没有root访问权限的计算机).
一段代码(一个bash脚本)调用一些python代码,如:
python somecode.py
Run Code Online (Sandbox Code Playgroud)
shell将运行正确版本的python,但它不会找到somecode.py.
我尝试过的:
失败#1:我试图将包含somecode.py的目录和文件的完整路径添加到PATH; 无济于事.[Errno 2]没有这样的文件或目录
失败#2:如果我在顶行添加正确版本的python的完整路径,我只能使它适用于一台计算机:
#!/usr/local/cool/python/version/location
Run Code Online (Sandbox Code Playgroud)
但是这会打破它在任何其他计算机上运行.
失败#3:如果我让bash脚本说:我也可以使它工作:
python /full/path/to/github/place/somecode.py
Run Code Online (Sandbox Code Playgroud)
但同样,这仅适用于一台计算机,因为不同计算机的路径不同.
我真正想做的事:我希望能够在多台计算机上使用相同的代码(包括bash脚本和somecode.py).
欢迎任何有关如何正确执行此操作的建议.谢谢!
添加:
#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
在我的somecode.py代码的顶部;
mv somecode.py somecode
chmod +x somecode
Run Code Online (Sandbox Code Playgroud)
确保PATH具有/ full/path/to/directory/with/somecode.
Bash脚本现在只说:
somecode
Run Code Online (Sandbox Code Playgroud)
它的工作原理.