我在同一轴上绘制了多条线,并且每条线都是动态更新的(我使用set_data),问题是我不知道每条线的x和y限制.而axis.autoscale_view(True,True,True)/ axes.set_autoscale_on(True)并没有做到他们应该做的事情.如何自动缩放我的轴?
import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.add_subplot(111)
axes.set_autoscale_on(True)
axes.autoscale_view(True,True,True)
l1, = axes.plot([0,0.1,0.2],[1,1.1,1.2])
l2, = axes.plot([0,0.1,0.2],[-0.1,0,0.1])
#plt.show() #shows the auto scaled.
l2.set_data([0,0.1,0.2],[-1,-0.9,-0.8])
#axes.set_ylim([-2,2]) #this works, but i cannot afford to do this.
plt.draw()
plt.show() #does not show auto scaled
Run Code Online (Sandbox Code Playgroud)
我已经提到了这些,这个,这个.在我遇到的所有情况下,x,y限制都是已知的.我在轴上有多条线并且它们的范围发生变化,跟踪整个数据的ymax是不切实际的
一点点探索让我这样,
xmin,xmax,ymin,ymax = matplotlib.figure.FigureImage.get_extent(FigureImage)
Run Code Online (Sandbox Code Playgroud)
但在这里,我不知道如何从图实例访问FigureImage.
使用matplotlib 0.99.3
我需要使用matplotlib自动获取适合数据的图.这是我给出的代码:
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
....
lines = LineCollection(mpl.line_holder, colors=mpl.colorholder , linestyle='solid')
plt.axes().add_collection(lines)
plt.axes().set_aspect('equal', 'datalim')
plt.draw()
plt.show()
Run Code Online (Sandbox Code Playgroud)
这会创建一个绘图,但无论数据是什么,窗口总是相同的(0-~.8),即使所有数据都在该窗口之外.生成的窗口无法缩小,只有在,因此这是一个主要问题.我找不到任何设置任何类型的大小,也无法找到有关默认值的详细信息.我需要窗口自动适应数据,但我找不到任何功能(由于某种原因,autoscale_on(True)不会这样做).数据变化很大,因此设置硬限制不是一种选择.如何才能正确显示?
我想构建正态分布的直方图,并在平均值、标准差和样本量发生变化时更新绘图;类似于这里的帖子。
然而,我对这个update功能很挣扎。在上面的例子中
l, = plot(f(S, 1.0, 1.0))
Run Code Online (Sandbox Code Playgroud)
和
def update(val):
l.set_ydata(f(S, sGmax.val, sKm.val))
Run Code Online (Sandbox Code Playgroud)
使用但绘制直方图时必须如何更改?因此,我不确定如何使用返回值plt.hist,将它们正确传递给update,然后相应地更新绘图。有人能解释一下吗?
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
def update(val):
mv = smean.val
stdv = sstd.val
n_sample = round(sn.val)
# what needs to go here? how to replace xxx
xxx(np.random.normal(mv, stdv, n_sample))
plt.draw()
ax = plt.subplot(111)
plt.subplots_adjust(left=0.25, bottom=0.25)
m0 = -2.5
std0 = 1
n0 = 1000
n_bins0 = 20
nd …Run Code Online (Sandbox Code Playgroud) 对于我到目前为止看到的所有类型的情节,matplotlib当没有xlim(), ylim()给出值时,它们会自动居中.例:
import matplotlib.pyplot as plt
A_pts = [(162.5, 137.5), (211.0, 158.3), (89.6, 133.7)]
ax = plt.subplot(111)
ax.scatter(*A_pts)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是当我画一个 Polygon
ax = plt.subplot(111)
triangle = plt.Polygon(A_pts, fill=None, edgecolor='r')
ax.add_patch(triangle)
plt.show()
Run Code Online (Sandbox Code Playgroud)
绘图窗口显示[0, 1]两个轴的限制,这导致多边形不可见.我必须明确传递适当的限制,以便它将显示在绘图窗口中
ax.set_xlim(80, 250)
ax.set_ylim(120, 170)
Run Code Online (Sandbox Code Playgroud)
这是设计还是我错过了什么?