Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最新Bokeh分组条形图示例?_Python_Bokeh_Pandas Bokeh - Fatal编程技术网

Python 最新Bokeh分组条形图示例?

Python 最新Bokeh分组条形图示例?,python,bokeh,pandas-bokeh,Python,Bokeh,Pandas Bokeh,我对Bokeh和Pandas都是新手,我正在尝试从一些查询结果生成一个分组条形图 我的数据看起来像这样 Day Fruit Count ----------- -------- ------- 2020-01-01 Apple 19 2020-01-01 Orange 8 2020-01-01 Banana 7 ... 2020-02-23 Apple 15 2020-02-23 Orange 10 2020-02-23 Banana

我对Bokeh和Pandas都是新手,我正在尝试从一些查询结果生成一个分组条形图

我的数据看起来像这样

Day         Fruit    Count
----------- -------- -------
2020-01-01  Apple    19
2020-01-01  Orange   8
2020-01-01  Banana   7
...
2020-02-23  Apple    15
2020-02-23  Orange   10
2020-02-23  Banana   12
2020-02-24  Apple    12
2020-02-24  Orange   17
2020-02-24  Banana   9
在答案中,这个数据布局似乎很容易处理

我很难理解从最新的API中到底发生了什么,以及如何将数据转换为示例中所示的格式

我尝试在我的数据框中生成一个新的列,该列有一天的时间,使用转换生成结果,但失败了,出现了我不理解的错误。我甚至不知道这是不是正确的方法

为条形图添加分组轴 def U轴行: 返回行['Day',行['Fruit'] data_frame['day_fruit']=data_frame2.apply lambda行:分组的_axisrow,轴=1
有人能给我举一个使用这种数据的例子吗?或者,如果做不到这一点,请解释让Bokeh将我的数据理解为分组条形图所需的代码?

您要查找的是一个名为的方法

但在这种情况下,您并不真正需要它——您链接的Bokeh示例已经处理了数据透视,这就是为什么它必须将数据透视成可接受的形式。而对于您已经拥有的数据形状,您不需要做很多事情

下面您可以找到这两种方法的示例。注意mk_src_2是多么简单


这很有效。Pivot之所以有意义,是因为我正在尝试用笔记本中的Pivot表重新创建我在Excel中制作的图表。我有一些复杂得多的代码,这些代码与上面非常简洁的mk_src2所做的相同。该代码和您的代码都出现了相同的错误。我最终意识到这是因为“day”值实际上是一个时间戳,如果tuple的两个值都不是字符串,FactorRange不喜欢它。在我的查询的那个列上添加一个to_字符就解决了这个问题。
import pandas as pd
from bokeh.io import show
from bokeh.models import ColumnDataSource, FactorRange
from bokeh.plotting import figure

data = pd.DataFrame([['2020-01-01', 'Apple', 19],
                     ['2020-01-01', 'Orange', 8],
                     ['2020-01-01', 'Banana', 7],
                     ['2020-02-23', 'Apple', 15],
                     ['2020-02-23', 'Orange', 10],
                     ['2020-02-23', 'Banana', 12],
                     ['2020-02-24', 'Apple', 12],
                     ['2020-02-24', 'Orange', 17],
                     ['2020-02-24', 'Banana', 9]],
                    columns=['day', 'fruit', 'count'])


def mk_src_1(d):
    # Pivoting implicitly orders values.
    d = d.pivot(index='fruit', columns='day', values='count')
    x = [(fruit, day) for fruit in d.index for day in d.columns]
    counts = sum(d.itertuples(index=False), ())
    return ColumnDataSource(data=dict(x=x, counts=counts))


def mk_src_2(d):
    # Bokeh's FactorRange requires the X values to be ordered.
    d = d.sort_values(['fruit', 'day'])
    return ColumnDataSource(data=dict(x=list(zip(d['fruit'], d['day'])),
                                      counts=d['count']))


# source = mk_src_1(data)
source = mk_src_2(data)

p = figure(x_range=FactorRange(*source.data['x']), plot_height=250, title="Fruit Counts by Year",
           toolbar_location=None, tools="")

p.vbar(x='x', top='counts', width=0.9, source=source)

p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xaxis.major_label_orientation = 1
p.xgrid.grid_line_color = None

show(p)