- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了一个 pandas DataFrame,其中包含可变长度的时间跨度值。我想用时间跨度的长度为每个时间跨度的值绘制一条水平线。因此,我将时间跨度转换为 PeriodIndex
ax0=fig.add_axes([.16,.2,0.8,.7])
ax0.plot_date(data['periodIndex'], data['value'])
产生:
TypeError: Axis must have `freq` set to convert to Periods
所以我的问题是如何设置 xaxis 的频率
非常感谢您的帮助
阿克塞尔
更新
这是我要绘制的 pandas dataFrame 的一部分
start stop A B C
ID
1 2015-08-17 2015-08-25 -5.684246 -34.759047 10.714920
2 2015-08-25 2015-09-02 -10.850721 -78.443556 8.362215
3 2015-09-02 2015-09-15 -7.139351 -47.814199 9.300612
4 2015-09-15 2015-09-21 -7.822367 -56.895241 5.683696
5 2015-09-21 2015-09-29 -6.491543 -42.947744 8.984596
6 2015-09-29 2015-10-05 -9.897980 -67.985256 11.198583
我解决了这个问题,现在看起来像 this通过以下代码
firstDate=df.ix[df.index[0]]['start']
fig=plt.figure(figsize=(9*1.5,6*1.5))
ax0=fig.add_axes([.15,.2,0.75,.7])
ax0.set_xticks(df['start_abs'])
ax0.set_xticklabels([i.date() for i in df['start']], rotation='vertical')
B=ax0.twinx()
B.set_ylim(-200,0)
for _index, _series in df.iterrows():
start=_series['start']
stop=_series['stop']
df.ix[_index, 'start_abs']=(start-firstDate).days
df.ix[_index, 'width_abs']=(stop-start).days
df.ix[_index, 'stop_abs']=(stop-firstDate).days
line_A=ax0.hlines(y=df.ix[_index,'A'], xmin=df.ix[_index, 'start_abs'], xmax=df.ix[_index, 'stop_abs'], colors='r')
line_A.set_linewidths(3)
text_A=ax0.text(df.ix[_index, 'start_abs'], df.ix[_index,'A'], '{a:4.2f}'.format(a=df.ix[_index,'A']), fontsize=8, color='r')
line_B=B.hlines(y=df.ix[_index,'B'], xmin=df.ix[_index,'start_abs'], xmax=df.ix[_index,'stop_abs'], colors='k')
line_B.set_linewidths(3)
text_B=B.text(df.ix[_index,'start_abs'], df.ix[_index,'B'], '{a:4.2f}'.format(a=df.ix[_index,'B']), fontsize=8, color='k')
plt.show()
最佳答案
我构建数据来证明我认为是你的问题。
如果您仅使用索引的特定范围的数据填充数据框,然后绘制它,它只会在该数据不为空时生成一条线。
import pandas as pd
import numpy as np
ts = pd.date_range(end='2016-03-31', periods=250, freq='D')
np.random.seed([3,1415])
ranges = pd.DataFrame((np.random.choice(xrange(100), (2, 10)) +
np.array([[0], [150]])),
columns=list('ABCDEFGHIJ'))
df = pd.DataFrame(index=ts)
count = 1
for i, c in ranges.iteritems():
s, e = c
df.loc[ts[s]:ts[e], i] = count
count += 1
df.plot()
关于python - 用 matplotlib 绘制 pandas period_range - 设置轴的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37711642/
我想要一个有 25 小时偏移的 pandas 周期范围,我看到有两种方法可以做到这一点(参见 here): 第一种方法是使用freq=25H,我试过了,给了我正确的答案: import pandas
我在绘制使用 pandas date_range 和 period_range 创建的时间序列数据时遇到问题。前者有效,但后者无效。为了说明问题,请考虑以下内容 import numpy as np
我有一个像这样的 PySpark 数据框 +----------+--------+----------+----------+ |id_ | p |d1 | d
我得到了一个 pandas DataFrame,其中包含可变长度的时间跨度值。我想用时间跨度的长度为每个时间跨度的值绘制一条水平线。因此,我将时间跨度转换为 PeriodIndex ax0=fig.a
我是一名优秀的程序员,十分优秀!