我想制作一组可用于为不断增长的线条绘制动画的帧.在过去,我总是使用plt.draw()和set_ydata()来重绘y数据,因为它随着时间的推移而变化.这一次,我希望绘制一条"增长"的线,随着时间的推移在图形中移动.因此,set_ydata不起作用(xdata正在改变长度).例如,
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.figure()
for n in range(len(x)):
plt.plot(x[:n], y[:n], color='k')
plt.axis([0, 10, 0, 1])
plt.savefig('Frame%03d.png' %n)
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但随着它的扩展它变得非常慢.有更快的方法吗?
在编写脚本时,我发现了numpy.random.choice函数.我实现它是因为它比等效的if语句更清晰.但是,在运行脚本后,我意识到这是显著比if语句慢.
以下是MWE.第一种方法需要0.0秒,而第二种方法需要7.2秒.如果你扩展i循环,你会看到random.choice的速度变慢了.
任何人都可以评论为什么random.choice这么慢?
import numpy as np
import numpy.random as rand
import time as tm
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
tmp = rand.rand()
if tmp < 0.25:
var = 1
elif tmp < 0.5:
var = -1
print('Time: %.1f s' %(tm.time() - tStart))
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
var = rand.choice([-1, 0, 1], p = [0.25, 0.5, 0.25])
print('Time: %.1f s' %(tm.time() …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一些出版品质的图,但我遇到了一个小问题.默认情况下,matplotlib轴标签和图例条目的加权比轴刻度标记重.无论如何强制轴标签/图例条目与刻度线的重量相同?
import matplotlib.pyplot as plt
import numpy as np
plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})
x = np.linspace(0,2*np.pi,100)
y = np.sin(x)
fig = plt.figure(figsize=(5,5))
p1, = plt.plot(x,y)
p2, = plt.plot(x,x**2)
plt.xlabel('x-Axis')
plt.ylabel('y-Axis')
plt.legend([p1,p2],['Sin(x)','x$^2$'])
plt.gcf().subplots_adjust(left=0.2)
plt.gcf().subplots_adjust(bottom=0.15)
plt.savefig('Test.eps',bbox_inches='tight',format='eps')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我可以使用数学模式,但问题(烦恼)是当我有一个标签的句子,即,
plt.xlabel('$\mathrm{This is the x-axis}$')
Run Code Online (Sandbox Code Playgroud)
它把所有这一切都搞砸了.我可以通过使用来解决它
plt.xlabel('$\mathrm{This\: is\: the\: x-axis}$')
Run Code Online (Sandbox Code Playgroud)
但这需要很多标点符号.我希望有一些我可以改变的东西可以让我绕过\mathrm{}格式,并使用标准的TeX格式.
我尝试的另一个选项是使用\text而不是\mathrm,但似乎Python的解释器在没有加载包amsmath的情况下无法识别.我也尝试过:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})
matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}']
x = np.linspace(0,2*np.pi,100)
y = np.sin(x)
fig = …Run Code Online (Sandbox Code Playgroud) 我试图用置信带绘制一些数据.我正在为每个数据流创建两个图:plot和fill_between.我希望图例看起来类似于图表,其中每个条目都有一个框(置信区域的颜色),中间有一条较暗的实线.到目前为止,我已经能够使用补丁来创建矩形图例键,但我不知道如何实现中心线.我尝试使用舱口,但无法控制位置,厚度或颜色.
我最初的想法是尝试组合两个补丁(Patch和2DLine); 然而,它还没有奏效.有更好的方法吗?我的MWE和当前数字如下所示.
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,1,11)
y = np.linspace(0,1,11)
plt.plot(x, y, c='r')
plt.fill_between(x, y-0.2, y+0.2, color='r', alpha=0.5)
p = mpatches.Patch(color='r', alpha=0.5, linewidth=0)
plt.legend((p,), ('Entry',))
Run Code Online (Sandbox Code Playgroud)

我有一个由 6 个形状为 (2, 3) 的子图组成的图形。我想删除所有内部刻度线,只有左侧和底部显示刻度标签。
默认刻度线:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(2,3,
sharex = True,
sharey = True)
plt.subplots_adjust(hspace = 0,
wspace = 0)
Run Code Online (Sandbox Code Playgroud)
产生这个:

在查看了无数示例后,我设法删除了内部刻度线,但现在出现了新的(附加的)刻度线标签。我找到的删除刻度标签的解决方案不起作用,它们删除了所有 x(或 y)刻度标签,而不仅仅是指定的轴。
新代码:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(2,3,
sharex = True,
sharey = True)
plt.subplots_adjust(hspace = 0,
wspace = 0)
ax[0,0].xaxis.set_ticks_position('top')
ax[0,0].yaxis.set_ticks_position('left')
ax[0,1].xaxis.set_ticks_position('top')
ax[0,1].yaxis.set_ticks_position('none')
ax[0,2].xaxis.set_ticks_position('top')
ax[0,2].yaxis.set_ticks_position('right')
ax[1,0].xaxis.set_ticks_position('bottom')
ax[1,0].yaxis.set_ticks_position('left')
ax[1,1].xaxis.set_ticks_position('bottom')
ax[1,1].yaxis.set_ticks_position('none')
ax[1,2].xaxis.set_ticks_position('bottom')
ax[1,2].yaxis.set_ticks_position('right')
Run Code Online (Sandbox Code Playgroud)
产生这个:

我希望最终输出是这样的:

注意左侧和底部的标签,但在周边有刻度线。
我有一个有两种线条样式的图(实线和虚线).我希望它们可用于相同的图例条目.下面的代码生成典型的图例,有两个条目.
import matplotlib.pyplot as plt
import numpy as np
xy = np.linspace(0,10,10)
plt.figure()
plt.plot(xy,xy, c='k', label='solid')
plt.plot(xy,xy+1, c='k', ls='dashed', label='dashed')
plt.plot(xy,xy-1, c='k', ls='dashed')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想要的是类似的东西:

我曾尝试过与代理艺术家一起玩,但似乎无法获得两条线,彼此相互偏移以显示一个条目.