这个matlab代码对应的matplotlib代码是什么

2024-04-25 05:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图离开matlab,转而使用python+matplotlib。然而,我还没有真正弄清楚matplotlib等价于matlab的“handles”是什么。这里有一些matlab代码,我在这里返回句柄,这样我就可以更改某些属性。这段代码使用matplotlib的确切等价物是什么?我经常在matlab中使用句柄的“Tag”属性,并使用“findobj”。这也可以用matplotlib实现吗?在

% create figure and return figure handle
h = figure();
% add a plot and tag it so we can find the handle later
plot(1:10, 1:10, 'Tag', 'dummy')
% add a legend
my_legend = legend('a line')
% change figure name
set(h, 'name', 'myfigure')
% find current axes
my_axis = gca();
% change xlimits
set(my_axis, 'XLim', [0 5])
% find the plot object generated above and modify YData
set(findobj('Tag', 'dummy'), 'YData', repmat(10, 1, 10))

Tags: and代码属性plotmatplotlibmytagfind
3条回答
# create figure and return figure handle
h = figure()

# add a plot but tagging like matlab is not available here. But you can
# set one of the attributes to find it later. url seems harmless to modify.
# plot() returns a list of Line2D instances which you can store in a variable  
p = plot(arange(1,11), arange(1,11), url='my_tag')

# add a legend
my_legend = legend(p,('a line',)) 
# you could also do 
# p = plot(arange(1,11), arange(1,11), label='a line', url='my_tag')
# legend()
# or
# p[0].set_label('a line')
# legend()

# change figure name: not sure what this is for.
# set(h, 'name', 'myfigure') 

# find current axes
my_axis = gca()
# change xlimits
my_axis.set_xlim(0, 5)
# You could compress the above two lines of code into:
# xlim(start, end)

# find the plot object generated above and modify YData
# findobj in matplotlib needs you to write a boolean function to 
# match selection criteria. 
# Here we use a lambda function to return only Line2D objects 
# with the url property set to 'my_tag'
q = h.findobj(lambda x: isinstance(x, Line2D) and x.get_url() == 'my_tag')

# findobj returns duplicate objects in the list. We can take the first entry.
q[0].set_ydata(ones(10)*10.0) 

# now refresh the figure
draw()

还有一个findobj方法也是matplotlib:

import matplotlib.pyplot as plt
import numpy as np

h = plt.figure()
plt.plot(range(1,11), range(1,11), gid='dummy')
my_legend = plt.legend(['a line'])
plt.title('myfigure')  # not sure if this is the same as set(h, 'name', 'myfigure')
my_axis = plt.gca()
my_axis.set_xlim(0,5)
for p in set(h.findobj(lambda x: x.get_gid()=='dummy')):
    p.set_ydata(np.ones(10)*10.0)
plt.show()

注意,plt.plot中的gid参数通常由matplotlib使用(仅当后端设置为“svg”时)。它使用gid作为某些分组元素的id属性(比如line2dpatchtext)。在

我没有用过matlab,但我想这是你想要的

import matplotlib
import matplotlib.pyplot as plt

x = [1,3,4,5,6]
y = [1,9,16,25,36]
fig = plt.figure()
ax = fig.add_subplot(111)  # add a plot
ax.set_title('y = x^2')
line1, = ax.plot(x, y, 'o-')       #x1,y1 are lists(equal size)
line1.set_ydata(y2)                #Use this to modify Ydata
plt.show()

当然,这只是一个基本的情节,还有更多的去吧。去吧尽管this找到您想要的图形并查看其源代码。在

相关问题 更多 >