标签: timeserieschart

在Bokeh中,如何将工具提示添加到时间序列图表(悬停工具)?

是否可以将工具提示添加到时间序列图表中?

在下面的简化代码示例中,当鼠标悬停在相关行上时,我希望看到单个列名称('a','b'或'c').

相反,一个"???" 显示并且所有三行都得到一个工具提示(而不仅仅是悬停在其上的一个)

在此输入图像描述

根据文档( http://bokeh.pydata.org/en/latest/docs/user_guide/tools.html#hovertool),以"@"开头的字段名称将被解释为数据源上的列.

  1. 如何在工具提示中显示pandas数据框中的"列"?

  2. 或者,如果高级TimeSeries接口不支持此功能,那么使用较低级别接口执行相同操作的任何线索?(line?multi_line?)或将DataFrame转换为不同的格式(ColumnDataSource?)

  3. 对于奖励积分,如何格式化"$ x"以将日期显示为日期?

提前致谢

    import pandas as pd
    import numpy as np
    from bokeh.charts import TimeSeries
    from bokeh.models import HoverTool
    from bokeh.plotting import show

    toy_df = pd.DataFrame(data=np.random.rand(5,3), columns = ('a', 'b' ,'c'), index = pd.DatetimeIndex(start='01-01-2015',periods=5, freq='d'))   

    p = TimeSeries(toy_df, tools='hover')  

    hover = p.select(dict(type=HoverTool))
    hover.tooltips = [
        ("Series", "@columns"),
        ("Date", "$x"),
        ("Value", "$y"),
        ]

    show(p)
Run Code Online (Sandbox Code Playgroud)

tooltip python-3.x pandas timeserieschart bokeh

30
推荐指数
2
解决办法
2万
查看次数

JFreeChart - 将图表行的SeriesStroke从实线更改为虚线

这里接受的答案是什么(JFreechart(Java) - 如何绘制部分虚线和部分实线的线条?)帮助我开始在我的图表上更改我的seriesstroke线.单步执行我的代码并观察更改后,我发现我的seriesstroke实际上确实改为"dashedStroke"(当某个日期之后为"dashedAfter"),但是当渲染图表时整个系列行都是虚线.如何将一系列线条首先绘制为实线并在设定日期后绘制为虚线?

/* series line modifications */
final Number dashedAfter = timeNowDate.getTime();

XYLineAndShapeRenderer render = new XYLineAndShapeRenderer() {
  Stroke regularStroke = new BasicStroke();
  Stroke dashedStroke = new BasicStroke(
                            1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                            1.0f, new float[] {10.0f, 6.0f}, 0.0f );
  @Override
  public Stroke getItemStroke(int row, int column) {
    Number xVal = cd.getXValue(row, column);
    if (xVal.doubleValue() > dashedAfter.doubleValue()) { 
      return dashedStroke; 
    } else { 
      return regularStroke; 
    }
  }
};
render.setBaseShapesVisible(false);
render.setBaseShapesFilled(true);
render.setDrawSeriesLineAsPath(true);
plot.setRenderer(render);
Run Code Online (Sandbox Code Playgroud)

java charts time-series jfreechart timeserieschart

8
推荐指数
1
解决办法
2万
查看次数

python中的聚合时间序列

我们如何按小时或分钟的粒度聚合时间序列?如果我有一个如下所示的时间序列,那么我希望按小时聚合这些值。pandas 是否支持它,或者在 python 中是否有一种很好的方法来做到这一点?

timestamp, value
2012-04-30T22:25:31+00:00, 1
2012-04-30T22:25:43+00:00, 1
2012-04-30T22:29:04+00:00, 2
2012-04-30T22:35:09+00:00, 4
2012-04-30T22:39:28+00:00, 1
2012-04-30T22:47:54+00:00, 8
2012-04-30T22:50:49+00:00, 9
2012-04-30T22:51:57+00:00, 1
2012-04-30T22:54:50+00:00, 1
2012-04-30T22:57:22+00:00, 0
2012-04-30T22:58:38+00:00, 7
2012-04-30T23:05:21+00:00, 1
2012-04-30T23:08:56+00:00, 1
Run Code Online (Sandbox Code Playgroud)

我还尝试通过调用来确保我的数据框中有正确的数据类型:

  print data_frame.dtypes
Run Code Online (Sandbox Code Playgroud)

我得到以下内容

ts     datetime64[ns]
val             int64
Run Code Online (Sandbox Code Playgroud)

当我在数据框上调用 group by 时

grouped = data_frame.groupby(lambda x: x.minute)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

grouped = data_frame.groupby(lambda x: x.minute)
AttributeError: 'int' object has no attribute 'minute'
Run Code Online (Sandbox Code Playgroud)

python time-series pandas timeserieschart

8
推荐指数
1
解决办法
1万
查看次数

Plotly:如何从两个数据框列中绘制两条线并从其他两列中分配悬停信息?

如何从数据帧的两列绘制两条线图,并且另一列表示 x 轴,另外两列表示前两列的悬停值(工具提示)?

python timeserieschart plotly

8
推荐指数
2
解决办法
2万
查看次数

比较两个时间序列(模拟结果)

我想对模拟模型进行单元测试,为此,我运行一次模拟并将结果(时间序列)作为参考存储在 csv 文件中(请参阅此处的示例)。现在,当我更改模型时,我再次运行模拟,将新结果也存储为 csv 文件,然后比较结果。

结果通常不是 100% 相同,示例图如下所示:
参考结果以黑色绘制,新结果以绿色绘制。
两者的差异在第二个图中以蓝色绘制。
可以看出,在一个步骤中,差异可以变得任意高,而其他地方的差异几乎为零。

因此,我更愿意使用不同的算法进行比较,而不仅仅是将两者相减,但我只能以图形方式描述我的想法:绘制参考线两次时,首先使用具有高线宽的浅色,然后再次使用深色颜色和小线宽,那么它看起来就像在中心线周围有一个粉红色的管子

请注意,在一个步骤中,管不仅在纵坐标方向上,而且在横坐标方向上。在进行比较时,我想知道绿线是否留在粉红色管内。 在此处输入图片说明

现在我的问题是:我不想使用图形比较两个时间序列,而是使用 python 脚本。一定已经有这样的东西了,但我找不到它,因为我缺少正确的词汇,我相信。有任何想法吗?在 numpy、scipy 或类似的东西中是否有类似的东西?还是我必须自己写比较?

附加问题:当脚本说这两个系列不够相似时,我想按上述方式绘制它(使用 matplotlib),但线宽必须以其他单位定义,而不是我通常用来定义线宽的单位.

python numpy time-series matplotlib timeserieschart

7
推荐指数
1
解决办法
4714
查看次数

情节:如何设计情节图的样式,以便它不会显示缺失日期的间隙?

我有一个以 15 分钟为间隔的几个月内 EUR/JPY 汇率的绘图图表,因此,没有从周五晚上到周日晚上的数据。

这是部分数据,注意周末索引(类型:DatetimeIndex)中的跳过: 在此处输入图片说明

使用上面的数据框绘制这些数据会导致缺失日期的差距:

import plotly.graph_objs as go
candlesticks = go.Candlestick(x=data.index, open=data['Open'], high=data['High'],
                   low=data['Low'], close=data['Close'])
fig = go.Figure(layout=cf_layout)
fig.add_trace(trace=candlesticks)
fig.show()
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明

如您所见,缺少日期的位置存在间隙。我在网上找到的一种解决方案是使用以下方法将索引更改为文本:

data.index = data.index.strftime("%d-%m-%Y %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)

并再次绘制它,这确实有效,但它有自己的问题。x 轴标签看起来很糟糕:

在此处输入图片说明

我想生成一个图表,该图表绘制的图表类似于第二个图表中没有间隙的图表,但 x 轴的显示方式与第一个图表上的相同。或者至少以更简洁和响应式的格式显示,尽可能接近第一个图形。

预先感谢您的任何帮助!

python timeserieschart plotly

7
推荐指数
2
解决办法
4080
查看次数

JFreeChart - Timeseries和CandleStick在同一张图表上

我正在尝试在JFreeChart中生成一个包含重叠烛台图和时间序列图的单个图表.(有点像这样)

烛台趋势叠加http://www.prices-oil.org/wp-content/uploads/2009/04/oil1stapril.jpg

我已经尝试创建烛台图表,然后添加一个额外的XY系列和它的渲染器,但这会导致运行时错误 org.jfree.data.xy.XYSeriesCollection cannot be cast to org.jfree.data.xy.OHLCDataset

我的代码片段如下

private XYPlot plot;
private XYSeriesCollection dataTrend;
private XYItemRenderer renderer;

public OhlcChart(BarCollection bars)
{

JFreeChart jfreechart = ChartFactory.createCandlestickChart("FX Trader Prototype", "Time", "Value", getDataset(bars), true);
plot = (XYPlot)jfreechart.getPlot();
plot.setDomainPannable(true);


NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
numberAxis.setAutoRangeIncludesZero(false);
    numberAxis.setAutoRangeStickyZero(false);
numberAxis.setUpperMargin(0.0D);
numberAxis.setLowerMargin(0.0D);

DateAxis dateAxis = (DateAxis) plot.getDomainAxis();
    SimpleDateFormat formatter  = new SimpleDateFormat("dd MMM HH:mm.ss");
    dateAxis.setDateFormatOverride(formatter);

    this.renderer = plot.getRenderer();
    Stroke myStroke = new BasicStroke((float) 1.0);

    this.renderer = new XYLineAndShapeRenderer();
    this.renderer.setSeriesPaint(0, Color.blue);
    this.renderer.setSeriesStroke(0, myStroke);

}

public OhlcChart update(Timeseries<Double> ts) …
Run Code Online (Sandbox Code Playgroud)

java overlay jfreechart candlestick-chart timeserieschart

6
推荐指数
1
解决办法
8393
查看次数

R - 线之间的颜色或阴影区域

我正在尝试使用R在Excel上制作的图表进行复制,这应该表示围绕时间序列预测的95%置信区间(CI).Excel图表如下所示:

在此输入图像描述

所以,基本上,原始的历史时间序列,并从某个时间点预测它可能与其各自的CI.

他们在Excel上完成的方式效率有点低:

  1. 我有四个时间序列,大部分时间重叠;
  2. 实际/历史时间序列(上面的蓝线)在预测开始时停止;
  3. 在预测期开始之前,预测(上面点缀为红色)只是隐藏在蓝色的预测之下;
  4. 然后我有一个时间序列表示CI的上限和下限之间的差异,它与Excel Stacked Areas图表一起使用,成为上图中的阴影区域.

显然,生成预测和CI的计算速度更快,更容易推广和使用R,虽然我可以在R上完成任务然后只需复制Excel上的输出来绘制图表,在R中执行所有操作更好.

在问题的最后,我提供了dput()@MLavoie建议的原始数据.

在这里我加载的包(不确定你在这里需要它们,但它们是我经常使用的):

    require(zoo)
    require(xts)
    require(lattice)
    require(latticeExtra)
Run Code Online (Sandbox Code Playgroud)

对于前100行,我的数据如下所示:

    > head(data)
               fifth_percentile   Median nintyfifth_percentile
    2017-06-18         1.146267 1.146267              1.146267
    2017-06-19         1.134643 1.134643              1.134643
    2017-06-20         1.125664 1.125664              1.125664
    2017-06-21         1.129037 1.129037              1.129037
    2017-06-22         1.147542 1.147542              1.147542
    2017-06-23         1.159989 1.159989              1.159989
Run Code Online (Sandbox Code Playgroud)

然后在100个数据点之后,时间序列开始发散,最后它们看起来像这样:

    > tail(data)
               fifth_percentile   Median nintyfifth_percentile
    2017-12-30        0.9430930 1.125844              1.341603
    2017-12-31        0.9435227 1.127391              1.354928
    2018-01-01        0.9417235 1.124625              1.355527
    2018-01-02        0.9470077 1.124088              1.361420
    2018-01-03        0.9571596 1.127299              1.364005
    2018-01-04        0.9515535 1.127978              1.369536
Run Code Online (Sandbox Code Playgroud)

解决方案由DaveTurek提供

感谢DaveTurek,我找到了答案.但是,唯一不同的是,对于我的xts数据帧,显然,我需要先将每列转换为数字(with …

r lattice confidence-interval xts timeserieschart

6
推荐指数
1
解决办法
793
查看次数

如何使用python检测时间序列数据中的多个高原和上升和下降

分析自行车道的时间序列数据,我想知道每个高原、上升和下降的时间间隔。此处上传示例 csv 文件。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.dates as mdates


df = pd.read_csv(r'C:\Data\Sample.csv', parse_dates=['dateTime'])
feature_used='Cycle_Alt'
print("Eliminating null values..")
df=df[df[feature_used].notnull()]

plt.figure(figsize=(8,6))
x=df['dateTime']        
y=df['Cycle_Alt']

plt.plot(x,y,c='b',linestyle=':',label="Altitude")
plt.xticks(rotation='vertical')
plt.gcf().autofmt_xdate()   
plt.legend(loc='best', bbox_to_anchor=(1, 0.5))
Run Code Online (Sandbox Code Playgroud)

这个图为我提供了这样的交叉配置文件。 在此处输入图片说明

可以做些什么来对时间序列数据进行分类以检测每个高原、上升和下降,并假设一个变量可能比样本中呈现的变量多。

在此处输入图片说明

python classification time-series matplotlib timeserieschart

6
推荐指数
1
解决办法
2488
查看次数

c3js 条宽不适应缩放

图表在正常情况下相当不错。但我希望它在缩放时调整条宽。没有缩放的图形如下。

在此处输入图片说明

当我放大图形时,条形宽度保持不变,非常细!

在此处输入图片说明

反正他们会自动调整吗?我看到一个链接,其中示例通过缩放调整条宽。但我看不出有什么遗漏。这是示例:http : //blog.trifork.com/2014/07/29/creating-charts-with-c3-js/

这是我的图表代码。我错过了一些设置吗?

var chart = c3.generate({
    bindto: '#chart',
    data: {
        xFormat: '%m/%d/%y %I:%M %p',
        json: final_data,
        keys: {
            x: 'date',
            value: values
        },
        type: 'bar',
        groups: val
    },
    bar: {
        width: { ratio: 0.9 }
    },
    axis: {
        x: {
            type: 'timeseries',
            tick: {
                format: '%b %d'
            }
        }
    },
    zoom: {
        enabled: true
    },
    color: {
        pattern: colors
    }
});
Run Code Online (Sandbox Code Playgroud)

width timeserieschart c3.js

5
推荐指数
1
解决办法
1513
查看次数