0

plotly と python を使用して棒グラフで xaxis に沿ってビンを結合するにはどうすればよいですか?

これが私が試したものです:

data3 = Data([
    Bar(
        x=[x[0] for x in lv_list],
        y=[(y[1]/lc_dict[y[0]]) for y in lv_list]
    )
])
layout3 = dict(
   title='Public Highlight Analysis',
   yaxis=YAxis(
       title = 'Average Number of Views'),
   xaxis1=XAxis(
       title = "Duration of Highlight in Seconds",
        autotick=False,
        dtick=50, range = [0,10000])
   )
fig3 = Figure(data=data3, layout=layout3)
py.iplot(fig3)

ここに画像の説明を入力

私がしたいこと:

グラフで 1 ~ 1000、1001 ~ 2000、2001 ~ 3000 などの数値を組み合わせて、軸に沿って 6 つのビンが存在するようにします。

4

1 に答える 1

1

「結合」の意味がわかりませんが、考えられる解決策がいくつかあります。

サンプルデータ:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [2, 1, 6, 3, 7, 9, 2, 12,5, 3]
s = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'E', 'F']

1 - 目盛りを少なく表示したいだけの場合は、dtick内部で使用しますxaxis( https://plot.ly/python/reference/#XAxis )

デフォルトのビューは次のとおりです。

>> py.iplot([Bar(x=x, y=y)])

デフォルトの棒グラフ

ここで、カスタムでdtick

iplot({
    'data': [
        Bar(x=x, y=y)
    ], 
    'layout': {
        'xaxis': {
            'dtick': 3
        }
    }
})

<code>dtick</code> で 3 項目ごとに目盛りを表示

2 - 項目を頻度でビニングする場合は、ヒストグラムを使用します (ヒストグラムの例をもっと見る)

py.iplot([Histogram(y=y)])

単純なヒストグラム

3 - アイテムをビニングして合計したい場合は、Pandas の使用を検討してください。

>> import pandas as pd
>> df = pd.DataFrame({'x': x, 'y': y, 's': ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'E', 'F']})
>> df

   s   x   y
0  A   1   2
1  B   2   1
2  C   3   6
3  D   4   3
4  A   5   7
5  B   6   9
6  C   7   2
7  D   8  12
8  E   9   5
9  F  10   3

groupbyとを使用sumして、同じカテゴリに属する​​すべてのアイテムをビンに入れ、合計します

>> s = df.groupby('s').sum()
>> s
    x   y
s        
A   6   9
B   8  10
C  10   8
D  12  15
E   9   5
F  10   3
>> py.iplot([Bar(x=s.index, y=s.y)])

ビニング棒グラフの例

データが数値であり、値をビン化して合計したい場合は、自分で数値ビンを作成して結果をプロットします。

>> import numpy as np
>> bins = np.linspace(df.x.min(), df.x.max(), 5)
>> print bins
[  1.     3.25   5.5    7.75  10.  ]
>> df['groups'] = np.digitize(df.x, bins)
>> print df

   s   x   y  groups
0  A   1   2       1
1  B   2   1       1
2  C   3   6       1
3  D   4   3       2
4  A   5   7       2
5  B   6   9       3
6  C   7   2       3
7  D   8  12       4
8  E   9   5       4
9  F  10   3       5

>> grouped = df.groupby('groups').sum()
>> print grouped
         x   y
groups        
1        6   9
2        9  10
3       13  11
4       17  17
5       10   3

>> bin_boundaries = [_ - 0.5 for _ in range(len(grouped.y))]
>> py.iplot({
       'data': [Bar(y=grouped.y)],
       'layout': {
           'bargap': 0,
           'xaxis': {
               'ticktext': bins,
               'tickvals': bin_boundaries
           }
       }
   }, validate=False)

グループ化およびビニングされた棒グラフ

于 2015-08-03T17:55:16.977 に答える