我需要一些指导来确定如何在pandas数据帧中从分组数据中绘制直方图块.这是一个例子来说明我的问题:
from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
grouped = df.groupby('Letter')
Run Code Online (Sandbox Code Playgroud)
在我的无知中,我尝试了这个代码命令:
df.groupby('Letter').hist()
Run Code Online (Sandbox Code Playgroud)
失败的错误消息"TypeError:无法连接'str'和'float'对象"
任何帮助最受赞赏.
我正在寻找关于如何在由pandas df.hist()命令生成的直方图集合顶部显示标题的建议.例如,在下面的代码生成的直方图图块中,我想在图的顶部放置一个通用标题(例如"我的直方图图集"):
data = DataFrame(np.random.randn(500).reshape(100,5), columns=list('abcde'))
axes = data.hist(sharey=True, sharex=True)
Run Code Online (Sandbox Code Playgroud)
我已尝试在hist命令中使用title关键字(即title ='我的直方图图集'),但这不起作用.
以下代码通过向其中一个轴添加文本(在ipython笔记本中)可以正常工作,但有点像kludge.
axes[0,1].text(0.5, 1.4,'My collection of histogram plots', horizontalalignment='center',
verticalalignment='center', transform=axes[0,1].transAxes)
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我在Spyder中获取ipython控制台时遇到了麻烦.它只在"interpreters"菜单下提供了一个python解释器.
我已经在Stackoverflow中看到了其他几个问题,但对提供的解决方案并没有多少乐趣.
我正在运行Linux Mint 16,并通过Mint Software Manager轻松地安装了ipython(v 1.1.0)和Spyder(v 2.2.1).我确保我还安装了ipython-qtconsole并验证我可以从终端运行它(即ipython qtconsole).
我可以在Spyder python控制台中使用以下命令激活ipython控制台:
import IPython
IPython.start_ipython()
Run Code Online (Sandbox Code Playgroud)
虽然字体着色很奇怪,但在白色背景上效果不佳(例如黄色和浅绿色的错误信息).无论如何能够从Spyder菜单以正常方式启动ipython会很不错.
我试图通过在包含字符串的索引上使用布尔表达式来过滤熊猫系列。例如,在下面的代码中,我希望通过为索引项包含子字符串“man”的行过滤另一个系列 (S) 来创建一个新系列 (Sman):
from pandas import Series
S = Series({'moondog':12,'catman':23, 'batman':31, 'catdog':42})
Sman = S['man' in S]
Run Code Online (Sandbox Code Playgroud)
但是,Sman 的结果只是数字 31,而不是像我希望的那样包含“catman”和“batman”行的新系列。
我究竟做错了什么??
我正在尝试创建一个散景图,它允许我通过单击复选框来切换图中线条的可见性。
我开始尝试对复选框组使用js回调,但不幸地发现,复选框组实际上还没有实现js回调。
任何人都可以建议另一种方法来切换散景图中的线条可见性。我猜想修改线条的 alpha 属性是可行的方法。
以下是一些用于创建绘图的简单示例代码:
from bokeh.plotting import figure, show, output_notebook
from bokeh.io import vform
from bokeh.models.widgets import CheckboxGroup
output_notebook()
x = [1, 2, 3, 4, 5]
y1 = [3, 5, 6, 4, 5]
y2 = [2, 4, 7, 6, 5]
p = figure()
line1 = p.line(x, y1, alpha=1, color='blue', legend='blue line')
line2 = p.line(x, y2, alpha=1, color='red', legend='red line')
cbgroup = CheckboxGroup(labels=["toggle blue line","toggle red line"], active=[0,1])
show(vform(p,cbgroup))
Run Code Online (Sandbox Code Playgroud) 我在尝试动态初始化Traits Range对象时遇到了麻烦.
下面的代码是我正在尝试做的一个非常简单的示例,但遗憾的是出现以下类型错误:
TypeError:不支持的操作数类型 - :'int'和'code'
from traits.api import HasTraits, Int, Range
from traitsui.api import View, Item
class DynamicRange(HasTraits):
"""Dynamic initialisation of a Range object"""
N = Int()
R = Range(low=0, high='N')
traits_view = View(Item('R'), Item('N'))
def __init__(self, N):
self.N = N # initial parameter value for N
def _N_default(self):
return self.N
Robject = DynamicRange(N=10)
Robject.configure_traits()
Run Code Online (Sandbox Code Playgroud)
如果我用'R = Range(低= 0,高= 10)替换'R'的定义,代码就有效,但当然我没有得到我正在寻找的Range高参数的动态初始化.
感谢所有建议.
*乔纳森回应后编辑*
以下是使用Jonathan的有用建议解决我问题的简单方法:
from traits.api import HasTraits, Range
from traitsui.api import View, Item
class DynamicRange(HasTraits):
"""Dynamic …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个将出现在 Mayavi mlab.points3d 图中的 3D 框。
我认为使用 mlab.mesh 函数应该可以实现,如下所示:
points = mlab.points3d(xp,yp,zp,sp)
3Dbox = mlab.mesh(xbox,ybox,zbox)
mlab.show()
Run Code Online (Sandbox Code Playgroud)
我已经查看了网格的 mlab 手册条目,但我一生都无法理解网格的 x、y、z 数据点是如何定义的。
请问有人可以赐教吗?3D 框的 x,y,z 数据点的示例将特别受欢迎。