【问题标题】:How can create Python iplot graph, colors changes with value?如何创建 Python iplot 图形,颜色随值变化?
【发布时间】:2017-03-26 23:03:19
【问题描述】:

这里你是我数据的一部分。

我统计我的数据

count_interests = interests.count()

然后做了一个图表

count_interests.iplot(kind = 'bar', xTitle='Interests', yTitle='Number of Person', colors='Red')

我尝试了很多次找到一个函数来改变列的颜色值,所以更大和更小的列看起来不同的颜色。

我知道有colorscalecolor 函数,我试了很多次都找不到。有谁知道函数吗?

【问题讨论】:

    标签: python plot plotly


    【解决方案1】:

    您可以定义一个函数,该函数为每个值返回一种颜色,然后在 list 中传递每个条形的颜色。

    import pandas as pd
    import plotly
    
    def color(val, median, std):
        if val > median + std:
                return 'darkgreen'
        if val < median - std:
                return 'darkred'
        return 'orange'
    
    df = pd.DataFrame({'cinema': [1, 2, 5, 3, 3, None],
                       'theatre': [3, 0, 8, 4, 0, 4],
                       'wine': [3, 2, 5, None, 1, None],
                       'beer': [4, 8, 2, None, None, None]})
    
    med = df.count().median()
    std = df.count().std()
    
    colors = [color(i, med, std) for i in df.count()]
    
    fig = plotly.graph_objs.Bar(x=df.columns,
                                y=df.count(),
                                marker=dict(color=colors))
    
    plotly.offline.plot([fig])
    

    【讨论】:

      【解决方案2】:

      条形也可以通过pd.pivot_table() 行到列或通过为条形创建单独的跟踪列表来着色。此处,以sum() 为例对每一列进行聚合。代码如下:

      # Import libraries
      import datetime
      from datetime import date
      import pandas as pd
      import numpy as np
      from plotly import __version__
      %matplotlib inline
      
      import cufflinks as cf
      from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot 
      init_notebook_mode(connected=True)
      
      init_notebook_mode(connected=True)
      cf.go_offline()
      
      import plotly.graph_objs as go
      import plotly.offline as pyo
      
      
      # Create dataframe
      INT_M_PUB = [0,0,0,0,0,1,0,0,0,0]
      INT_M_CINEMA = [1,1,1,0,0,0,0,0,0,1]
      INT_M_THEATRE = [1,0,1,0,0,1,0,1,0,1]
      INT_M_GYM = [0,0,0,0,0,1,0,0,0,1]
      INT_M_ENTERTAIN = [0,0,1,1,0,1,0,1,0,1]
      INT_M_EATOUT = [0,1,1,0,0,1,0,0,1,1]
      INT_M_WINE = [0,0,0,0,0,1,0,0,0,1]
      
      
      interests = pd.DataFrame({'INT_M_PUB':INT_M_PUB, 'INT_M_CINEMA':INT_M_CINEMA, 'INT_M_THEATRE':INT_M_THEATRE,
                         'INT_M_GYM':INT_M_GYM, 'INT_M_ENTERTAIN':INT_M_ENTERTAIN, 'INT_M_EATOUT':INT_M_EATOUT,
                         'INT_M_WINE':INT_M_WINE
                        })
      interests.head(2)
      
      
      dfm = interests.sum().reset_index().rename(columns={'index':'interests', 0:'value'})
      dfm
      
      # Re-creating the plot similar to that in question (note: y-axis scales are different)
      df = dfm.copy()
      col_list = df.columns
      
      df.iplot(kind = 'bar', x='interests', y='value', xTitle='Interests', yTitle='Number of Person', title='These bars need to be colored', color='red')
      

      # Color plots by creating traces
      # Initialize empty list named data to collect traces for each bar
      data = []
      for col_name in col_list:
          trace = go.Bar(
              x=[col_name],
              y=df[col_name],
              name=col_name
          )
          data.append(trace)
      
      data = data
      layout = go.Layout(
          barmode='group',
          title='Interests',
          xaxis=dict(title='Interests'),
          yaxis=dict(title='Number of Person')
      )
      
      fig = go.Figure(data=data, layout=layout)
      pyo.iplot(fig, filename='grouped-bar')
      

      # Creating plot by pivoting the table
      df = pd.pivot_table(dfm, values='value', columns='interests')
      df.iplot(kind = 'bar',xTitle='Interests', yTitle='Number of Person')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多