我们如何在Plotly的子图中制作多面网格?

时间:2018-07-25 14:46:40

标签: python plotly subplot facet-grid

我们如何在Plotly的子图中制作多面网格?例如,我想在子图中绘制total_billtip五次。我累了要执行以下操作:

import plotly.plotly as py
import plotly.figure_factory as ff
from plotly import tools

subfigs = tools.make_subplots(rows= 5, cols=1)

import pandas as pd
tips = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/tips.csv')

for i in enumerate(tips.columns.tolist()):
    fig = ff.create_facet_grid(
    tips,
    x='total_bill',
    y='tip',
    color_name='sex',
    show_boxes=False,
    marker={'size': 10, 'opacity': 1.0},
    colormap={'Male': 'rgb(165, 242, 242)', 'Female': 'rgb(253, 174, 216)'}
    )

    subfigs.append_trace(fig, i+1, 1)

pyo.iplot(fig)

这不起作用,因为由图形工厂创建的多面网格不被视为轨迹。有办法吗? This的答案无济于事,因为在我看来cufflinks不接受多面网格

1 个答案:

答案 0 :(得分:1)

这里发生了很多事情。

  1. python中的函数for i in range(tips.columns.size): 为您提供元组列表,如果您只想使用可以使用的索引进行迭代

    for i, col in enumerate(tips.columns):
    

    否则,您可以通过打包操作

    Figures
  2. 图形工厂中的方法返回Traces,其中的data列表中包含create_facet_grid。您可以按其索引访问subfig.append_trace(fig['data'][index_of_the_trace], n1, n2) 方法产生的跟踪之一:

    tips = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/tips.csv')
    
    current_column = 'sex'
    
    subfigs = tools.make_subplots(
        rows = tips[current_column].nunique(),
        cols = 1
    )
    
    fig = ff.create_facet_grid(
        tips,
        x = 'total_bill',
        y = 'tip',
        facet_row  = current_column,
        color_name = 'sex',
        show_boxes = False,
        marker     = {'size': 10, 'opacity': 1.0},
        colormap   = {
            'Male': 'rgb(165, 242, 242)',
            'Female': 'rgb(253, 174, 216)'
        }
    )
    
    for i in range(tips[current_column].nunique()):
        subfigs.append_trace(fig['data'][i], i+1, 1)
    
    py.iplot(fig)
    
  3. 多面网格的想法是将数据集按类别列之一进行拆分,这是一个示例,该示例说明了如何通过某些选定的列将数据集的分区分配给不同的子图:

    task apkDeployDebug(type: Exec) {
        group = 'custom'
        workingDir "$projectDir/scripts"
        commandLine 'sh', 'apkdeploy', "$projectDir", rootProject.ext.versionName, rootProject.ext.customer, "alpha", rootProject.ext.deploymentPath, rootProject.ext.buildNumber
    }
    
    task cleanBuildPublishDebug(type: GradleBuild) {
        group = 'custom'
        tasks = ['clean', 'assembleDebug', 'apkDeployDebug']
    }
    

希望有帮助。