小编hit*_*tzg的帖子

导入matplotlib.pyplot时的Matplotlib TypeError

我刚用conda来更新我的Anaconda安装,Matplotlib从v1.4.0升级到v1.4.2.但是现在我使用Matplotlib.pyplot的所有Python作业都抛出异常.

即使是简单的命令:

import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

抛出TypeError异常,说:

无法从Unicode对象返回std :: string

回溯告诉我在font_manager.py文件中发生了异常,这里:

try:
    font = ft2font.FT2Font(fpath)
except RuntimeError:
    verbose.report("Could not open font file %s" % fpath)
    continue
except UnicodeError:
    verbose.report("Cannot handle unicode filenames")
    continue
Run Code Online (Sandbox Code Playgroud)

特别是在线font = ft2font.FT2Font(fpath).

我尝试回到Matplotlib的v1.4.0,但它没有解决问题.

然后我编辑了font_manager.py来添加一般的异常情况:

except:
    verbose.report("Some stupid error occurred")
    continue
Run Code Online (Sandbox Code Playgroud)

希望它会暂时解决它所遇到的问题,但是这个错误或者与之类似的错误会在以后发生.所以我删除了异常,但错误现在仍然发生在代码的后一点(所以如果我运行import matplotlib.pyplot as plt它,但执行其他命令可能会失败).

我使用Matplotlib全天生成/更新数百个图表,现​​在一切都坏了.

请帮忙!谢谢!

matplotlib stdstring typeerror python-2.7

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

更新后的Seaborn盒子图破了0.6.0

我最近将我的seaborn从0.5.1更新到新的0.6.0版本.我一直在使用seaborn在python笔记本中制作盒子图和小提琴图,现在我似乎无法使我的代码工作了.Matplotlib plt.boxplot仍然适用于我的数据.特别是,当我有一组列表或数组,其中子集的大小不同时,似乎会出现问题.

例如:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.array([1,3,4]), ([1,2])
plt.boxplot(x) #this works



 import numpy as np
 import matplotlib.pyplot as plt
 import seaborn as sns
 x = np.array([1,3,4]), ([1,2])
 sns.boxplot(x) #doesn't work
Run Code Online (Sandbox Code Playgroud)

这是我尝试seaborn box plot时得到的错误

ValueError:boxplot统计信息列表和`position`值必须具有相同的长度

在新的seaborn教程中,它说sns.boxplot应该采取一切措施plt.boxplot.有没有人有同样的更新问题?有没有办法使这项工作?如果没有,有没有办法安装0.6.0版本和0.5.1版本并在某些笔记本电脑中调用特定版本?

matplotlib boxplot seaborn violin-plot

4
推荐指数
1
解决办法
2742
查看次数

无法理解**运算符的行为

我突然遇到了这个,我无法理解为什么会这样!

在python提示符下,使用**3以后的运算符,如下所示给出错误的结果.即

>>> 2**2**2
16
>>> 3**3**3
7625597484987L
>>> 4**4**4
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096L
Run Code Online (Sandbox Code Playgroud)

然后我认为我必须使用括号,所以我使用它,它给出了正确的结果.

>>>(3**3)**3
19683
Run Code Online (Sandbox Code Playgroud)

但是,//操作员在这种操作中支持并给出正确的结果,即

>>> 4//4//4
0
>>> 40//4//6
1
Run Code Online (Sandbox Code Playgroud)

请帮我理解.

python

3
推荐指数
1
解决办法
119
查看次数

peewee:重用动态创建的模型

在我的应用程序中,我有一个模型,我只在运行时知道它的列数。使用Factory如下函数创建模型可以很好地解决这个问题。但是,如果我多次使用它(可能有不同的字段),外键的创建ref会引发异常:

AttributeError: Foreign key: dynamictable.ref related name "dynamictable_set" 
collision with foreign key using same related_name.
Run Code Online (Sandbox Code Playgroud)

该消息非常清楚,当我related_name在创建外键时设置参数时没有错误。

问题

  1. 为什么我不能related_name第二次使用相同的?我也需要重新定义StaticTable吗?

  2. 有没有更好的方法来使用动态模型写入多个数据库?

最小的、可重现的例子:

import peewee

database_proxy = peewee.Proxy()

class BaseModel(peewee.Model):
    class Meta:
        database = database_proxy

class StaticTable(BaseModel):
    foo = peewee.DoubleField()

def Factory(fields):
    class DynamicTable(BaseModel):
        ref = peewee.ForeignKeyField(StaticTable)
    for field in fields:
        peewee.DoubleField().add_to_class(DynamicTable, field)
    return DynamicTable 

def Test(fname, fields):
    db = peewee.SqliteDatabase(fname)
    database_proxy.initialize(db)
    db.create_table(StaticTable)
    dyntable = Factory(fields)
    db.create_table(dyntable)
    db.close()


Test(':memory:', ['foo', 'bar'])
Test(':memory:', …
Run Code Online (Sandbox Code Playgroud)

python-2.7 peewee

3
推荐指数
1
解决办法
1046
查看次数

在matplotlib中以对象为导向访问fill_between阴影区域

我正试图访问matplotlib图的阴影区域,以便我可以删除它而不用plt.cla()[因为cla()清除包括轴标签在内的整个轴]

如果我正在策划我的行,我可以这样做:

import matplotlib.pyplot as plt
ax = plt.gca()
ax.plot(x,y)
ax.set_xlabel('My Label Here')

# then to remove the line, but not the axis label
ax.lines.pop()
Run Code Online (Sandbox Code Playgroud)

但是,为了绘制我执行的区域:

ax.fill_between(x, 0, y)
Run Code Online (Sandbox Code Playgroud)

所以ax.lines是空的.

我该如何清除这个阴影区域?

python plot matplotlib fill

3
推荐指数
1
解决办法
885
查看次数

一种更简单的方式来引用所需字典(Python)的索引?

问题感觉它的措辞很差,如果你同意的话可以随意调整它,并且知道如何更好地表达它.

我有以下代码:

def owned_calendars(cal_items):
    """Returns only the calendars in which the user is marked as "owner"

    """
    owner_cals = []
    for entry in cal_items:
        if entry['accessRole'] == "owner":
            owner_cals.append(cal_items[cal_items.index(entry)])

    return owner_cals
Run Code Online (Sandbox Code Playgroud)

cal_itemslistdictionaries

在我写的行中,我owner_cals.append(cal_items[cal_items.index(entry)])试图附加具有该属性的字典accessRole = owner.

这条线似乎超长而且笨重,我想知道是否有更容易/更直观的方法来做到这一点?

python for-loop

2
推荐指数
1
解决办法
61
查看次数