我想在Python(v2.7.12)中创建一个单独的类,它将把情节保存到文件中(这里是“test.eps”),并使用用户给出的一些标签、标题等作为参数(*args和**kwargs)。
背景故事是,我必须为科学数据创建绘图,我希望Python类简单且适合我的情况。
import matplotlib.pyplot as plt
# class of figures for channel flow
# with one subfigure
class Homfig(plt.Figure):
# *args: list of plot features for ax1.plot
# (xdata,ydata,str linetype,str label)
# **kwargs: list of axes features for ax1.set_$(STH)
# possible keys:
# title,xlabel,ylabel,xlim,ylim,xscale,yscale
def __init__(self,*args,**kwargs):
self.arg_lst = []
for key,value in kwargs.iteritems():
setattr(self,key,value)
self.arg_lst.append(key)
i=0
for value in args:
setattr(self,'plot'+str(i),value)
i=i+1
print 'list of attributes set: ', self.__dict__.keys()
def hdraw(self):
fig2=plt.figure()
ax1 = fig2.add_subplot(111)
for key in self.arg_lst:
setattr(ax1,'set_'+key,getattr(self,key))
print getattr(ax1,'set_'+key)
ax1.plot([0, 1, 2, 3, 4], [0, 1, 2, 3, 4], label="Test", color='g')
leg = ax1.legend(loc=4)
plt.savefig('test.eps')
plt.clf()
ff = Homfig(title='very important title',xlabel="xxx",ylabel="yyy")
ff.hdraw()
方法"hDraw"应该绘制我的数据并将其保存到文件中。代码没有给出错误html" target="_blank">消息,但是没有看到情节标题或轴标签的变化。属性被赋予ax1并绘制了图表。
你能帮我理解这个问题并找到解决办法吗?
我在控制台中运行脚本:pythonhomfigs。派克
输出是:属性集列表:['title','ylabel','xlabel','arg_lst']yyy xxx非常重要的标题
注意两者之间的区别
ax.set_title = "some title"
和
ax.set_title("some title")
第一个将class属性set\u title
从方法更改为字符串。第二种方法使用class方法set\u title
,该方法设置轴的标题。
使用setattr
相当于第一种情况。因此,通过用字符串覆盖它,您正在破坏有用的classmethod。之后,您(a)不能再使用该方法(b)仍然没有设置标题(甚至不能再这样做,因为(a))。
虽然我不相信您正在使用的类的结构,但一种方法是准确地调用相应的方法
for key in self.arg_lst:
getattr(ax1,'set_'+key)(getattr(self,key))
如果可以的话,我建议不要将属性存储在图类的属性中。似乎没有必要子类图
反正。相反,您可以只将args和kwargs存储在类变量中;例如,kwargs已经是一个字典,其中包含用作绘图属性的值,这样就不需要self.arg_lst
存在。
import matplotlib.pyplot as plt
# class of figures for channel flow
# with one subfigure
class Homfig():
# *args: list of plot features for ax1.plot
# (xdata,ydata,str linetype,str label)
# **kwargs: list of axes features for ax1.set_$(STH)
# possible keys:
# title,xlabel,ylabel,xlim,ylim,xscale,yscale
def __init__(self,*args,**kwargs):
self.args = args
self.kwargs = kwargs
self.fig = plt.figure()
self.ax = self.fig.add_subplot(111)
for key, val in self.kwargs.iteritems():
getattr(self.ax,'set_'+key)(val)
def hdraw(self):
self.ax.plot([0, 1, 2, 3, 4], [0, 1, 2, 3, 4], label="Test", color='g')
leg = self.ax.legend(loc=4)
def save(self, name="text"):
self.fig.savefig(name+'.eps')
ff = Homfig(title='very important title',xlabel="xxx",ylabel="yyy")
ff.hdraw()
ff.save()
plt.show()
我正在尝试开发一个应用程序,允许我在录制视频时绘制视频,然后将录制的视频和视频保存在一个mp4文件中供以后使用。另外,我想使用camera2库,特别是我需要我的应用程序在高于API 21的设备上运行,我总是避免使用不推荐的库。 我尝试了很多方法,包括FFmpeg,其中我放置了TextureView的覆盖层。getBitmap()(来自摄影机)和从画布获取的位图。它工作正常,但由于它的功能很慢,视频
问题内容: 我必须使用JavaScript创建一个表单,用户将上载JPG文件并与其他信息(例如名称,电子邮件等)一起提交。当用户单击提交时,表单中的所有信息将被加载到值对象中。对于图像文件,我将其设置为。 所以假设: 我还设置了一个servlet来处理提交,但是我不确定如何开始。上传如何进行?用户提交时,如何获取图像信息?这是屏幕截图:http : //imageshack.us/f/32/776
我是Python的大一新生,我有一个问题是如何在python中绘制直方图。 首先,我有十个间隔,根据花的花瓣长度平均划分,从最小到最大。因此,我可以根据花瓣将花分成十个间隔。 花的种类是三个,所以我想画一个直方图来描述不同种类的花在不同间隔(箱)中的分布。在同一个垃圾桶里,不同的花有不同的颜色。 我知道Matplotlib中的函数,但是我不知道如何使用它来绘制像下面这样的图片。 数据是和
我尝试了以下代码(): 但我得到了这个错误: 我期望最终的
问题内容: 我有一些Pandas DataFrame共享相同的价值规模,但具有不同的列和索引。调用时,我得到了单独的绘图图像。我真正想要的是将它们与子图放置在同一块图上,但是不幸的是,我未能提出解决方案,并且希望获得一些帮助。 问题答案: 您可以使用matplotlib手动创建子图,然后使用关键字在特定子图上绘制数据框。例如,对于4个子图(2x2): 这是一个包含不同子图轴的数组,您可以仅通过in
本文向大家介绍python 实现在一张图中绘制一个小的子图方法,包括了python 实现在一张图中绘制一个小的子图方法的使用技巧和注意事项,需要的朋友参考一下 有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法。 以上这篇python 实现在一张图中绘制一个小的子图方法就是小编分享给大家的