小编Ale*_*ary的帖子

Matplotlib中的内联标签

在Matplotlib中,制作一个传奇(example_legend()下图)并不太难,但我认为将标签放在正在绘制的曲线上是更好的风格(example_inline()如下图所示).这可能非常繁琐,因为我必须手动指定坐标,如果我重新格式化绘图,我可能需要重新定位标签.有没有办法在Matplotlib中自动生成曲线上的标签?能够以与曲线角度对应的角度定向文本的加分点.

import numpy as np
import matplotlib.pyplot as plt

def example_legend():
    plt.clf()
    x = np.linspace(0, 1, 101)
    y1 = np.sin(x * np.pi / 2)
    y2 = np.cos(x * np.pi / 2)
    plt.plot(x, y1, label='sin')
    plt.plot(x, y2, label='cos')
    plt.legend()
Run Code Online (Sandbox Code Playgroud)

带图例的图

def example_inline():
    plt.clf()
    x = np.linspace(0, 1, 101)
    y1 = np.sin(x * np.pi / 2)
    y2 = np.cos(x * np.pi / 2)
    plt.plot(x, y1, label='sin')
    plt.plot(x, y2, label='cos')
    plt.text(0.08, 0.2, 'sin')
    plt.text(0.9, 0.2, 'cos')
Run Code Online (Sandbox Code Playgroud)

带内联标签的图

charts matplotlib coordinates

77
推荐指数
4
解决办法
6万
查看次数

是自我.__ dict __.更新(**kwargs)好或坏的风格?

在Python中,假设我有一些继承自Shape的类Circle.形状需要x坐标和y坐标,此外,圆需要半径.我希望能够通过做类似的事情来初始化Circle,

c = Circle(x=1., y=5., r=3.)
Run Code Online (Sandbox Code Playgroud)

Circle继承自shape,因此我需要使用命名参数__init__,因为不同的类需要不同的构造函数.我可以手动设置x,y和r.

class Shape(object):
    def __init__(self, **kwargs):
        self.x = kwargs['x']
        self.y = kwargs['y']

class Circle(Shape):
    def __init__(self, **kwargs):
        super(Circle, self).__init__(**kwargs)
        self.r = kwargs['r']
Run Code Online (Sandbox Code Playgroud)

或者,我可以自动使用我的圆圈属性 self.__dict__.update(kwargs)

class Shape(object):
    def __init__(self, **kwargs):
        self.__dict__.update(**kwargs)

class Circle(Shape):
    def __init__(self, **kwargs):
        super(Circle, self).__init__(**kwargs)
Run Code Online (Sandbox Code Playgroud)

这样做的好处是代码更少,我不需要维护样板self.foo = kwargs['foo'].缺点是Circle不需要哪些参数.这被认为是作弊还是这种好风格(只要Circle的界面有详细记录)?


谢谢大家,感谢您的深思熟虑.在self.__dict__.update(**kwargs)我试验组织我的代码时,hack对我很有用,但我会确保通过明确地正确传递参数并在生产代码中进行明确的错误检查来替换它.

python oop dictionary

41
推荐指数
3
解决办法
2万
查看次数

在出现第一个错误时停止 scipy odeint

编辑:这个问题是由于一个错误引起的,已在 Scipy 0.15 中修复

当我开发和测试代码时,我可能会犯一个简单的错误,例如 NameError。当我使用 scipy.integrate.odeint 时,odeint 将打印错误消息,但会继续集成我请求的多个时间步,因此我收到许多相同的错误消息。我认为它具有这种行为,以便在发生算术错误(例如除以零)时它可以继续进行,但这对于编程错误来说是无益的行为。

有没有办法让 scipy 在第一条错误消息后停止?如果我能让它因错误而不是算术异常而停止,那就最好了。

python scipy odeint

5
推荐指数
1
解决办法
1025
查看次数

标签 统计

python ×2

charts ×1

coordinates ×1

dictionary ×1

matplotlib ×1

odeint ×1

oop ×1

scipy ×1