Plotly 如何在x轴上将年映射为线颜色并将月映射为绘图图表

Plotly 如何在x轴上将年映射为线颜色并将月映射为绘图图表,plotly,Plotly,在查看季节性数据时,我喜欢使用一次显示几年数据的图表,x轴上显示从1月到12月的月份,y轴上显示数值,使用颜色区分年份。下图是使用ggplot2在R中创建的。如何使用Python API复制它或生成非常类似的东西 到目前为止,我做得最好的是: …这显然不起作用。理想情况下,我希望能够绘出五年的数据,基本上是年份,为类别提供两种、三种或五种颜色的数组,并使其每年自动映射到一种颜色,而无需手动指定单个颜色本身。基本上,我只是不太了解Plotly的颜色映射机制,所以无法达到目的 Python示例的代码

在查看季节性数据时,我喜欢使用一次显示几年数据的图表,x轴上显示从1月到12月的月份,y轴上显示数值,使用颜色区分年份。下图是使用ggplot2在R中创建的。如何使用Python API复制它或生成非常类似的东西

到目前为止,我做得最好的是:

…这显然不起作用。理想情况下,我希望能够绘出五年的数据,基本上是年份,为类别提供两种、三种或五种颜色的数组,并使其每年自动映射到一种颜色,而无需手动指定单个颜色本身。基本上,我只是不太了解Plotly的颜色映射机制,所以无法达到目的

Python示例的代码:

import plotly.plotly as py
import plotly.graph_objs as go
import pandas as pd
import numpy as np

py.sign_in('xxx','xxx')

np.random.seed(123456)
num_periods=24
monthindex=pd.date_range('1/1/2014', periods=num_periods, freq='MS')
dd = pd.DataFrame(data={'date':monthindex,
                        'c1': np.random.uniform(10, 20, size=num_periods),
                        'c2': np.random.uniform(30, 40, size=num_periods)},
                  index=monthindex,
)
dd['year'] = dd['date'].dt.year
dd['monthname'] = dd['date'].dt.strftime('%b')

outdata = [
    go.Scatter(
        x=dd['monthname'], # assign x as the dataframe column 'x'
        y=dd['c1'],
    )
]

layout = go.Layout(
    showlegend=True,
    title="'Stacking' years in plotly",
    xaxis=dict(
        type='category'
    )
)
R示例代码:

library(ggplot2)

dd <- data.frame(date = seq(as.Date("2014/1/1"),
                     by = "month",
                     length.out = 24),
                 c1 = runif(24, min = 10, max = 20))

dd$month <- as.integer(strftime(dd$date, "%m"))
dd$year <- strftime(dd$date, "%Y")

xscale <- data.frame(breaks = c(1,2,3,4,5,6,7,8,9,10,11,12),
                     labels = c('Jan','Feb','Mar','Apr',
                         'May','Jun','Jul','Aug','Sep',
                         'Oct','Nov','Dec'))


ggplot(dd, aes(month, c1)) +
    geom_line(aes(colour = factor(year))) +
        scale_x_continuous(breaks = xscale$breaks,
                           labels = xscale$labels) +
            scale_colour_manual("year",values=c("Red","Blue")) +
                ggtitle("'Stacking' years in ggplot2")

我最近刚刚学习了在数据帧中将所有不同的跟踪绘制成列的模式:

dd = dd.pivot_table('c1', 'monthname', 'year')
py.iplot([{
    'x': dd.index,
    'y': dd[col],
    'name': col
}  for col in dd.columns])
上面的代码便于快速打印,但如果您想更改默认布局设置,可以使用下面更详细的版本进行更改。查看更多示例

import plotly.plotly as py
import plotly.graph_objs as go

my_data = [{
    'x': dd.index,
    'y': dd[col],
    'name': col
}  for col in dd.columns]

my_layout = {'title':'my graphtitle',
          'xaxis':{'title':'x axis title'},
          'yaxis':{'title':'y axis title')
         }
fig = go.Figure(data=my_data, layout=my_layout)
py.iplot(fig, filename='scatter_plot')
或者,您可以使用袖扣库,该库为数据帧提供了一个简单的绘图挂钩:

import cufflinks
dd = dd.pivot_table('c1', 'monthname', 'year')
dd.iplot()

袖扣神奇地为熊猫数据帧和其他对象提供了.iplot方法。退房,谢谢你让我意识到这一点。我是这个库的新手,所以我很难确定您的代码是实际使用plotly还是使用其他plotting库;iplot是plotly的一部分吗?是的,它正在使用plotly库。第一个示例仅依赖plotly进行打印,而第二个示例使用袖扣模块将熊猫和plotly神奇地绑在一起。在第一个示例中,您可以使用plot替换iplot。iplot用于在ipython笔记本中内联绘图。我用真实数据对其进行了测试,效果非常好,非常感谢。这比我自己的解决方法简单得多。使用你在上图中给出的方法,我如何控制标题、轴格式等?我已经尝试过在py.iplot[{之后的不同位置插入不同的绘图格式命令,但还没有成功解决。