我正在为特定实验构建一类绘图工具。我目前有两种绘图方法,一种使用imshow()的静态绘图,一种也使用imshow()的“电影”格式。
这两种方法以及任何将来的方法都将获得与我可能编写的任何特定绘图方法相同的参数。使用plot类时,我在配置对象中具有所有这些参数。
我不想在每种绘图方法中都重写代码。我想初始化一个将设置以下args的对象(我认为是AxesImage):vmin,vmax,extent_dim,Xlocs,Xlabels,Ylocs,Ylabels。
然后,我只是将该对象传递给执行其他某些特定操作的各种方法。我不知道该怎么做…
import matplotlib.pyplot as plt
data = data_dict[type] # could be real part of a complex number, phase, or the mag...
v_min, v_max = self.get_data_type_scale(data_dict, Type)
freq = data_dict['freq']
# essentially sets the aspect of the plot since the x and y resolutions could be different
extent_dim = self._get_extent(2)
# gets the labels for physical dimensions of the experiment
Xlocs,Xlabels,Ylocs,Ylabels = self._get_ticks(5,5,extent_dim)
# in the guts of a plot method, the basic idea is the call below.
plt.imshow(data[0,:,:],cmap='jet',vmin=v_min,...
vmax=v_max,origin='lower', extent = extent_dim)
plt.title('Type: %s Freq: %.3e Hz' %(Type,data_dict['freq'][0]) )
plt.xticks(Xlocs, Xlabels)
plt.yticks(Ylocs,Ylabels)
您需要先了解一些架构matplotlib
(请参阅此处,了解创始人和当前主要开发人员的长篇文章)。在backend
处理渲染和与硬件对话的层的底部。在该层的顶部artists
,其知道如何绘制通过告诉他们的自我backend
对象做什么。在该层的顶层是模仿的pyplot
状态机接口MATLAB
。
您在图中看到的所有内容在内部都以表示,Artist
并且艺术家可以包含其他艺术家。例如,Axes
对象跟踪子对象,即Artists
刺,children,标签,线条或图像等轴,而Axes
对象则是对象的子Figure
对象。当您(通过fig.canvas.draw()
)告诉人物自己绘画时,所有的子代画家都是递归绘制的。
这种设计的一个缺点是,给定的an实例Artist
可以恰好在一个图形中(并且很难在图形之间移动它们),因此您无法创建AxesImage
对象然后继续重复使用它。
这种设计也将Artists
已知信息分开。
Axes
对象了解tick的位置,标签和显示范围(通过了解Axis
对象来实现,但这会使杂草更多)。像vmin
和vmax
封装在Normalize
(doc)对象中,以进行AxesImage
跟踪。这意味着您将需要分开处理列表中所有内容的方式。
我建议在这里使用工厂式模式或咖喱式模式
类工厂:
def set_up_axes(some, arguements):
'''
Factory to make configured axes (
'''
fig, ax = plt.subplots(1, 1) # or what ever layout you want
ax.set_*(...)
return fig, ax
my_norm = matplotlib.colors.Normalize(vmin, mmax) # or write a factory to do fancier stuff
fig, ax = set_up_axes(...)
ax.imshow(..., norm=my_norm)
fig2, ax2 = set_up_axes(...)
ax2.imshow(..., norm=mynorm)
您可以包装一整套kwarg,以方便地按如下方式重复使用它们:
my_imshow_args = {'extent':[...],
'interpolation':'nearest',
'norm': my_norm,
...}
ax2.imshow(..., **my_imshow_args)
咖喱状:
def my_imshow(im, ax=None, *args, **kwargs):
if ax is None:
ax = plt.gca()
# do all of your axes set up
ax.set_xlim(..)
# set default vmin and vmax
# you can drop some of these conditionals if you don't want to be
# able to explicitly override the defaults
if 'norm' not in kwargs:
vmin = kwargs.pop('vmin', None)
vmax = kwargs.pop('vmax', None)
if vmin is None:
vmin = default_vmin # or what ever
if vmax is None:
vmax = default_vmax
my_norm = matplotlib.colors.Normalize(vmin, mmax)
kwargs['norm'] = norm
# add a similar block for `extent`
# or any other kwargs you want to change the default of
ax.figure.canvas.draw() # if you want to force a re-draw
return ax.imshow(im, *args, **kwargs)
如果您想变得聪明,可以plt.imshow
使用您的版本进行猴子补丁
plt.imshow = my_imshow
还有一个rcParams接口,它允许您以matplotlib
全局方式更改许多位的默认值。
还有另一种方法(通过partial
)来完成此任务
我正在为一个特定的实验构建一类绘图工具。我目前有两种绘图方法,一种是使用imshow()的静态绘图,另一种是使用imshow()的“电影”格式。 无论是方法还是任何未来的方法,都要获取与我可能编写的任何特定绘图方法相同的参数。在使用情节类时,我在一个配置对象中拥有所有这些参数。 我不想在每个plot方法中重写代码。我想初始化一个对象(我想是AxeImage),它将设置以下参数:vmin、vmax、
我在使用Mockito进行单元测试初始化对象时遇到了一些困难 这是我的测试代码 要测试的代码 RecTangleService、CircleService和SquareService用注释我尝试了很多选项,最终得出结论。我没有得到我错在哪里。我试着在网上搜索了很多地方,但找不到任何帮助。
我预计Spring会通过将属性“property.key”设置为“property_value”来初始化StorageConfiguration对象。 但是,我得到以下异常 org.springframework.beans.factory.beanCreationException:创建类路径资源[applicationContext.xml]中定义的名为“storage”的bean时出错:在设
图形对象是用以显示图形和用户界面元素的基本元素。下表列出了各种图形对象。 对象 描述 Root 对计算机屏幕最高级的对象 Figure 用来显示图形和用户界面的窗口 Axes 在窗口中显示图形的轴 Uicontrol 用户界面控制。执行一个对用户交互作用的函数。 Uimenu 用户定义窗口菜单 Uicontextmenu 右键单击对象时弹出的菜单 Image 二维像素基础图 Light 影响斑点和
所以我做了一个在IDE中运行良好的小JavaFX项目。但是当导出到可运行的jar中时,双击不运行。