如何在Pandas中绘制多颜色的时间序列线?
在数据可视化的过程中,多颜色的时间序列线经常被用来更好的呈现数据。在Pandas中,我们可以很容易地为时间序列线设置不同的颜色。在本文中,我们将演示如何在Pandas中绘制多颜色的时间序列线。
创建Pandas时间序列
在开始之前,我们需要创建一个Pandas时间序列。我们可以使用Pandas的日期时间索引,并在上面生成随机数,以模拟时间序列。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建日期时间索引,并生成随机数
rng = pd.date_range('1/1/2021', periods=50, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
绘制简单的时间序列线
在绘制多颜色的时间序列线之前,我们需要先绘制一个简单的时间序列线。我们可以使用Pandas的plot函数,简单地传递时间序列索引和值即可。
# 绘制简单的时间序列线
ts.plot()
plt.show()
如上图所示,我们已经可以成功地绘制了一个简单的时间序列线。
绘制多颜色的时间序列线
为了绘制多颜色的时间序列线,我们需要将时间序列线分成几个部分,并为每个部分设置不同的颜色。
例如,我们可以将时间序列线分成三个部分:正值、负值和零值,然后分别设置蓝色、红色和灰色为它们的颜色。
# 将时间序列线分成三个部分,并做颜色映射
pos = ts.where(ts > 0, 0)
neg = ts.where(ts < 0, 0)
zero = ts.where(ts == 0, 0)
# 设置颜色映射
colors = np.array(['r', 'b', 'g'])
接下来,我们需要创建三个子图,并将每个子图与颜色映射相关联。将三个子图绘制在一个坐标系上,而每个子图将与相应的数据部分相关联。
# 创建三个子图,并设置颜色为相应数据部分
fig, ax = plt.subplots()
ax.plot(pos.index, pos.values, colors[(pos != 0).astype(int)], label='Positive Values')
ax.plot(neg.index, neg.values, colors[(neg != 0).astype(int)], label='Negative Values')
ax.plot(zero.index, zero.values, 'gray', label='Zero Values')
最后,我们需要为坐标系设置图例,并将时间序列线的标签设置为日期时间索引的字符串表示。
# 设置图例并调整标签格式
ax.legend()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.show()
如上图所示,我们成功地绘制了多颜色的时间序列线。
完整代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# 创建日期时间索引,并生成随机数
rng = pd.date_range('1/1/2021', periods=50, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
# 绘制简单的时间序列线
ts.plot()
plt.show()
# 将时间序列线分成三个部分,并做颜色映射
pos = ts.where(ts > 0, 0)
neg = ts.where(ts < 0, 0)
zero = ts.where(ts == 0, 0)
# 设置颜色映射
colors = np.array(['r', 'b', 'g'])
# 创建三个子图,并设置颜色为相应数据部分
fig, ax = plt.subplots()
ax.plot(pos.index, pos.values, colors[(pos != 0).astype(int)], label='Positive Values')
ax.plot(neg.index, neg.values, colors[(neg != 0).astype(int)], label='Negative Values')
ax.plot(zero.index, zero.values, 'gray', label='Zero Values')
# 设置图例并调整标签格式
ax.legend()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.show()
结论
在Pandas中绘制多颜色的时间序列线很容易。首先将时间序列线分成几个部分,并为每个部分设置不同的颜色。然后在一个坐标系上绘制每个部分,并为坐标系设置图例。最后,将日期时间索引的标签设置为字符串格式。