我想沿着x轴水平移动一些刻度标签,而不移动相应的刻度.
更具体地说,当旋转标签时plt.setp,标签文本的中心保持与刻度线对齐.我想将这些标签向右移动,以便标签的近端对齐,如下图所示.

我知道这篇文章和这一个,但答案很有意思组装机,而不是严格的问题的答案.
我的代码:
import matplotlib.pyplot as plt
import numpy as np
import datetime
# my fake data
dates = np.array([datetime.datetime(2000,1,1) + datetime.timedelta(days=i) for i in range(365*5)])
data = np.sin(np.arange(365*5)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365*5) /3
# creates fig with 2 subplots
fig = plt.figure(figsize=(10.0, 6.0))
ax = plt.subplot2grid((2,1), (0, 0))
ax2 = plt.subplot2grid((2,1), (1, 0))
## plot dates
ax2.plot_date( dates, data )
# rotates labels
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=-45 )
# try to shift labels …Run Code Online (Sandbox Code Playgroud) 我使用MPI(mpi4py)脚本(在单个节点上),该脚本可用于非常大的对象。为了让所有进程都可以访问该对象,我通过分发了该对象comm.bcast()。这会将对象复制到所有进程,并占用大量内存,尤其是在复制过程中。因此,我想共享诸如指针之类的东西,而不是对象本身。我发现一些memoryview有用的功能有助于增强流程中对象的工作。同样,对象的实际内存地址也可以通过memoryview对象字符串表示形式进行访问,并且可以这样分配:
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
if rank:
content_pointer = comm.bcast(root = 0)
print(rank, content_pointer)
else:
content = ''.join(['a' for i in range(100000000)]).encode()
mv = memoryview(content)
print(mv)
comm.bcast(str(mv).split()[-1][: -1], root = 0)
Run Code Online (Sandbox Code Playgroud)
打印:
<memory at 0x7f362a405048>
1 0x7f362a405048
2 0x7f362a405048
...
Run Code Online (Sandbox Code Playgroud)
这就是为什么我认为必须有一种方法可以在另一个过程中重构对象。但是,我在文档中找不到有关如何执行此操作的线索。
简而言之,我的问题是:是否可以在中同一节点上的进程之间共享对象mpi4py?
我试图在python循环中执行几个批处理脚本.然而,所述bat-scripts包含cmd /K并因此不"终止"(因为没有更好的词).因此python调用第一个脚本并永远等待...
这是一个伪代码,可以让我了解我要做的事情:
import subprocess
params = [MYSCRIPT, os.curdir]
for level in range(10):
subprocess.call(params)
Run Code Online (Sandbox Code Playgroud)
我的问题是:"是否有一个pythonic解决方案来恢复控制台命令并恢复循环?"
编辑:我现在意识到可以启动子进程并继续使用,而无需等待它们返回
Popen(params,shell=False,stdin=None,stdout=None,stderr=None,close_fds=True)
然而,这将几乎同时启动我的整个循环.有没有办法等待子进程执行其任务,并在它到达cmd /K并变为空闲时返回.
我一直在尝试使用有限元方法为2D热流问题创建一系列表面图.在每个时间步,我保存了一个图而不是整个矩阵,以便更有效率.
我FuncAnimation在matplotlib.animation库中遇到了麻烦,所以我决定每次都渲染一个曲面图,将曲面图保存为.png文件,然后使用它来读取该图像pyplot.imread.从那里,我想将每个图像存储到一个列表中,以便我可以使用ArtistAnimation(示例).然而,它不是制作动画,而是当我打印imgplot到屏幕时,我得到两个单独的空白图,然后我的表面图.pngs .
此外,当我尝试保存动画时,我收到以下错误消息:
AttributeError: 'module' object has no attribute 'save'.
Run Code Online (Sandbox Code Playgroud)
任何帮助从当前目录中读取一组.pngs,将它们保存在列表中,然后使用ArtistAnimation"动画"那些.pngs将非常感激.我不需要任何花哨的东西.
(注意 - 我必须使代码自动化,所以不幸的是我不能使用外部源来动画我的图像,如iMovie或ffmpeg.)
以下是我的代码:
from numpy import *
from pylab import *
import matplotlib.pyplot as plt
import matplotlib.image as mgimg
from matplotlib import animation
## Read in graphs
p = 0
myimages = []
for k in range(1, len(params.t)):
fname = "heatflow%03d.png" %p
# read in pictures
img = mgimg.imread(fname)
imgplot = plt.imshow(img)
myimages.append([imgplot])
p += 1
## …Run Code Online (Sandbox Code Playgroud) 有什么方法可以将文本锚定或锁定到标记吗?当使用 提供的交互式缩放时pyplot,文本会超出范围,如图所示。
import matplotlib.pyplot as plt
x=[2,4]
y=[2,3]
fig, ax = plt.subplots()
ax.plot(x, y, 'ro',markersize=23)
offset = 1.0
ax.set_xlim(min(x)-offset, max(x)+ offset)
ax.set_ylim(min(y)-offset, max(y)+ offset)
for x,y in zip(x,y):
ax.annotate(str(y), xy=(x-0.028,y-0.028))
plt.show()
Run Code Online (Sandbox Code Playgroud)

