【问题标题】:Passing column data from pandas df to bokeh plotting function将列数据从 pandas df 传递到散景绘图功能
【发布时间】:2016-11-22 21:00:28
【问题描述】:

我正在研究使用散景自动绘制代谢组学数据的函数。目前,我正在尝试从 CSV 读取我的数据框并遍历为每个代谢物(列)生成箱形图的列。

我有一个示例 df,如下所示:

Sample  Group   AMP     ADP     ATP
1A      A       239847  239084  987374
1B      A       245098  241210  988950
2A      B       238759  200554  921032
2B      B       230029  215408  89980

我的代码如下所示:

import pandas
from bokeh.plotting import figure, output_file, show, save
from bokeh.charts import BoxPlot

df = pandas.read_csv("testdata_2.csv")

for colname, col in df.iteritems():
p = BoxPlot(df, values=df[colname], label='Group', xlabel='Group', ylabel='Peak Area',
             title=colname)
    output_file("boxplot.html")
    show(p)

这会产生错误:

raise ValueError("expected an element of either %s, got %r" % (nice_join(self.type_params), value))

ValueError: expected an element of either Column Name or Column String or List(Column Name or Column String

似乎设置values=df[colname] 是问题所在。如果我用values=df['colname'] 替换它,它会给我一个colname 的关键错误。如果我指定一个给定的列,例如values='ATP',我可以很好地绘制,但我需要能够遍历所有列。

有什么指导吗?这甚至是最好的方法吗?

提前致谢。

【问题讨论】:

  • 您需要将列的名称传递给值,即values=colname
  • 我尝试过同时使用values=colnamevalues='colname'。两者都会产生错误。

标签: python pandas plot boxplot bokeh


【解决方案1】:

如果你想水平组织它们,你可以创建不同的图表,然后你可以使用例如来自 bokeh.io 的 hplot 如下:

import pandas
from bokeh.plotting import figure, output_file, show, save
from bokeh.charts import BoxPlot
from bokeh.io import hplot

df = pandas.read_csv("testdata_2.csv")

p = []
for colname in ['AMP','ADP','ATP']:
    p += [BoxPlot(df, values=colname, label='Group', xlabel='Group',
            ylabel='Peak Area',title=colname, width=250,height=250)]

output_file("boxplot.html")
show(hplot(*p))

对于您的特定示例,我得到:

【讨论】:

猜你喜欢
  • 2017-10-20
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
相关资源
最近更新 更多