我认为运行带有稍微修改环境的外部命令是一种非常常见的情况.这就是我倾向于这样做的方式:
import subprocess, os
my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
subprocess.Popen(my_command, env=my_env)
Run Code Online (Sandbox Code Playgroud)
我有一种直觉,觉得有更好的方法; 看起来好吗?
我看到我可以用Python 绘图:
import matplotlib
matplotlib.pyplot.plot(...)
Run Code Online (Sandbox Code Playgroud)
要么:
import pylab
pylab.plot(...)
Run Code Online (Sandbox Code Playgroud)
这两个都使用相同的matplotlib绘图代码.
那么,Python社区推荐哪一种作为更好的绘图方法呢?为什么?
我试图使用闭包来消除函数签名中的变量(应用程序将编写连接接口的Qt信号所需的所有函数,以控制大量参数到存储值的字典).
我不明白为什么使用lambda
未包装在另一个函数中的情况会返回所有情况的姓氏.
names = ['a', 'b', 'c']
def test_fun(name, x):
print(name, x)
def gen_clousure(name):
return lambda x: test_fun(name, x)
funcs1 = [gen_clousure(n) for n in names]
funcs2 = [lambda x: test_fun(n, x) for n in names]
# this is what I want
In [88]: for f in funcs1:
....: f(1)
a 1
b 1
c 1
# I do not understand why I get this
In [89]: for f in funcs2:
....: f(1)
c 1
c 1
c …
Run Code Online (Sandbox Code Playgroud) 我遇到了轴的刻度标签格式的问题.我禁用了y_axis的偏移量:
ax1.ticklabel_format(style = 'sci', useOffset=False)
Run Code Online (Sandbox Code Playgroud)
并试图把它作为科学的格式,但我得到的是:
0.00355872
Run Code Online (Sandbox Code Playgroud)
但我期待的是:
3.55872...E-2
Run Code Online (Sandbox Code Playgroud)
或类似的.
我真正想要的是:
3.55872... (on the tick label)
x 10^2 (or something similar - on the axis label)
Run Code Online (Sandbox Code Playgroud)
我可以尝试将标签设置为静态,但最后我将有几十或几百个具有不同值的图,因此需要动态设置.
另一种方法是将y_axis偏移量作为标签,但我也不知道如何做到这一点.
在python中(对于在GUI中创建的一个图形),我能够通过使用以下方式将图形保存在.jpg和.pdf下:
plt.savefig(filename1 + '.pdf')
Run Code Online (Sandbox Code Playgroud)
要么
plt.savefig(filename1 + '.jpg')
Run Code Online (Sandbox Code Playgroud)
使用一个文件我想以.pdf或.jpg保存多个数字(就像在数学实验室中完成的那样).任何人都可以帮忙吗?
我正在使用以下代码在地图上绘制数据:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from scipy.io import netcdf
ncfile = netcdf.netcdf_file(myfile.nc,'r')
lon = ncfile.variables['longitude'][:]
lat = ncfile.variables['latitude'][:]
data = ncfile.variables['mydata'][:]
ncfile.close()
m = Basemap(projection='nplaea', boundinglat=40, lon_0=270)
m.drawcoastlines(linewidth=.6, zorder=2)
m.drawparallels(np.arange(-80.,81.,20.), zorder=1)
m.drawmeridians(np.arange(-180.,181.,20.), zorder=1)
cNorm = mpl.colors.Normalize(vmin=0, vmax=np.nanmax(data))
cmap = plt.get_cmap('jet')
lons, lats = np.meshgrid(lon, lat)
x, y = m(lons, lats)
datamap = m.pcolor(x, y, data, zorder=0)
datamap.set_norm(cNorm)
plt.colorbar(datamap, cmap=cmap, norm=cNorm, …
Run Code Online (Sandbox Code Playgroud) 我的python
绘图数据仅显示x轴上的2个点.
我想要更多,但不知道如何.
x = [ datetime.datetime(1900,1,1,0,1,2),
datetime.datetime(1900,1,1,0,1,3),
...
] # ( more than 1000 elements )
y = [ 34, 33, 23, ............ ]
plt.plot( x, y )
Run Code Online (Sandbox Code Playgroud)
X轴仅显示2个间隔点.我尝试使用.xticks
但不适用于X轴.它给出了以下错误:
TypeError: object of type 'datetime.datetime' has no len()
Run Code Online (Sandbox Code Playgroud) 我正在使用python程序生成一些数据,使用matplotlib.pyplot绘制数据,然后在乳胶文件中显示图形.
我目前正在将该图保存为.png文件,但图像质量不是很好.我已经尝试过改变DPI,matplotlib.pyplot.figure(dpi=200)
但这似乎没什么区别.我也试过使用不同的图像格式,但它们看起来都有点褪色,不是很尖锐.
有没有其他人有这个问题?
任何帮助将非常感激
如果一个人跑了
from numpy import *
Run Code Online (Sandbox Code Playgroud)
然后内置的all
和其他几个函数被numpy
具有相同名称的函数遮蔽.
发生这种情况的最常见情况(没有人完全意识到)是在开始ipython
时ipython --pylab
(但你不应该这样做,使用--matplotlib
,不会将任何东西导入你的名字空间,而是设置与gui相关的魔法,代替).
一旦完成,无论如何都要调用内置函数?
这是值得做的,因为内置all
可以处理生成器,而numpy
版本不能.
我有一个如下的条形图: http://matplotlib.org/examples/api/barchart_demo.html
在这种情况下,让我们假设G1-G5组中的每一组代表每组中男性参加某些考试的平均分数,并且每组中的女性参加相同的考试.
现在让我们说我有一些与每个组相关的其他功能(平均可爱性(在1-5之间浮动)).
Ex: Avg Likability of men in G1 - 1.33
Avg Likability of women in G1 - 4.6
Avg Likability of men in G2- 5.0
.... etc...
Run Code Online (Sandbox Code Playgroud)
让我们假设1 - 不讨人喜欢,5 - 非常讨人喜欢
我想知道如何通过改变颜色示例的阴影将这个可爱性特征结合到每个条形图中:因为上面例子中第1组的人有1.33,所以他们的图形将被涂上比红色阴影更浅的红色阴影. G2,因为G2的男性有5.0可爱,他们的酒吧将是图中最暗的红色,对女性来说也是如此.
我希望我已经说清楚了.如果有人能指出matplotlib中可以实现这一目标的资源,我真的很感激,因为我对这个软件包很新.
提前致谢.