无法使用时间戳索引散景折线图的 x 轴
Posted
技术标签:
【中文标题】无法使用时间戳索引散景折线图的 x 轴【英文标题】:Unable to index x-axis of bokeh line chart with timestamps 【发布时间】:2017-06-06 05:12:57 【问题描述】:我一直在尝试制作散景折线图,但是我遇到了用我的 pandas 数据框中的一列时间戳索引 x 轴的问题。目前我的数据框如下所示:
TMAX TMIN TAVG DAY NUM
2007-04-30 65 46 55.5 2007-04-30 1
2007-05-01 75 45 60.0 2007-05-01 2
2007-05-02 66 52 59.0 2007-05-02 3
2007-05-03 65 43 54.0 2007-05-03 4
2007-05-04 61 45 53.0 2007-05-04 5
2007-05-05 65 43 54.0 2007-05-05 6
2007-05-06 77 51 64.0 2007-05-06 7
2007-05-07 89 66 77.5 2007-05-07 8
2007-05-08 91 56 73.5 2007-05-08 9
2007-05-09 83 48 65.5 2007-05-09 10
2007-05-10 68 47 57.5 2007-05-10 11
2007-05-11 65 46 55.5 2007-05-11 12
2007-05-12 63 43 53.0 2007-05-12 13
2007-05-13 65 46 55.5 2007-05-13 14
2007-05-14 71 46 58.5 2007-05-14 15
....
[3592 rows x 5 columns]
我想用“DAY”列的值来索引线图,但是,无论我采用哪种方法,都会出错。折线图的文档说“x (str or list(str), optional) – 指定用于 x 轴的变量”。我的代码如下:
xyvalues = np.array([df['TAVG'], df_reg['ry'], df['DAY']])
regr = Line(data=xyvalues, x='DAY', title="Linear Regression of Data", ylabel="Average Daily Temperature", xlabel="Number of Days")
output_file("regression.html")
show(regr)
这给了我错误“TypeError:无法将类型 'Timestamp' 与类型 'float64' 进行比较”。我尝试将其转换为浮动,但它似乎没有效果。任何帮助将非常感激。 df_reg['ry'] 是来自线性回归数据框的数据。
折线图的文档可以在这里找到:http://docs.bokeh.org/en/latest/docs/reference/charts.html#line
【问题讨论】:
看来您需要通过df1 = pd.concat([df[['TAVG', 'DAY']], df_reg['ry']], axis=1)
将两个数据帧连接在一起,然后使用regr = Line(data=df1, x='DAY', title="Linear Regression of Data", ylabel="Average Daily Temperature", xlabel="Number of Days")
。如果不起作用,df_reg['ry'].head()
是什么?
【参考方案1】:
在Line
内部,您需要将pandas
数据框传递给data
参数,以便能够引用您的变量DAY
来获取x 轴刻度。在这里,我从另外两个创建了一个新的 pandas DataFrame
:
import pandas as pd
df2 = pd.DataFrame(data=dict(TAVG=df['TAVG'], ry=df_reg['ry'], DAY=df['DAY']))
regr = Line(data=df2, x='DAY',
title="Linear Regression of Data",
ylabel="Average Daily Temperature",
xlabel="Number of Days")
output_file("regression.html")
show(regr)
【讨论】:
以上是关于无法使用时间戳索引散景折线图的 x 轴的主要内容,如果未能解决你的问题,请参考以下文章