亲爱的大家,我想在放大图形后重新计算在刻度标签中写入的 xy 值,使得原点始终位于 (0,0) ,并且显然 x 和 上的值的相对距离y 轴保持不变。
我认为我需要在放大后跟踪我的图形的限制,而不是简单地从实际的 xy 刻度值中减去当前的 xmin 和 ymin 。我想这可以通过事件处理API 来实现, 正如我在这里学到的: Source1
这也是我开始 MWE 的地方:
import matplotlib.pyplot as plt
#
# Some toy data
x_seq = [x / 100.0 for x in xrange(1, 100)]
y_seq = [x**2 for x in x_seq]
#
# Scatter plot
fig, ax = plt.subplots(1, 1)
ax.scatter(x_seq, y_seq)
#
# Declare and register callbacks
def on_xlims_change(axes):
a=axes.get_xlim()
print "updated xlims: ", axes.get_xlim()
return a
def on_ylims_change(axes):
a=axes.get_ylim() …Run Code Online (Sandbox Code Playgroud) 对于某些手稿,我需要将我的图表标签准确地放置在右上角或左上角。标签需要一个边框,边框的厚度应与图形的刺相同。目前我这样做是这样的:
import matplotlib.pyplot as plt
import numpy as np
my_dpi=96
xposr_box=0.975
ypos_box=0.94
nrows=3
Mytext="label"
GLOBAL_LINEWIDTH=2
fig, axes = plt.subplots(nrows=nrows, sharex=True, sharey=True, figsize=
(380/my_dpi, 400/my_dpi), dpi=my_dpi)
fig.subplots_adjust(hspace=0.0001)
colors = ('k', 'r', 'b')
for ax, color in zip(axes, colors):
data = np.random.random(1) * np.random.random(10)
ax.plot(data, marker='o', linestyle='none', color=color)
for ax in ['top','bottom','left','right']:
for idata in range(0,nrows):
axes[idata].spines[ax].set_linewidth(GLOBAL_LINEWIDTH)
axes[0].text(xposr_box, ypos_box , Mytext, color='black',fontsize=8,
horizontalalignment='right',verticalalignment='top', transform=axes[0].transAxes,
bbox=dict(facecolor='white', edgecolor='black',linewidth=GLOBAL_LINEWIDTH))
plt.savefig("Label_test.png",format='png', dpi=600,transparent=True)
Run Code Online (Sandbox Code Playgroud)
所以我用参数控制盒子的位置:
xposr_box=0.975
ypos_box=0.94
Run Code Online (Sandbox Code Playgroud)
如果更改图的宽度,则框的位置也会更改,但是框的顶部和右侧(或左侧)脊线应始终直接位于图形刺的顶部:
import matplotlib.pyplot as plt
import numpy as np
my_dpi=96
xposr_box=0.975 …Run Code Online (Sandbox Code Playgroud) 我有兴趣优化一个函数,该函数是两个函数的卷积。主要问题是我的结果函数完全是规模化的,我不明白 np.convolve 实际做了什么。
我编写了一个小脚本,应该对两个高斯函数进行卷积,但生成的高斯函数的大小比输入函数大得多:
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
import numpy as np
# /sf/ask/1266224291/
def gauss(x, p): # p[0]==mean, p[1]==stdev, p[2]==heightg, p[3]==baseline
a = p[2]
mu = p[0]
sig = p[1]
#base = p[3]
return a * np.exp(-1.0 * ((x - mu)**2.0) / (2.0 * sig**2.0)) #+ base
p0 = [0, 0.3, 1] # Inital guess is a normal distribution
p02 = [0, 0.2, 0.5]
xp = np.linspace(-4, 4, 2000)
convolved = np.convolve(gauss(xp, p0),gauss(xp, p02), mode="same") …Run Code Online (Sandbox Code Playgroud)