我想在参数列表(比如 50)上创建一个循环。循环应该由多个处理器(比如 4 个)并行共享。我希望每个处理器从列表中选择下一个参数并使用此参数调用函数。函数评估预计花费的时间不等。这是我希望如何安排作业的草图:
pr0 ===job0=== | ========job5======= |
pr1 =====job1======= | ==job7== |
pr2 ===job2=== | ===job6=== |
pr3 =job3= | =========job4======== |
Run Code Online (Sandbox Code Playgroud)
我希望每个进程都知道当前正在运行的作业的 ID,以便它可以选择列表中的下一个元素并开始使用它。到目前为止我尝试过的是使用comm.allgather():
from mpi4py import MPI
from random import random
from time import sleep
##### function that just wastes 0-10sec of our time
def run_test(counter, param ):
time_to_waste = random() * 10
sleep( time_to_waste )
print " run job nr: ", counter, "with parameters: ", param, "in :", time_to_waste, "s"
return
############# MAIN
if …Run Code Online (Sandbox Code Playgroud) 上次我使用 shapely 时,我真的有这种美妙的导入和飞行的感觉。然而最近,我在这个模块中遇到了一个相当不直观的行为,因为我试图在 3D 空间中找到线段和三角形之间的交点。让我们定义一个线段和一个三角形,如下所示:
l = LineString([[1,0.5,0.5],[3,0.5,0.5]])
p = Polygon([[1.2,0.0,0.],[2.2,1.0,0.],[2.8,0.5,1.]])
Run Code Online (Sandbox Code Playgroud)
为了得到它们的交点,我使用了l.intersection(p),并期望有一个点,即POINT Z (POINT Z (2 0.5 0.25))。如下图蓝点所示:
相反,我得到的是LINESTRING Z (1.7 0.5 0.25, 2.8 0.5 1)- 下面的红线 - 坦率地说,我对它应该代表什么感到非常困惑。

奇怪的是,当多边形/三角形位于 xz 平面并与线段正交时,该函数的行为与预期一致。然而,当三角形“倾斜”时,它会返回一条线。这暂时让我相信它返回了直线和三角形边界框之间的交点。上面的红线证明事实并非如此。
因此,解决这个问题的方法是阅读这个非常有启发性的网页,并调整他们的C++代码以处理形状良好的对象。该intersection方法非常适合检查直线是否穿过多边形,并且下面的函数可以找到感兴趣的点。
def intersect3D_SegmentPlane(Segment, Plane):
# Points in Segment: Pn Points in Plane: Qn
P0, P1 = np.array(Segment.coords)
Q0, Q1, Q2 = np.array(Plane.exterior)[:-1]
# vectors in Plane
q1 = Q1 - Q0
q2 = Q2 …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种将数字或文本插入标记的方法。matplotlib.pyplot.plot(*args, **kwargs)文档中没有关于这一点的内容。
默认缩放级别将标记放置在边缘上,从而减少了用于刻录文本的可用空间。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4 ,5]
y = [1, 4, 9, 6, 10]
plt.plot(x, y, 'ro',markersize=23)
plt.show()
Run Code Online (Sandbox Code Playgroud) python ×8
matplotlib ×4
mpi ×2
mpi4py ×2
text ×2
animation ×1
annotate ×1
batch-file ×1
geometry ×1
label ×1
loops ×1
marker ×1
markers ×1
memoryview ×1
plot ×1
python-2.7 ×1
python-3.x ×1
scipy ×1
shapely ×1
subprocess ×1
vector ×1
windows ×1