在图中添加组条形图作为子图

时间:2016-05-04 16:44:39

标签: python charts plotly

我想在图中创建分组( barmode =' group' )条形图子图。现在的问题是,情节并没有创建条形图作为痕迹。而是将分组条形图创建为条形轨迹列表。因此,我不知道如何创建包含分组条形图作为子图的图形(即使用 figure.append_trace()添加分组条形图。)

例如,如何使用this sample中创建的条形图创建子图:

import plotly.plotly as py
import plotly.graph_objs as go
trace1 = go.Bar(
    x=['giraffes', 'orangutans', 'monkeys'],
    y=[20, 14, 23],
    name='SF Zoo'
)
trace2 = go.Bar(
    x=['giraffes', 'orangutans', 'monkeys'],
    y=[12, 18, 29],
    name='LA Zoo'
)
data = [trace1, trace2]
layout = go.Layout(
    barmode='group'
)
fig = go.Figure(data=data, layout=layout)
plot_url = py.plot(fig, filename='grouped-bar')

2 个答案:

答案 0 :(得分:3)

YES! plot.ly的新手并且遇到了这个问题,并且如我的评论所述,由于各种原因,我无法在pandas / matplotlib中进行此操作。但是通过子图的魔力,您实际上可以通过将它们一起进行子绘图来重新创建多迹图。 enter image description here

import plotly.plotly as py
import plotly.graph_objs as go
from plotly import tools

trace1 = Bar(
    x=['giraffes', 'orangutans', 'monkeys'],
    y=[20, 14, 23],
    name='SF Zoo'
)
trace2 = Bar(
    x=['giraffes', 'orangutans', 'monkeys'],
    y=[12, 18, 29],
    name='LA Zoo'
)
trace3 = Scatter(
  x=['giraffes', 'orangutans', 'monkeys']
  ,y=[33,20,17]
  ,name='subplots ftw'
  )


fig = tools.make_subplots(rows=2, cols=1, shared_xaxes=True)

fig.append_trace(trace3, 1,1)
fig.append_trace(trace1, 2, 1)
fig.append_trace(trace2,2,1)


fig['layout'].update(height=600, width=600)
iplot(fig)

答案 1 :(得分:0)

我从来没有使用过情节包,但是看起来你看起来很简单,使用matplotlib。以下是将分组条形图显示为子图的极小示例。如果这不是你所要求的,请告诉我。

import numpy as np
import matplotlib.pyplot as plt

# First subplot
plt.subplot(2, 1, 1)

x = np.linspace(0, 10)
y = np.sin(np.pi * x)

plt.plot(x, y)

# Second subplot
plt.subplot(2, 1, 2)
titles = ('Canada', 'US', 'England', 'Other')
y_pos = np.arange(len(titles))
width = 0.2
bar_height1 = [6,5,7,2]
bar_height2 = [x+1 for x in bar_height1]

plt.bar(y_pos, bar_height1, width, align='center', alpha=0.8, color='r')
plt.bar(y_pos+width, bar_height2, width, align='center', alpha=0.8, color='b')

plt.xticks(y_pos + width/2, titles)

# Show the plots
plt.show()

Matplotlib plot