- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在查看 custom projection matplotlib 画廊中的示例——我正在尝试修改它以仅绘制南半球。我已将必要的 [-pi/2,pi/2] 限制调整为 [-pi/2,0]。现在我一直在看:
def _gen_axes_patch(self):
"""
Override this method to define the shape that is used for the
background of the plot. It should be a subclass of Patch.
In this case, it is a Circle (that may be warped by the axes
transform into an ellipse). Any data and gridlines will be
clipped to this shape.
"""
#return Circle((0.5, 0.5), 0.5)
return Wedge((0.5,0.5), 0.5, 180, 360)
def _gen_axes_spines(self):
return {'custom_hammer':mspines.Spine.circular_spine(self,
(0.5, 0.5), 0.25)}
如您所见,我用楔形替换了圆形补丁。这是投影图当前的样子:
书脊仍然遵循圆/椭圆——我如何指定我希望书脊遵循楔形的边界?
我不确定如何最好地修改脊柱,因此非常感谢任何帮助!
谢谢,
亚历克斯
最佳答案
郑重声明,如果您还是 Python 新手,您肯定会直接跳入游泳池的深处。 (感谢您直接参与!)
您正在做的事情需要对 matplotlib 的内部工作原理有相当详细的了解,这是一个相当复杂的库。
话虽如此,这是快速学习的好方法!
对于这样的事情,您需要了解事物结构的内部架构,而不仅仅是“公共(public)”api。
对于其中的大部分内容,您必须深入挖掘并“使用源代码”。对于任何项目,内部工作的文档就是代码本身。
话虽如此,对于一个简单的案例来说,它非常简单。
import numpy as np
from matplotlib.projections.geo import HammerAxes
import matplotlib.projections as mprojections
from matplotlib.axes import Axes
from matplotlib.patches import Wedge
import matplotlib.spines as mspines
class LowerHammerAxes(HammerAxes):
name = 'lower_hammer'
def cla(self):
HammerAxes.cla(self)
Axes.set_xlim(self, -np.pi, np.pi)
Axes.set_ylim(self, -np.pi / 2.0, 0)
def _gen_axes_patch(self):
return Wedge((0.5, 0.5), 0.5, 180, 360)
def _gen_axes_spines(self):
path = Wedge((0, 0), 1.0, 180, 360).get_path()
spine = mspines.Spine(self, 'circle', path)
spine.set_patch_circle((0.5, 0.5), 0.5)
return {'wedge':spine}
mprojections.register_projection(LowerHammerAxes)
if __name__ == '__main__':
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='lower_hammer')
ax.grid(True)
plt.show()
让我们深入研究一下 _get_axes_spines
方法:
def _gen_axes_spines(self):
"""Return the spines for the axes."""
# Make the path for the spines
# We need the path, rather than the patch, thus the "get_path()"
# The path is expected to be centered at 0,0, with radius of 1
# It will be transformed by `Spine` when we initialize it
path = Wedge((0, 0), 1.0, 180, 360).get_path()
# We can fake a "wedge" spine without subclassing `Spine` by initializing
# it as a circular spine with the wedge path.
spine = mspines.Spine(self, 'circle', path)
# This sets some attributes of the patch object. In this particular
# case, what it sets happens to be approriate for our "wedge spine"
spine.set_patch_circle((0.5, 0.5), 0.5)
# Spines in matplotlib are handled in a dict (normally, you'd have top,
# left, right, and bottom, instead of just wedge). The name is arbitrary
return {'wedge':spine}
现在有几个问题:
但是,当我们看一下 HammerAxes
的结构时,您会注意到很多这些东西(尤其是轴补丁的居中)有效地硬编码到转换中。 (正如他们在评论中提到的那样,它只是一个“玩具”示例,并且假设您始终处理整个地球会使转换中的数学运算变得更加简单。)
如果您想解决这些问题,您需要调整 HammerAxes._set_lim_and_transforms
中的几个不同的转换。
但是,它按原样运行得相当好,所以我将把它作为练习留给读者。 :)(请注意,这部分有点难,因为它需要详细了解 matplotlib 的转换。)
关于python - matplotlib:半球/楔形的自定义投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9689009/
这应该是一些简单的几何图形:如何计算在下面的代码中绘制线条的点,使其成为 2D 锥形或楔形? import flash.geom.Point; //draw circle var mc=new Spr
如何在R中输出楔形符号? 例如,如果我想要 C ∧ W,我可能会在 LaTeX 中使用 $𝐶\wedge 𝑊$。当我必须使用 R 编写因子结构图时,这很有用。 最佳答案 楔形运算符显然不包含在 R
我正在使用楔形图绘制数据(同样适用于补丁/圆圈/等)。这很好用,但我想绘制数据对数图。 对于普通地 block ,有 plt.yscale('log') plt.xscale('log') 但这在这里
我一直在尝试用 CSS 制作这个形状。 理想情况下,它将跨越浏览器窗口的整个长度,并可能延伸到视野之外以支持更大的屏幕,并且还居中以便 Angular 不会改变。 谁有解决办法? 此外,我认为我可能会
我正在尝试使用最少量的代码/迭代在 Flash 中绘制弧线。我在下面从旧的 AS2 示例移植了此方法,但它需要通过多个步骤进行循环才能使其看起来流畅,我宁愿避免这种情况。我看到 AS3 有一个“cur
我是一名优秀的程序员,十分优秀!