Matplotlib:如何在散点图上方绘制时间序列

问题描述

我找到了类似问题的解决方案,但它们都产生了奇怪的结果。

我的情节看起来像这样:

enter image description here

使用以下代码生成

ax1 = dft.plot(kind='scatter',x='end_date',y='pct',c='fte_grade',colormap='Reds',colorbar=False,edgecolors='red',vmin=4,vmax=10)
ax1.set_xticklabels([datetime.datetime.fromtimestamp(ts / 1e9).strftime('%Y-%m-%d') for ts in ax1.get_xticks()])

dfb.plot(kind='scatter',colormap='Blues',title='%s Polls'%state,ax=ax1,edgecolors='blue',vmax=10)
plt.ylim(30,70)
plt.axhline(50,ls='--',alpha=0.5,color='grey')
plt.xticks(rotation=20)

现在,每当我尝试在其上绘制一条线时,都会得到以下内容

import matplotlib.pyplot as plt
import numpy as np

x = dft['pct']
u = dft['Trump Odds']
t = list(pd.to_datetime(dft['end_date']))

plt.hold(True)
plt.subplot2grid((1,1),(0,0))
plt.plot(t,x)
plt.scatter(t,u)
plt.show()

enter image description here

如果不清楚,这不是我想要的。这些点代表单独的民意测验,而我的数据则代表一条汇总单独的民意测验的线。我认为这与日期时间以及在轮询中针对特定日期进行多次轮询的可能性有关。我认为绘图仪感到困惑,因为我在同一日期具有双精度值,因此它假定这不是时间序列,并且当我绘制一条线时,它会维持我们不需要任何连续性的假设。 >

python中必须有某些东西可以处理在时间xaxis散点图上绘制时间序列吗?

dft数据:

              end_date   pct  fte_grade  Trump Odds
0  1598054400000000000  32.0          6   32.000000
1  1588550400000000000  32.0          7   32.000000
2  1582156800000000000  39.0          8   34.666667
3  1585180800000000000  33.0          8   34.206897
4  1587600000000000000  29.0          8   33.081081
5  1590019200000000000  32.0          8   33.025641
6  1559779200000000000  36.0          8   33.800000
7  1593043200000000000  32.0          8   32.400000

解决方法

您的strange行不是由于您没有在绘制前对df进行排序吗?

import matplotlib.pyplot as plt
import numpy as np

dft=dft.sort_values(by=['end_date'])
x = dft['pct']
u = dft['Trump Odds']
t = list(pd.to_datetime(dft['end_date']))

plt.hold(True)
plt.subplot2grid((1,1),(0,0))
plt.plot(t,x)
plt.scatter(t,u)
plt.show()

enter image description here